(一)为什么要用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 mapperPUBLIC "-//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 configurationPUBLIC "-//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做测试@Testpublic 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对象了: