1. MyBatis简介

1)MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架

2)MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集

3)MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录

2. 使用 MyBatis原因

1)JDBC

(1)SQL 夹在 Java 代码块里,耦合度高导致硬编码内伤

(2)维护不易且实际开发需求中 sql 是有变化,频繁修改的情况多见

2)Hibernate 和 JPA

(1)长难复杂 SQL,对于 Hibernate 而言处理也不容易

(2)内部自动生产的 SQL,不容易做特殊优化

(3)基于全映射的全自动框架,大量字段的 POJO 进行部分映射时比较困难。导致数据库性能下降

3)MyBatis

(1)对开发人员而言,核心 sql 还是需要自己优化

(2)sql 和 java 编码分开,功能边界清晰,一个专注业务、一个专注数据

3. MyBatis下载

1)下载网址

https://github.com/mybatis/mybatis-3/

4. MyBatis HelloWorld

· HelloWorld

– 创建一张测试表

– 创建对应的javaBean

– 创建mybatis配置文件,sql映射文件

– 测试

1) 开发环境准备

(1) 导入 MyBatis 框架的 jar 包、Mysql 驱动包、log4j 的 jar 包

log4j:经典的一种日志解决方案。内部把日志系统抽象封装成Logger 、appender 、pattern 等实现。我们可以通过配置文件轻松的实现日志系统的管理和多样化配置。

mysql-connector:连接数据库的驱动

mybatis:使用mybatis框架

log4j-1.2.17.jar

mybatis-3.4.1.jar

mysql-connector-java-5.1.37-bin.jar

(2)导入log4j的配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration
xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="STDOUT"
class="org.apache.log4j.ConsoleAppender">
<param name="Encoding" value="UTF-8" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n" />
</layout>
</appender>
<logger name="java.sql">
<level value="debug" />
</logger>
<logger name="org.apache.ibatis">
<level value="info" />
</logger>
<root>
<level value="debug" />
<appender-ref ref="STDOUT" />
</root>
</log4j:configuration>

2)创建Mysql测试表

-- 创建库

CREATE DATABASE test_mybatis;

-- 使用库

USE test_mybatis;

-- 创建表

CREATE TABLE tbl_employee(

id INT(11) PRIMARY KEY AUTO_INCREMENT,

last_name VARCHAR(50),

email VARCHAR(50),

gender CHAR(1)

);

3)Employee

使用Employee接收数据库的记录.

public class Employee {

    private Integer id;
private String lastName;
private String email;
private String gender; public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Employee [id=" + id + ", lastName=" + lastName + ", email="
+ email + ", gender=" + gender + "]";
}
}

Employee.java

4)配置文件

(1)参考MyBatis官方手册

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
<property name="username" value="root" />
<property name="password" value="root123" />
</dataSource>
</environment>
</environments> <!-- !!!!!!!!!非常重要!!!!!!!!!!!! -->
<!-- 将我们写好的sql映射文件<EmployeeMapper.xml>一定要注册到全局配置文件中 -->
<mappers>
<mapper resource="EmployeeMapper.xml" />
</mappers> </configuration>

(2)创建MyBatis的SQL映射文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.atguigu.mybatis.EmployeeMapper">
<!--
namespace:名称空间;指定为接口的全类名
id:唯一标识
resultType:返回值类型
#{id}:从传递过来的参数中取出id值
public Employee getEmpById(Integer id);
-->
<select id="selectEmp" resultType="com.atguigu.mybatis.bean.Employee">
select id,last_name lastName,email,gender from tbl_employee where id = #{id}
</select>

</mapper>

5)测试

(1) 构建 SqlSessionFactory

根据全局配置文件,利用SqlSessionFactoryBuilder创建SqlSessionFactory

  String resource = "mybatis-config.xml";

  InputStream inputStream = Resources.getResourceAsStream(resource);

  SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

(2)从 SqlSessionFactory 中获取 SqlSession

使用SqlSessionFactory获取sqlSession对象。一个SqlSession对象代表和数据库的一次会话。

使用SqlSession根据方法id进行操作。

① 最新版的Session获取方式

try (SqlSession session = sqlSessionFactory.openSession()) {

  Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);

}

② 4.1版本获取方式

// 获取sqlSession实例,能直接执行已经映射的sql语句

// sql的唯一标识:statement Unique identifier matching the statement to use.

// 执行sql要用的参数:parameter A parameter object to pass to the statement.

   SqlSession openSession = sqlSessionFactory.openSession();

  try {

    Employee employee = openSession.selectOne("com.atguigu.mybatis.EmployeeMapper.selectEmp", 1);

    System.out.println(employee);

  } finally {

    openSession.close();

  }

(3)NameSpaces说明  

(4)注入框架说明


使用接口式编程

public interface EmployeeMapper {
public Employee getEmpById(Integer id);
}

EmployeeMapper.java

    @Test
public void test1() throws IOException { //1. 获取SQLSessionFactory对象
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //2.获取sqlsession对象
SqlSession openSession = sqlSessionFactory.openSession(); //3.获取接口的实现类对象 接口的类对象会为接口自动的创建一个代理对象,代理对象去执行增删改查方法
try {
EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
Employee employee = mapper.getEmpById(1);
System.out.println(mapper.getClass());
System.out.println(employee);
} finally {
openSession.close();
} }

EmployeeTest.java

    <select id="getEmpById" resultType="com.atguigu.mybatis.bean.Employee">
select id,last_name lastName,email,gender from tbl_employee where id = #{id}
</select>

EmployeeMapper.xml

参考文档:https://mybatis.org/mybatis-3/zh/getting-started.html

https://github.com/mybatis/mybatis-3/

01、MyBatis HelloWorld的更多相关文章

  1. 01、Mybatis快速入门

    MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用 ...

  2. spring、springmvc、mybatis整合笔记

    这段时间上一个项目刚做完,下一个项目还没开始,趁这个时候来认真总结一下上个项目使用的ssm开发框架.由于,项目中关于使用ssm这部分的代码和配置是我们项目的整体架构师一个独立完成的,我们只负责业务部分 ...

  3. Spring Boot 2.x 综合示例-整合thymeleaf、mybatis、shiro、logging、cache开发一个文章发布管理系统

    一.概述 经过HelloWorld示例(Spring Boot 2.x 快速入门(上)HelloWorld示例)( Spring Boot 2.x 快速入门(下)HelloWorld示例详解)两篇的学 ...

  4. 基于Maven + SSM (Spring、SpringMVC、Mybatis)构建一个简单的测试项目

    最近在公司实习期间的培训交流中有机会接触到SSM,然后自己花费1周的时间投入学习.谈不上深刻理解其中原理,所以没有涉及理论知识,只是浅层次的学习如何使用,在此将学习过程记录整理出来,一方面自己备用:另 ...

  5. [J2EE]MyBatis HelloWorld

    一.MyBatis简单介绍 iBatis是apche的一个开源项目.2010年迁移到google code后改名为MyBatis,2013年前已到github.MyBatis是一个基于java的持久层 ...

  6. java maven、springmvc、mybatis 搭建简单Web项目学习笔记

    前言: 空余的时间,学学 Java,没准哪天用的到: 环境搭建折腾了好几天,总算搞顺了,也做个学习笔记,以防后面会忘记: 一.安装文件及介绍 JDK:jdk1.8.0 77 eclipse-maven ...

  7. springBoot整合spring、springMVC、mybatis

    前文 1.为什么使用springBoot 众所周知,spring是Java在搭建后台时非常实用的框架,其整合了市场上几乎所有的主流框架于一体,使后端编程更加高效.快速: 而SpringBoot更是把s ...

  8. Spring Boot -- Spring Boot之@Async异步调用、Mybatis、事务管理等

    这一节将在上一节的基础上,继续深入学习Spring Boot相关知识,其中主要包括@Async异步调用,@Value自定义参数.Mybatis.事务管理等. 本节所使用的代码是在上一节项目代码中,继续 ...

  9. SpringBoot:整合Druid、MyBatis

    目录 简介 JDBC 导入依赖 连接数据库 CRUD操作 自定义数据源 DruidDataSource Druid 简介 配置数据源 配置 Druid 数据源监控 配置 Druid web 监控 fi ...

随机推荐

  1. PHP转Go系列:数组与切片 转

    数组的定义# 用过PHP的同学应该很清楚,无论多么复杂的数据格式都可以用数组来表达,什么类型的数据都可以往里塞,它是工作必备的一部分,使用很简单,易用程度简直变态. Copy $array = [1, ...

  2. subprocess中命令为参数序列和字符串的区别

    参数args 参数args可以是一个参数序列,也可以是一个单独的字符串.参数序列通常是首选的,因为它允许模块处理参数的转义和引号(例如,允许文件名中有空格). 如果传递参数序列,默认情况下,程序执行序 ...

  3. centos使用上一条命令的快捷键

    使用上一条的最后一个参数 有时需要连续多个命令操作一个路径很长的文件: cat /usr/share/doc/centos-release/GPL 下一个命令可能还要使用这个路径,即使有命令补全也会很 ...

  4. 群晖DS218+做maven私服(nexus3)

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  5. eclipse时一直卡在进程中

    (1)今天遇到进入eclipse时一直卡在 进程中,无论是重启电脑,还是重启软件 删除 D:\workspace\.metadata\.lock 文件才有用,特此记录下. (2)还有一种情况就是打开e ...

  6. 稳压二极管、肖特基二极管、静电保护二极管、TVS管

    1.稳压二极管 正向导通电压跟普通二级管一样约为0.7v,反向状态下在临界电压之前截止,在达到临界电压的条件下会处于导通的状态,电压也不再升高,所以用在重要元器件上,起到稳压作用. 稳压二极管主要利用 ...

  7. Redis---07主从复制(哨兵模式)

    一.什么是哨兵模式 基于主从复制的一般模式(一主二从)下,当发生主机发生宕机时,会通过流言协议判断主机是不是宕机,是的话则会通过投票协议自动把某一个从机转换成主机. 二.设置哨兵模式的配置文件 通过r ...

  8. Azure Data Factory(一)入门简介

    一,引言 今天分享一个新的Azure 服务-----Azure Data Factory(Azure 数据工厂),怎么理解,参考根据官方解释-----数据工厂解释:大数据需要可以启用协调和操作过程以将 ...

  9. 【转】Setting up SDL 2 on MinGW

    FROM: http://lazyfoo.net/tutorials/SDL/01_hello_SDL/windows/mingw/index.php Setting up SDL 2 on MinG ...

  10. 4G DTU的通信距离是多少

    4G是现今应用非常广泛的一种通信技术,主要是为广义的远程信息处理提供服务.随着计算机与各种具有处理功能的智能设备在各领域的日益广泛使用,数据通信的应用范围也日益扩大.在物联网领域中,4G是移动设备实现 ...