MyBatis功能实现简单示例

可以集中管理MySQL查询语句

https://mybatis.net.cn/

步骤超详细的spring+springMVC+Mybatis整合_springmvc+spring+mybatis整合过程-CSDN博客

  • 创建表,添加数据

  • 创建模块,导入坐标

  • 编写MyBatis核心配置文件–>替换连接信息解决硬编码问题

  • 编写SQL映射文件–>统一管理sql语句,解决硬编码问题

  • 编码

    定义POJO类

    加载核心配置文件,获取 SqlSessionFactory对象

    获取SqlSession对象,执行SQL语句

    释放资源

步骤

导入坐标

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>

<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>

编写MyBatis核心配置文件——替换连接信息,解决硬编码问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?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">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///blog?useSSL=false"/>
<property name="username" value="blog"/>
<property name="password" value="blogblog"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--加载sql映射文件-->
<mapper resource="ArticleMapper.xml"/>
</mappers>
</configuration>

编写SQL映射文件–>统一管理sql语句,解决硬编码问题

1
2
3
4
5
6
7
8
9
10
11
12
13
<?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 namespace="test">
<select id="selectArticle" resultType="com.example.pojo.Article">
select * from article;
</select>

</mapper>

编码

新建pojo包下新建Article类,添加表的字段,和tostring方法用来测试。

然后编写测试类

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
package com.example;

import com.example.pojo.Article;
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.InputStream;
import java.util.List;

public class MyBatisDemo {
public static void main(String[] args) throws Exception {

//1.加载mybatis的核心配置文件,获取SqlSessionFactory
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

//2.获取SqlSession对象,用它执行SQL
SqlSession sqlSession = sqlSessionFactory.openSession();

//3.执行SQL
List<Article> Articles = sqlSession.selectList("test.selectArticle");
System.out.println("Articles = " + Articles);

//4.释放 SqlSession
sqlSession.close();

}
}

Mapper代理开发

  1. 定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下

  2. 设置SQL映射文件的namespace属性为Mapper接口全限定名

  3. 在Mapper接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致

  4. 编码

    通过SqlSession的getMapper方法获取Mapper接口的代理对象

    调用对应方法完成sql的执行

细节:如果Mapper接口名称和SQL映射文件名称相同,并在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载