(一)为什么要用Mybatis?
(1)Mybatis对比JDBC而言,sql(单独写在xml的配置文件中)和java编码分开,功能边界清晰,一个专注业务,一个专注数据。
(2)Mybatis是持久层框架,避免了大部分JDBC代码和手动设置参数以及获取结果集。
(3)Mybatis可以用简单的XML或注解进行配置和原始映射,将接口和Java对象映射成数据库中的记录。(不用像JDBC中实体类属性一 一对应表列名)
(4)Mybatis是一个半自动的ORM框架。
(二)Mybatis项目构建
1、开发环境准备
(1)单击SSM2项目名,右键new一个module,选择“Maven Archetype”,命名为mybatis01,并给其指定gav:
(2)在pom.xml中导入相关jar包:
<!--导入MyBatis的HelloWorld相关jar包-->
<dependencies>
<!--导入MySQL的驱动包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.25</version>
</dependency>
<!--导入MyBatis的jar包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<!--junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!--log4j-->
<!--日志记录:查看sql语句,参数绑定,查询结果查看-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
(3)创建ssm数据库及两个表
(4)创建实体类
对应employees表在src的main下面的java文件夹下新建com.atguigu.bean文件夹,里面新建一个实体类Employee,对应表的列名新建对应属性。
2、MyBatis框架的搭建
(1)创建持久层接口
在src的main下面的java文件夹下新建com.atguigu.dao文件夹,在里面新建EmployeeDao接口,里面只写了一个根据主键查询Employee对象的抽象方法:
public interface EmployeeDao {
//根据主键查询Employee对象
Employee getById(Integer id);
}
(2)创建接口的实现类
Mybatis通过映射文件替代持久层接口的实现类(将sql语句写在配置文件内)。
在main的resource文件夹下新建EmployeeDao.xml文件,里面要写的头信息去哪里找呢?
去官网链接,选择“入门”,找到“探究已映射的SQL”:
里面的代码就是我们需要的,复制一份到EmployeeDao.xml中,进行修改:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--mapper标签就是根节点,有一个namespace的属性:指定映射文件对应的持久层接口是谁?所以属性值是接口全类名-->
<mapper namespace="com.atguigu.dao.EmployeeDao">
<!--实现该抽象方法:Employee getById(Integer id); -->
<select id="getById" parameterType="int" resultType="com.atguigu.bean.Employee">
select id,last_name lastName,email,gender,salary,dept_id deptId from employees where id=#{id}
</select>
</mapper>
3、创建Mybatis的核心配置文件
设置你要连接的数据库是哪个,加载映射文件。
在main的resource文件夹下新建mybatis-config.xml文件,里面要写的头信息去哪里找呢?
去官网链接,选择“入门”,找到“从XML中构建SqlSessionFactory”:
将代码复制一份到mybatis-config.xml中,进行修改:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--环境:设置数据库的连接信息:讲完Spring之后,不用这个了-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/ssm"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!--加载映射文件-->
<mappers>
<mapper resource="EmployeeDao.xml"/>
</mappers>
</configuration>
4、测试
在test文件夹下的java文件夹下新建com.atguigu文件夹,在里面新建MyBatisTest类进行测试。
public class MyBatisTest {
//下面的代码,后面将Spring之后都不用写,只是暂时对MyBatis做测试
@Test
public void testMyBatis(){
try {
//1. 加载MyBatis的核心配置文件
InputStream input = Resources.getResourceAsStream("mybatis-config.xml");//注意:Resource导的是ibatis那个类里的,别导错了
//2. 创建SqlSessionFactory工厂对象(设计模式之工厂模式)
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(input);
//3. 从工厂内获得一个SqlSession对象(看做之前的Connection)
SqlSession sqlSession = factory.openSession();
//4. 通过SqlSession对象获取到EmployeeDao的对象
// (获得的肯定是EmployeeDao的实现类对象,MyBatis根据映射文件生成的)
EmployeeDao employeeDao = sqlSession.getMapper(EmployeeDao.class);
//5. 通过EmployeeDao调用方法即可
Employee employee = employeeDao.getById(1);
System.out.println("employee="+employee);
//6. sqlSession对象需要关闭(按照常理应该在finally中关)
sqlSession.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
执行Test,可以看到控制台输出了id=1的Employee对象了: