学习官网
https://mybatis.org/mybatis-3/zh/index.html
一、概述
1.1 什么是mybatis?作用?
MyBatis是一个持久层框架 ORM —对象关系映射(数据库表的列和实体类的成员变量一一对应)
作用
具有较高的SQL灵活性,支持高级映射(一对一,一对多),动态SQL,延迟加载和缓存等特性
MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
二、使用mybatis
- 加入依赖
- 编写mapper.xml,写sql语句,并定义好sql的输入参数,和输出参数
- 编写全局配置文件,配置数据源,以及要加载的mapper.xml文件
- 通过全局配置文件,创建SqlSessionFactory
- 每次进行CRUD时,通过SqlSessionFactory创建一个SqlSession
- 调用SqlSession上的selectOne,selectList,insert,delete,update等方法,传入mapper.xml中SQL标签的id,以及输入参数
2.1 引入依赖
<!--mybatis依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
2.2 创建pojo类
package com.mis.basic.pojo;
/**
* @author:刘倩云
* @createTime:2021-03-08
*/
public class Student {
private Long stuId;
private String stuName;
private String loginPass;
private Integer stuGender;
private Integer stuAge;
private String stuBirth;
private String stuTel;
private String stuEducation;
private Integer status;
private Long classId;
//省略get,set,构造函数
}
2.3 mapper映射文件(编写SQL)
映射文件一般和接口放在一起
<!-- StudentMapper.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">
<mapper namespace="com.mis.basic.IStudentDao">
<select id="queryAll" resultType="com.mis.basic.pojo;">
SELECT * FROM student;
</select>
<insert id="insert" parameterType="com.mis.basic.pojo;">
INSERT INTO student (name,age,gender) VALUES (#{name},#{age},#{gender});
</insert>
</mapper>
2.4 数据源properties文件
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://192.168.183.129:3306/mis?characterEncoding=utf8
user=root
password=root
2.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>
<!-- 配置文件信息 -->
<properties resource="properties/db.properties"></properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!-- 从配置文件中加载属性 -->
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${user}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 加载前面编写的SQL语句的文件 -->
<mapper resource="StudentMapper.xml"/>
</mappers>
</configuration>
2.6 编写DAO
public class StudentDaoImpl ... {
public StudentDao(String configName) throws IOException {
InputStream inputStream = Resources.getResourceAsStream(configName);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
//添加
public int save(Student student) {
SqlSession sqlSession = sqlSessionFactory.openSession();
int result = sqlSession.insert("insert", student);
sqlSession.commit();
sqlSession.close();
return result;
}
//查找所有
public List<Student> findAll() {
SqlSession sqlSession = sqlSessionFactory.openSession();
List<Student> students = sqlSession.selectList("queryAll");
sqlSession.close();
return students;
}
}
注:可以写Mybatis获取sqlSession对象的工具类
/**
* @author:刘倩云
* @createTime:2021-03-20
* 获取sqlSession
*/
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
//获取sqlSessionFactory对象
String resource = "mybatis-config.xml";
InputStream in = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
} catch (IOException e) {
e.printStackTrace();
}
}
//获取sqlSession对象
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
测试:
@Test
public void test01() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
//方式一:
TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class);
Teacher teacher = mapper.queryById(1L);
System.out.println(teacher);
}