- 一、环境搭建
- 二、数据准备
- 三、配置核心配置文件
- 四、日志配置(可不配置)
- 五、创建实体
- 六、创建 Mapper 文件
- 七、注册 mapper 文件
- 八、运行测试
- 九、测试结果如下:
创建 maven web 项目 mybatis01 并添加 maven 依赖如下。
二、数据准备org.mybatis mybatis 3.4.6 mysql mysql-connector-java 5.1.38 ch.qos.logback logback-classic 1.2.3
CREATE TABLE `pet` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL, `weight` double NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4; insert into `pet`(`id`,`name`,`weight`) values (1,'花花',4.5); insert into `pet`(`id`,`name`,`weight`) values (2,'白白',5.6); insert into `pet`(`id`,`name`,`weight`) values (3,'黑黑',7.8); insert into `pet`(`id`,`name`,`weight`) values (4,'红红',9);三、配置核心配置文件
配置 mybatis 核心配置文件:mybatis-conf.xml,在 resource 目录下创建此文件,内容如下:
注意:
dataSource 的类型可以配置成其内置类型之一, UNPOOLED、POOLED 、JNDI。
UNPOOLED,MyBatis 会为每一个数据库操作创建一个新的连接,并关闭它。该方式适用于只有小规模数量并发用户的简单应用程序上。
POOLED,MyBatis 会创建一个数据库连接池,连接池中的一个连接将会被用作数据库操作。一旦数据库操作完成,MyBatis 会将此连接返回给连接池。在开发或测试环境中,经常使用此种方式。
JNDI,MyBatis 从在应用服务器向配置好的 JNDI 数据源 dataSource 获取数据库连接。在生产环境中,优先考虑这种方式。
为了监控 mybatis 执行情况,我们通过 logback 打印相关程序运行情况。在 resource 下添加日志配置文件 logback.xml
%d{yyyy-MM-dd HH:mm:ss} %-5p --- [%t] %-40.40logger{39} : %m%n
加入该文件后,mybatis 运行情况、发送的 SQL、SQL 填充的数据和返回的数据条数都打印显示到控制台。
五、创建实体创建对应实体,并添加对应的 getter 与 setter 方法。因为 mybatis 会使用反射完成对象的封装,所以实体一定需要无参构造方法。如果需要输出对象,还需要重写它的 toString 方法。
public class Pet{
private Integer id;
private String name;
private Double weight
}
六、创建 Mapper 文件
mybatis 的所有数据库操作都是通过 mapper 文件完成的。mapper 文件一般存放在 resource/mapper/ 目录下。
创建实体类对应的映射文件 *Mapper.xml,详细如下代码所示:
select * from pet where id=#{id}
注意:
parameterType:参数类型
resultType:方法返回类型(如果返回是集合,则返回类型添集合存放对象的类型的全路径)
不论是参数类型还是返回类型,自定义类都需要写类的全路径名。
七、注册 mapper 文件在 mybatis 核心配置文件 mybatis-conf.xml 中注册上面的 *Mapper.xml。
下面是对这几个配置文件一点解释说明:
1、配置文件 mybatis-conf.xml 是 mybatis 用来建立 sessionFactory,里面主要包含了数据库连接相关内容。
2、mybatis-conf.xml 里面的 是包含要映射的类的 xml 配置文件。
3、在 *Mapper.xml 文件里面主要是定义各种 SQL 语句,以及这些语句的参数,以及要返回的类型等等。
创建 main 方法并完成相关测试。
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.Reader;
public class MainTest {
public static void main(String[] args) throws IOException {
//加载 mybatis 的核心配置文件(它也加载关联的映射文件)
Reader reader = Resources.getResourceAsReader("mybatis-conf.xml");
//构建 sqlSession 的工厂
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
//创建能执行映射文件中 sql 的 sqlSession
SqlSession session = sessionFactory.openSession();
Object o = session.selectOne("cn.hxzy.mapper.petMapper.getById",3);
System.out.println(o);
}
}
注意:
1.selectOne 设计的初衷是查询单个,当查询时出现多个结果会报下面的错误:如果查询出来是集合用 selectList 方法。
org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 3
2.SqlSessionFactory 线程安全性,可以设计成单例
3.SqlSession 线程非安全,不能做类的公用变量
练习:
1.创建项目 fruit01,并在项目中创建 fruit(id,name,color)实体和对应的数据库表,并完成根据 id 查询水果和查询全部水果功能。
参考代码:
pom.xml代码如下:
4.0.0 org.example mybatis pom 1.0-SNAPSHOT fruit01 junit junit 4.11 test javax.servlet jstl 1.2 org.apache.tomcat tomcat-jsp-api 8.5.59 provided mysql mysql-connector-java 5.1.44 11 11
mybatis org.example 1.0-SNAPSHOT 4.0.0 fruit01 fruit01 http://www.example.com UTF-8 1.8 1.8 org.mybatis mybatis 3.4.6 mysql mysql-connector-java 5.1.48 ch.qos.logback logback-classic 1.2.6 junit junit 4.11 test org.codehaus.mojo exec-maven-plugin 3.0.0 java test maven-clean-plugin 3.1.0 maven-resources-plugin 3.0.2 maven-compiler-plugin 3.8.0 maven-surefire-plugin 2.22.1 maven-jar-plugin 3.0.2 maven-install-plugin 2.5.2 maven-deploy-plugin 2.8.2 maven-site-plugin 3.7.1 maven-project-info-reports-plugin 3.0.0
App.java代码如下:
package org.example;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.Reader;
import java.util.List;
public class App {
public static void main(String[] args) throws IOException {
//加载 mybatis 的核心配置文件(它也加载关联的映射文件)
Reader reader = Resources.getResourceAsReader("mybatis-conf.xml");
//构建 sqlSession 的工厂
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
//创建能执行映射文件中 sql 的 sqlSession
SqlSession session = sessionFactory.openSession();
Fruit o = session.selectOne("com.allen.mapper.getById", 1);
System.out.println(o.toString());
List list = session.selectList("com.allen.mapper.findAll");
System.out.println(list);
session.close();
}
}
Fruit代码内容如下:
package org.example;
public class Fruit {
private Integer id;
private String name;
private String color;
@Override
public String toString() {
return "Fruit{" +
"id=" + id +
", name='" + name + ''' +
", color='" + color + ''' +
'}';
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
fruitMapper代码如下:
mybatis-conf.xml代码如下:
九、测试结果如下:



