一、 MyBatis简介
1.1 框架概念
框架,就是软件的半成品,完成了软件开发中的通用操作,程序员只需很少或者不用进行加工就能够实现特定功能,从而简化开发人员在软件开发中的步骤,提高开发效率
1.2 常用框架
- MVC框架:简化了Servlet的开发步骤
- Struts2
- SpringMVC
- 持久层框架:完成数据库操作的框架
- apache DBUtils
- Hibernate
- Spring JPA
- MyBatis
- 胶水框架:Spring
SSM:Spring SpringMVC MyBatis
SSH: Spring Struts2 Hibernate
1.3 MyBatis介绍
MyBatis是一个半自动 的ORM 框架
ORM(Object Relational Mapping)对象关系映射,将Java中的一个对象与数据库中一行记录一一对应
ORM框架提供了实体类和数据表的映射关系,通过映射文件的配置,实现对象的持久化
MyBatis特点:
- 支持自定义SQL、存储过程
- 对原有的JDBC进行了封装,几乎消除了所有的JDBC代码,让开发者只需关注SQL本身
- 支持XML和注解配置方式自动完成ORM映射,实现结果映射
二、MyBatis框架部署
框架部署,就是将框架引入到我们的项目中
2.1 创建Maven项目
- Java工程
- Web工程
注意: 创建Maven项目时出现,如下错误时:
java.lang.RuntimeException: java.lang.RuntimeException: org.codehaus.plexus.component.repository.exception.ComponentLookupException:\ncom.google.inject.ProvisionException: Unable to provision, see the following errors:
原因是Maven版本过高,解决方法为更改Maven版本(使用IDEA自带的Maven即可)
2.2 在项目中添加MyBatis依赖
- 在pom.xml中添加依赖
- mybatis
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.4</version></dependency>
- mybatis
- mysql driver
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.19</version></dependency>
2.3 创建MyBatis配置文件
- 创建自定义模板:选择recources—-右键New—-编辑文件模板
<?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></configuration>

- 在resources中创建名为mybatis-config.xml的文件
- 在mybatis-config.xml 文件配置数据库连接信息
<environments default=""><environment id=""><transactionManager type=""></transactionManager><dataSource type=""></dataSource></environment><environment id=""><transactionManager type=""></transactionManager><dataSource type=""></dataSource></environment></environments>
在environments配置数据库连接信息
在enviroments标签中可以定义多个environment标签,每个environment标签可以定义一套连接配置
default属性,用来指定使用哪个environment标签
三、MyBatis框架使用
学生信息的数据库操作
3.1 创建数据表
create table tb_students(sid int primary key auto_increment,stu_num char(5) not null unique ,stu_name varchar(20) not null ,stu_gender char(2) not null ,stu_age int not null);
3.2 创建实体类
导入lombok包
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.12</version><scope>provided</scope></dependency>
创建类

3.3 创建DAO接口,定义操作方法
public interface StudentDAO {public int insertStudent(Student student);}
3.4 创建DAO接口的映射文件
- 在resources 目录下,新建名为mappers 文件
- 在mappers 中新建名为StudentMapper.xml 的映射文件(根据模板创建)
```xml
<?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">
<br />mapper文件相当于DAO接口的实现类,namespace属性要指定实现DAO接口的全名称- 在映射文件对DAO中定义的方法进行实现```xml<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.java.dao.StudentDAO"><insert id="insertStudent" parameterType="com.java.pojo.Student">insert into tb_students(stu_num,stu_name,stu_gender,stu_age)values(#{stuNum},#{stuName},#{stuGender},#{stuAge})</insert><delete id="deleteStudent">delete from tb_students where stu_num=#{stuNum}</delete></mapper>
其中如果接口中的方法定义了形参类型则parameterType可以不写
3.5 将映射文件添加到主配置文件
<?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="mysql"><environment id="mysql"><transactionManager type="JDBC"></transactionManager><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/java_test?serverTimezone=UTC"/><property name="username" value="root"/><property name="password" value="hsy031122"/></dataSource></environment></environments><mappers><mapper resource="mappers/StudentMapper.XML"></mapper></mappers></configuration>
注意:映射文件的后缀名必须大写(StudentMapper.XML)
项目结构

四、单元测试
4.1 添加单元测试依赖
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency>
4.2 创建单元测试类

在类名后面右键—-生成—-测试

4.3 测试代码
package com.java.dao;import com.java.pojo.Student;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.InputStream;public class StudentDAOTest {@org.junit.Testpublic void insertStudent(){try {//加载mybatis配置文件InputStream is = Resources.getResourceAsStream("mybatis-config.xml");SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();//会话工厂SqlSessionFactory factory=builder.build(is);//会话(连接)SqlSession sqlSession=factory.openSession();//通过会话获取DAO的对象StudentDAO studentDAO=sqlSession.getMapper(StudentDAO.class);//测试studentDAO中的方法int i = studentDAO.insertStudent(new Student(0, "10001", "张三", "男", 21));//提交事务sqlSession.commit();System.out.println(i);} catch (IOException e) {e.printStackTrace();}}@org.junit.Testpublic void deleteStudent() {}}
五、MyBatis的CRUD操作
案例:学生信息的增删改查
5.1 添加操作
略
5.2 删除操作
根据学号删除一条学生信息
- 在StudentDAO中定义删除方法
- 在StudentMapper.XML中对接口方法进行“实现”
- 测试:在Student DAO的测试类中添加测试方法
注:编写代码完成后必须提交事务
@org.junit.Testpublic void deleteStudent() {try {//加载mybatis配置文件InputStream is = Resources.getResourceAsStream("mybatis-config.xml");SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();//会话工厂SqlSessionFactory factory=builder.build(is);//会话(连接)SqlSession sqlSession=factory.openSession();//通过会话获取DAO的对象StudentDAO studentDAO=sqlSession.getMapper(StudentDAO.class);//测试studentDAO中的方法int i = studentDAO.deleteStudent("10001");sqlSession.commit();System.out.println(i);} catch (IOException e) {e.printStackTrace();}}
5.3 修改操作
根据学生学号,修改其他字段的信息
