MybatisPlus基本使用
1. Mybatis-Plus概念
1.1 Mybatis-Plus介绍
-
Mybatis-Plus介绍
MyBatis-Plus(简称 MP)是⼀个 MyBatis 的增强⼯具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提⾼效率⽽⽣。
- 愿景
我们的愿景是成为 MyBatis 最好的搭档,就像魂⽃罗中的1P、2P,基友搭配,效率翻倍。
1.2 特性
1.3 架构
-
mybatis-plus-boot-starter 表示需要引入的依赖jar包
-
annotation 注解模块
-
extension 扩展模块
-
core 核心模块
-
generator 代码生成器模块
-
scan Entity
项目启动后会扫描数据库实体类
- Analysis Table Name Column
扫描完成后通过反射进行实体类进行分析,包含Table和Colum等相关信息,知道相关信息之后,会根据表名和列名生成对应的增删改查方法
- Injection Mybatis Container
将增删改查方法注入到Mybatis容器中进行操作
1.4 支持数据库
由此,Mybatis可以支持的数据库,Mybatis-Plus基本上都支持
1.5 作者
Mybatis-Plus是由baomidou(苞⽶⾖)组织开发并且开源的,⽬前该组织⼤概有31⼈左右。码云地址:gitee.com/organizatio…
2. Mybatis-Plus快速⼊⻔
2.1 安装
全新的如下:Mybatis-Plus3.0
基于 JDK8,提供了lambda
形式的调⽤,所以安装集成MP3.0要求如下
- JDK 8+
- Maven or Gradle
Spring MVC
Maven:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>3.4.0</version>
</dependency>
复制代码
SpringBoot
Maven:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.0</version>
</dependency>
复制代码
waring
引入Mybatis-Plus之后请不要在引入Mybatis和Mybatis-Spring,以此来避免版本差异发生的问题
对于Mybatis整合MP有常常有三种⽤法,分别是Mybatis+MP、Spring+Mybatis+MP、Spring Boot+Mybatis+MP。
2.2 创建数据库以及表
- 创建mp数据库
- 创建User表,其表结构如下:
2.3 创建⼯程
导⼊依赖:
<dependencies>
<!-- mybatis-plus 插件依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>3.1.1</version>
</dependency>
<!--Mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!--连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.11</version>
</dependency>
<!-- 简化 bean 代码的⼯具包 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.4</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.4</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
复制代码
2.4 Mybatis + MP
下⾯演示,通过纯Mybatis与Mybatis-Plus整合。
log4j.properties:
log4j.rootLogger=DEBUG,A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=[%t] [%c]-[%p] %m%n
复制代码
Mybatis实现查询User
- 第⼀步,编写mybatis-config.xml⽂件:
<?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="jdbc.properties"></properties>
<!--environments:运⾏环境-->
<environments
default="development">
<environment id="development">
<!--当前的事务事务管理器是JDBC-->
<transactionManager
type="JDBC"></transactionManager>
<!-- 数据源信息 POOLED : 使⽤ mybatis 的连接池 -->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!--引⼊映射配置⽂件 -->
<mappers>
<mapper
resource="mapper/UserMapper.xml"></mapper>
</mappers>
</configuration>
复制代码
- 第⼆步,编写User实体对象:(这⾥使⽤lombok进⾏了进化bean操作)
@Data
//生成无参构造
@NoArgsConstructor
//生成有参构造
@AllArgsConstructor
public class User {
private Long id;
private String name;
private Integer age;
private String email;
}
复制代码
- 第三步,编写UserMapper接⼝:
public interface UserMapper {
List<User> findAll();
}
复制代码
- 第四步,编写UserMapper.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.lagou.mapper.UserMapper">
<!--查询所有-->
<select id="findAll" resultType="com.mybatis.mp.User">
select *
from user
</select>
</mapper>
复制代码
- 第五步,编写TestMybatis测试⽤例:
public class MybatisTest {
@Test
public void test1() throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> all = mapper.findAll();
for (User user : all) {
System.out.println(user);
}
}
}
复制代码
- 测试结果:
注:如果实体类名称和表名称不⼀致,可以在实体类上添加注解@TableName("指定数据库表名")
Mybatis+MP实现查询User
- 第⼀步,将UserMapper继承BaseMapper,将拥有了BaseMapper中的所有⽅法:
public interface UserMapper extends BaseMapper<User > {
List<User> findAll();
}
复制代码
- 第⼆步,使⽤MP中的MybatisSqlSessionFactoryBuilder进程构建:
@Test
public void test2() throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
//这⾥使⽤的是MP 中的MybatisSqlSessionFactoryBuilder
SqlSessionFactory sqlSessionFactory = new MybatisSqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//可以调⽤BaseMapper中定义的⽅法
List<User> all = mapper.selectList(null);
for (User user : all) {
System.out.println(user);
}
}
复制代码
- 测试:
注:如果实体类名称和表名称不⼀致,可以在实体类上添加注解@TableName("指定数据库表名") 简单说明:
由于使⽤了 MybatisSqlSessionFactoryBuilder进⾏了构建,继承的BaseMapper中的⽅法就载⼊到了SqlSession中,所以就可以直接使⽤相关的⽅法; 如图