最近在做软创的项目时,遇到了一个需求,就是如何在一个非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存放测试类:

3、开始设计
3.1 domain类的设计
先设计数据库表,我直接在IDEA里面设计了。如下图:

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映射文件设计:

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 去掉。

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进行测试,你也可以自己编写一个类。
测试结果如下:
根据上面的代码可以看出,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