1. Mybatis-Plus介绍与整合
MyBatis-Plus是基于MyBatis基础上的一个敏捷开发插件,它的作用是帮助我们快速完成对应数据表的增删改查操作。
- MyBatis-Plus(简称MP)是一个MyBatis的增强工具
- 自动实现Mapper CRUD操作,极致提高数据库开发效率。
- MP在MyBatis的基础上只做增强,不做改变
2. MyBatis-Plus整合三部曲
1. pom引入mybatis-plus依赖
<!--mybatis-plus依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>3.4.2</version>
</dependency>
2. SpringXML更改配置SqlSessionFactory实现类
applicationContext.xml
<!-- 2.3. 配置使Ioc容器实例化SqlSessionFactory-->
<!-- SqlSessionFactoryBean 用于根据配置信息创建SqlSessionFactory, 不再需要我们自己手动编码创建 -->
<!-- 原生的MyBatis与Spring整合-->
<!-- <bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">-->
<bean id="sessionFactory" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
<property name="dataSource" ref="datasource"/>
<property name="mapperLocations" value="classpath:mappers/*.xml"/>
<!-- 2.5. MyBatis配置文件地址 -->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>
3. mybatis-config.xml增加MP分页插件
mybatis-config.xml添加
<plugins>
<!-- 配置MyBatis Plus分页插件 -->
<plugin interceptor="com.baomidou.mybatisplus.extension.plugins.PaginationInnerInterceptor"/>
</plugins>
3. MyBatis-Plus开发三部曲
1. 创建实体类,@TableName / @Tableld / @TableField实现与表字段映射
- @TableName - 将实体类与表名映射
- @TableId - 说明对应属性是表的主键
- @TableField - 设置属性与列名的对应关系
创建Test类
package com.imooc.reader.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
@TableName("test") // 说明实体对应那一张表
public class Test {
@TableId(type = IdType.AUTO)
@TableField("id") // 说明属性对应哪个字段
private Integer id;
@TableField("content") // 如果字段名与属性名相同或者符合驼峰命名规则,则TableField可省略
private String content;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
2. 创建Mapper接口继承BaseMapper(由MyBatis-Plus提供的,作为父接口,提供了CRUD方法的声明),创建Mapper XML
BaseMapper接口核心API
方法名 | 用途 |
---|---|
insert (entity) | 数据新增, 自动生成 insert sql ,根据@TableId 决定注解生成方式 |
updateById (entity) | 根据主键更新对应对象, 自动生成 delete sql |
deleteById (id) | 根据主键删除数据 ,自动生成 delete sql |
selectById (id) | 按主键查询对应的实体对象 |
selectList (queryWrapper) | 根据查询生成器 (QueryWrapper)的条件自动生成 sql 查询返回 List 集合 |
selectPage (page, queryWrapper) | 分页查询方法,自动生成分页 limit 子句, 返回 IPage 分页对象 |
3. 开发时注入Mapper对象,通过内置API实现CRUD操作。
MyBatisPlusTest.java
package com.imooc.reader;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.imooc.reader.entity.Test;
import com.imooc.reader.mapper.TestMapper;
import org.apache.ibatis.annotations.Mapper;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import javax.annotation.Resource;
import java.util.List;
// 初始化Ioc容器
@RunWith(SpringJUnit4ClassRunner.class)
// 指向要加载的配置文件
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
public class MyBatisPlusTest {
@Resource // 注入之前准备好的接口
private TestMapper testMapper;
@org.junit.Test
public void testInsert(){
// 创建实体对象
Test test = new Test();
test.setContent("MyBatis Plus 测试");
testMapper.insert(test);
}
@org.junit.Test
public void testUpdate(){
Test test = testMapper.selectById(4);
test.setContent("MyBatis Plus 测试");
testMapper.updateById(test);
}
@org.junit.Test
public void testDelete(){
testMapper.deleteById(4);
}
@org.junit.Test
public void testSelect(){
QueryWrapper<Test> queryWrapper = new QueryWrapper<Test>();
queryWrapper.eq("id", 3);
queryWrapper.gt("id", 2);
List<Test> list = testMapper.selectList(queryWrapper);
System.out.println(list.get(0));
}
}