最近在做软创的项目时,遇到了一个需求,就是如何在一个非Spring项目中使用MyBatis-Plus,我觉得这个需求还是挺有价值的,因为我们现在很多项目都是Spring项目,思维比较死板。所以我记录了这个问题。

时间比较紧,内容写的跳跃性可能比较强,大家跟上。

1、Maven配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
</dependency>
<!-- 数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.8</version>
</dependency>
<!-- 导入mybatis-plus相关依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>2.0.1</version>
</dependency>

2、目录结构

设计到的主要文件夹和Java类我用红框圈起来了,domain实体类,mapper存放Mapper类,service存放服务类,resources/mapper存放映射xml文件,MyBatis3Test存放测试类:

image-20240306171527565

3、开始设计

3.1 domain类的设计

  1. 先设计数据库表,我直接在IDEA里面设计了。如下图:

    image-20240306172635405

1
2
3
4
5
6
7
8
9
create table testuser
(
name varchar(32) default NULL null comment '姓名',
age int default 0 null comment '年龄',
userid int not null comment '用户id',
constraint userid
primary key (userid)
)
comment '用来测试的user类';

​ 2.然后设计domain类:代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package generator.domain;

//import com.baomidou.mybatisplus.annotations.IdType;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import lombok.Data;
@Data
@TableName(value ="testuser")
public class TestUser {
private String name;
private Integer age;
@TableId
private Integer userid;

}

3.2 Mapper类设计:

1
2
3
4
5
6
7
8
package generator.mapper;

import com.baomidou.mybatisplus.mapper.BaseMapper;
import generator.domain.TestUser;

public interface TestUserMapper extends BaseMapper<TestUser> {

}

3.3 SQL映射文件设计:

image-20240306173414367

1
2
3
4
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "http://mybatis.org/dtd/mybatis-3-mapper.dtd" "mybatis-3-mapper.dtd">
<mapper namespace="generator.mapper.TestUserMapper">
</mapper>

3.4 核心配置文件:

这里不一定是 mysql.cj.jdbc ,如果报错,就把 cj 去掉。

image-20240306173656194

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
<?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>
<!-- 在控制台输出执行的sql语句 -->
<settings>
<setting name="logImpl" value="STDOUT_LOGGING" />
</settings>
<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/jqzc"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/TestUserMapper.xml"/>
</mappers>

</configuration>

3.5 编写测试类

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
import generator.mapper.GpsMapper;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import com.baomidou.mybatisplus.MybatisSessionFactoryBuilder;
import com.baomidou.mybatisplus.MybatisXMLConfigBuilder;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean;
import generator.domain.TestUser;
import generator.mapper.TestUserMapper;


public class MyBatis3Test {

private static SqlSessionFactory sqlSessionFactory = null;
/**
* 测试从数据库里获取GPS的信息
*/
@Test
public void getGPS() throws Exception{
//获取配置文件的输入流
InputStream inputStream = Resources.getResourceAsStream("mybatis.cfg.xml");

MybatisSessionFactoryBuilder mybatisSessionFactoryBuilder = new MybatisSessionFactoryBuilder();

//通过配置文件获取session工厂
SqlSessionFactory sessionFactory = mybatisSessionFactoryBuilder.build(inputStream);

//获取一个session会话
SqlSession session = sessionFactory.openSession();

TestUserMapper mapper = session.getMapper(TestUserMapper.class);

TestUser user = mapper.selectById(1);

System.out.println(user);
}

}

这里我用了一个Junit进行测试,你也可以自己编写一个类。

测试结果如下:image-20240306174536612

根据上面的代码可以看出,mybatis-plus的启动就是加载核心文件(这里是mybatis.cfg.xml),通过核心文件加载相关的sql映射文件完成对普通映射文件与mapper映射文件的封装(区分普通映射文件与mapper映射文件的方式是映射文件的namespece是否是接口的全路径),然后就可以通过会话对象(SqlSession)获取mapper访问数据库了。
当使用spring对其进行整合时,spring的配置文件将代替mybatis-plus的核心文件,并且mapper与sqlsession会话将交给spring去管理。我们只需给spring指定去那里获取sql映射文件与mapper接口即可。

参考链接:https://www.jianshu.com/p/042567d0b5a2