什么是Mybatis

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

持久化

  • 因为内存有断电即失的特性,所以需要进行数据持久化
  • 持久化就是将程序的数据在持久状态和瞬时状态转化的过程

持久层

持久层,可以理解成数据保存在数据库或者硬盘一类可以保存很长时间的设备里面,不像放在内存中那样断电就消失了,也就是把数据存在持久化设备上

Mybatis的简单使用(Maven项目)

pom文件引入jar包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>-
</dependency>
<!-- mysql-jdbc -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
<!-- junit测试依赖 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>

创建工具类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class MybatisUtil {
private static SqlSessionFactory sqlSessionFactory;

static {
InputStream inputStream = null;
try {
//用输入流来读取xml文件
inputStream = Resources.getResourceAsStream("mybatis-config.xml");
} catch (IOException e) {
e.printStackTrace();
}
//创建SqlSession工厂
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}

public static SqlSession getSqlSession(){
//创建并返回SqlSession
return sqlSessionFactory.openSession();
}
}

创建mybatis核心配置文件

mybatis-config.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?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="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!-- JDBC配置 -->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/student-manager?useSSL=true&amp;useUnicode=true&amp;characterEncoding=utf8&amp;serverTimezone=GMT%2B8"/>
<property name="username" value="root"/>
<property name="password" value="lishuang001219"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- resource下的Mapper资源存在单层目录结构时的写法 -->
<mapper resource="StudentMapper.xml"/>
<!-- resource下的Mapper资源存在多层目录结构时的写法 -->
<mapper resource="mapper/StudentMapper.xml"/>
</mappers>
</configuration>

创建实体类

1
2
3
4
5
6
7
8
9
10
11
12
13
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {
private Integer id;
private String name;
private Integer age;
private Integer sex;
private String num;
private String grade;
private String clazz;
private String address;
}

创建Mapper接口文件

1
2
3
public interface StudentMapper {
List<Student> listStudent();
}

创建Mapper配置文件

UserMapper.xml

1
2
3
4
5
6
7
8
9
10
11
12
<?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">
<!-- namespace命名空间:对应一个Mapper接口 -->
<mapper namespace="mapper.StudentMapper">
<!-- sql语句 -->
<!-- id对应接口中定义的方法 resultType表示结果集类型 -->
<select id="listStudent" resultType="pojo.Student">
select * from student
</select>
</mapper>

创建业务层

1
2
3
4
5
6
7
8
9
10
11
public class StudentService implements StudentMapper {
@Override
public List<Student> selectAll() {
List<Student> list;
SqlSession sqlSession = MybatisUtil.getSqlSession();
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
list = mapper.selectAll();
sqlSession.close();
return list;
}
}

编写测试类

1
2
3
4
5
6
7
8
public class MyTest {
StudentService studentService = new StudentService();

@Test
public void test() {
System.out.println(studentService.listStudent());
}
}

目录结构

mybatis-generator的简单使用

注:此插件主要用于自动生成实体类、Mapper接口和Mapper配置文件,mybatis核心配置文件和业务层文件需要根据实际应用场景对照生成的文件自行编写

编写pom文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>

<!-- 添加插件(注意将此行注释删除,中文会引起idea报错) -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.3.0</version>
</plugin>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.4.0</version>
<executions>
<execution>
<id>Generate MyBatis Artifacts</id>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<!-- mysql-jdbc -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
</dependencies>
<configuration>
<!-- 生成的文件覆盖源文件 -->
<overwrite>true</overwrite>
</configuration>
</plugin>
</plugins>
</build>

编写mybatis-generator配置文件

generatorConfig.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!DOCTYPE generatorConfiguration PUBLIC
"-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<context id="simple" targetRuntime="MyBatis3Simple">
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/student-manager" userId="root" password="lishuang001219"/>
<!--实体存放位置-->
<javaModelGenerator targetPackage="pojo" targetProject="src/main/java"/>
<!--Mapper.xml存放位置-->
<sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources"/>
<!--Mapper接口存放位置-->
<javaClientGenerator type="XMLMAPPER" targetPackage="mapper" targetProject="src/main/java"/>
<!--需要生成的表-->
<table tableName="student" />
</context>
</generatorConfiguration>

双击一键生成代码