- 掌握mybatis-Plus内容
学习内容:
- 引入依赖:
<dependency>
<groupId>com.baomidougroupId>
<artifactId>mybatis-plus-boot-starterartifactId>
<version>3.0.5version>
dependency>
- 配置数据库信息:application.properties
#mysql数据库连接
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus
spring.datasource.username=root
spring.datasource.password=root
- 继承接口:mybatis中,mapper一般为一个接口对应一个xml文件,使用mybais-plus无需xml文件,接口继承BaseMapper即可,需添加泛型
import com.atguigu.mpdemo1010.entity.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface UserMapper extends BaseMapper<User> {
// BaseMapper中封装了常用的各种增删改查方法,不用再写,直接用即可
}
- MapperScan注解:
@Mapper注解:
作用:在接口类上添加了@Mapper,在编译之后会生成相应的接口实现类
添加位置:接口类上面
如果想要每个接口都要变成实现类,那么需要在每个接口类上加上@Mapper注解,比较麻烦,解决这个问题用@MapperScan
@MapperScan
作用:指定要变成实现类的接口所在的包,然后包下面的所有接口在编译之后都会生成相应的实现类
添加位置:是在Springboot启动类上面添加,
@SpringBootApplication
@MapperScan("com.atguigu.mpdemo1010.mapper")//指定接口所在的包,即可自动生成实现类
public class Mpdemo1010Application {
public static void main(String[] args) {
SpringApplication.run(Mpdemo1010Application.class, args);
}
}
- 单元测试:
@SpringBootTest
@MapperScan("com.atguigu.mpdemo1010.mapper")
public class Mpdemo1010ApplicationTests {
@Autowired
private UserMapper userMapper;
@Test
public void contextLoads() {
List<User> users = userMapper.selectList(null);
System.out.println(users);
}
}
- sql日志:在application.properties文件中加如下配置即可输出具体sql执行日志
#mybatis日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
- mybatis-plus添加记录时,无需设置主键,自动添加19位主键id
- 如何设置主键生成策略?
答:在实体字段中添加配置:@TableId(type = idType.AUTO)
idType.AUTO:自动增长
IdType.ID_WORKER:Mybatis-plus自带策略,会生成19位的值,数字类型使用这种策略,比如lang
IdType.ID_WORKER_STR:Mybatis-plus自带策略,生成19位的值,类型是字符串
IdType.INPUT:不自动生成,需手动设置
IdType.NONE:无策略,需手动设置
IdType.UUID:生成随机的唯一值
- 自动填充功能:一般时间等信息无需手动设置,自动填充即可
- 表添加字段
- 实体类添加属性
- 需自动填充的属性添加注解
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
- 创建功能类
@Repository
public class MyMetaObjectHandler implements MetaObjectHandler {
//MP实现一个添加 *** 作,这个方法会执行
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("createTime",new Date(),metaObject);
this.setFieldValByName("updateTime",new Date(),metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateTime",new Date(),metaObject);
}
}
- 乐观锁:解决更新丢失问题
- 表中加version字段
- 实体类加version字段,并添加@Version注解
- 配置乐观锁插件即可实现乐观锁功能
- 需要先查询,在修改
@Test
public void testLocker() throws InterruptedException {
User user = userMapper.selectById(1524362490937421825L);
user.setAge(100);
int i = userMapper.updateById(user);
System.out.println("修改了" + i + "条数据");
}
- 分页查询:PageHelper/MP自带分页
- 配置分页插件
- 编写分页代码
- 直接newPage对象,传入两个参数,当前页和每页记录条数
- 调用MP的方法即可实现分页功能
/**
* 分页插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
//测试代码
@Test
public void testPage(){
//两个参数:当前页,每页展示记录条数
Page objectPage = new Page(3,3);
//两个参数:page对象,条件
userMapper.selectPage(objectPage,null);
System.out.println(objectPage.getCurrent());//当前页
System.out.println(objectPage.getRecords());//每页数据list集合
System.out.println(objectPage.getSize());//每页显示记录数
System.out.println(objectPage.getTotal());//总记录数
System.out.println(objectPage.getPages());//总页数
System.out.println(objectPage.hasNext());//是否有下一页
System.out.println(objectPage.hasPrevious());//是否有上一页
}
-
逻辑删除:删除分为物理删除和逻辑删除
- 物理删除:真实删除,将对应的数据从数据库中删除,之后查询不到这条被删除的数据
- 逻辑删除:假删除,将对应的数据中,是否被删除字段的状态修改为“被删除状态”,在数据库中该条记录仍存在。
-
逻辑删除实现步骤
- 在数据库表中添加删除状态字段
- 实体类添加对应属性并添加@TableLogic注解
- 添加逻辑删除插件
- application.properties配置文件添加配置判断节点值为几表示状态(一般默认即可(0=不删除,1=删除),不用添加,可在配置文件修改)
-
性能分析:用于输出每条sql语句及其执行时间,一般在开发环境中使用,若超过指定时间则停止运行,有助于发现问题
- 在配置类中加性能分析插件
- 在application.properties文件中设置生效环境
-
MP实现条件查询:一般使用QueryWrapper实现条件查询
- 创建QueryWrapper对象
- 通过对象设置条件
- 一般第一个参数是String类型的,表示字段名
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)