赞
踩
目录
MyBatisPlus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
Mybatis-Plus官网:MyBatis-Plus (baomidou.com)https://baomidou.com/
特点:
步骤:
导入mybatis-plus-boot-starter依赖
- <dependency>
- <groupId>com.baomidou</groupId>
- <artifactId>mybatis-plus-boot-starter</artifactId>
- <version>3.5.1</version>
- </dependency>
编写pojo的类名要与对应的数据表名称相同,如果不相同可以使用注解@TableName
编写dao层,接口继承BaseMapper<T> T-pojo类
- @Repository
- public interface UserMapper extends BaseMapper<user> {
- }
进行测试:获取mapper接口对象,直接调用CRUD方法
注意:
- @Test
- void contextLoads() {
- // 增加 id自增 0是初始值 不会添加进去
- user test001 = new user(0, "test001", "123");
- userMapper.insert(test001);
- // mybatis-plus 的特性:可以立即返回id值
- System.out.println(test001.getId());
- // 删除
- userMapper.deleteById(14);
- // 修改
- user tony = new user(10, "tony", "123456");
- userMapper.updateById(tony);
- // 查询
- System.out.println(userMapper.selectByMap(null));
- }
步骤:
建立接口继承IService<T>接口
- public interface userService extends IService<user> {
- }
实现类实现刚刚创建的接口、继承ServiceImpl<S,T>,S:dao层mapper类名,T:pojo类名
- @Service
- public class userServiceImpl extends ServiceImpl<UserMapper, user>implements userService {
- }
获取实现类对象调用CRUD方法进行测试
- @Test
- void test_2(){
- // 增加
- user test002 = new user(0, "test003", "123");
- userService.save(test002);
- System.out.println(test002.getId());
- // 删除
- userService.removeById(11);
- // 保存/修改
- user test003 = new user(17, "test005", "123");
- userService.saveOrUpdate(test003);
- System.out.println(test003.getId());
- // 查询
- System.out.println(userService.getById(17));
- }
在springboot的配置类中添加bean对象
- @Bean
- public MybatisPlusInterceptor mybatisPlusInterceptor() {
- MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
- interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
-
- return interceptor;
- }
对单表进行分页查询:底层会自动加上limit关键字
- @Test
- void test_3(){
- // 参数: 页码、每页的条数
- Page<user> userPage = new Page<>(1, 3);
- Page<user> page = userService.page(userPage);
- System.out.println(page.getRecords());
- }
具体的实现类有QueryWrapper、UpdateWrapper (查询、更新)
- @Test
- void test_4(){
- // 查询 id>17的,只查询username这个属性
- QueryWrapper<user> userQueryWrapper = new QueryWrapper<>();
- userQueryWrapper
- .select("username")
- .gt("id",17);
- System.out.println(userService.list(userQueryWrapper));
- System.out.println("=================================");
- // 查询id>17 || id<10
- QueryWrapper<user> userQueryWrapper1 = new QueryWrapper<>();
- userQueryWrapper1
- .gt("id",17)
- .or()
- .lt("id",10);
- System.out.println(userService.list(userQueryWrapper1));
- System.out.println("=====================================");
- // 查询id>10 && id<17 &&不需要and方法
- QueryWrapper<user> userQueryWrapper2 = new QueryWrapper<>();
- userQueryWrapper2
- .gt("id",10)
- .lt("id",17);
- System.out.println(userService.list(userQueryWrapper2));
- }
使用lambda方法配置条件构造器:优势所有的名称没有写死!
- @Test
- void test_5(){
- UpdateWrapper<user> wrapper = new UpdateWrapper<>();
- wrapper.lambda()
- .set(user::getUsername,"test006")
- .eq(user::getId,17);
- userService.update(wrapper);
- }
不用每个pojo的主键都添加注解 在配置文件设置即可
mybatis-plus.global-config.db-config.id-type=auto
逻辑删除:不同于物理删除,物理删除是直接将数据删除掉。逻辑删除是在数据表中设定标志位,通过判断标志位的数据,来确定是否已经删除。
逻辑删除:实质进行的是修改。执行查询的时候,也不会显示已经被“逻辑删除”的数据。
步骤:
在数据表中添加标志位,类似于字段enabled,整型(0,1进行判断)
局部配置:在pojo类上,添加注解@TableLogic:正常-0 删除-1
- @TableLogic(value ="0" ,delval = "1")
- private Integer enabled;
全局配置:不用每个pojo的主键都添加注解 在配置文件设置即可
- mybatis-plus.global-config.db-config.logic-delete-field=enabled
- mybatis-plus.global-config.db-config.logic-delete-value=1
- mybatis-plus.global-config.db-config.logic-not-delete-value=0
方法:对url、username、password进行加密
步骤:
得到密钥
AES.generateRandomKey()
使用密钥进行加密
- System.out.println(AES.encrypt("url", "1648c388ed87847b"));
- System.out.println(AES.encrypt("username", "1648c388ed87847b"));
- System.out.println(AES.encrypt("password", "1648c388ed87847b"));
将加密后的结果,复制粘贴到配置文件中。
将项目进行打包,添加打包插件
- <plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-resources-plugin</artifactId>
- <version>3.1.0</version>
- </plugin>
- </plugins>
部署项目:java ‐jar xxxx.jar ‐‐mpw.key=你的16位随机秘钥
步骤:
数据表添加版本字段version
在pojo类的属性上添加注解@Version @TableField()-自动填充策略
- @Version
- @TableField(fill = FieldFill.INSERT)//自动填充策略:插入、更新是自动填充
- private Integer version;
在springboot的配置类中添加OptimisticLockerInnerInterceptor
- @Bean
- public MybatisPlusInterceptor mybatisPlusInterceptor() {
- MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
- //分页插件
- interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
- //乐观锁插件
- interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
- return interceptor;
- }
进行测试:
- @Test
- void test_9(){
- // 线程1
- user user1 = userService.getById(7);
- // 线程2
- user user2=userService.getById(7);
- // 线程1 做出修改
- user1.setUsername("thread1");
- if (userService.updateById(user1)){
- System.out.println("线程1 更改成功");
- }
- // 线程2 做出修改
- if (!userService.updateById(user2)){
- System.out.println("线程2 更改失败");
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。