Mybatis-plus
-
查看sql输出日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.loggongs.stdout.StdOutImpl
-
实体类
package jack.sun.mp.bean; import com.baomidou.mybatisplus.annotation.*; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.util.Date; @Data @NoArgsConstructor @AllArgsConstructor @TableName("user") //与数据库表名相映射 public class User { @TableId(type = IdType.AUTO) /*AUTO(0), 主键自增策略 NONE(1), 默认策略 INPUT(2), 用户自定义 ASSIGN_ID(3), ASSIGN_UUID(4),使用UUID */ private Integer id; private String name; private Integer age; private String email; @TableField(fill = FieldFill.INSERT) private Date createTime; @TableField(fill = FieldFill.INSERT_UPDATE) private Date updateTime; @TableField(fill = FieldFill.INSERT) @Version private Integer version; @TableField(fill = FieldFill.INSERT) @TableLogic private boolean deleted; }
-
编写Mapper接口
public interface UserMapper extends BaseMapper<User> { }
-
自动填充
@TableField(fill = FieldFill.UPDATE) DEFAULT, INSERT, UPDATE, INSERT_UPDATE;
-
乐观锁 分页配置类
@EnableTransactionManagement @Configuration @MapperScan(basePackages = "jack.sun.mp.mapper") public class OptimisticConfig { // 乐观锁1 // @Bean // public OptimisticLockerInterceptor optimisticLockerInterceptor(){ // return new OptimisticLockerInterceptor(); // } @Bean public MybatisPlusInterceptor mybatisPlusInterceptor(){ MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor(); //乐观锁插件 mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); //分页插件 mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); return mybatisPlusInterceptor; } }
-
乐观锁 分页
实体类属性上加上@Version @TableField(fill = FieldFill.INSERT) 分页: 1.mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); 2.return new paginationinterceptor();
-
给实体类属性赋默认值 指定接口中字段填充数据的时机
@Component public class MyMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { this.setFieldValByName("createTime",new Date(),metaObject); this.setFieldValByName("updateTime",new Date(),metaObject); this.setFieldValByName("version",1,metaObject); this.setFieldValByName("deleted",0,metaObject); } @Override public void updateFill(MetaObject metaObject) { this.setFieldValByName("updateTime",new Date(),metaObject); } }
-
测试
package jack.sun.mp; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import jack.sun.mp.bean.User; import jack.sun.mp.mapper.UserMapper; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; @SpringBootTest class MpApplicationTests { @Autowired private UserMapper userMapper; @Test void contextLoads() { List<User> users = userMapper.selectList(null); users.stream().forEach(System.out::println); } //主键自增 @Test public void testAutoAdd(){ // User user = new User(null,"张三",10,"QEQ@163.com"); // userMapper.insert(user); } //自动填充 @Test public void testAutoFill(){ // User user = new User(null,"李四2",22,"@156.com",null,null); // userMapper.insert(user); User user1 = userMapper.selectById(8); user1.setName("王五"); userMapper.updateById(user1); } //乐观锁 @Test public void test(){ User user = userMapper.selectById(1); user.setAge(50); user.setEmail("23333@163.com"); //乐观锁失败 // user.setVersion(user.getVersion()-1); userMapper.updateById(user); } //批量查询 @Test public void TestSelect(){ User user = userMapper.selectById(1); System.out.println(user); List<User> users = userMapper.selectBatchIds(Arrays.asList(1, 2, 3)); System.out.println("users = " + users); } //map查询 @Test public void TestSelectMap(){ Map<String,Object> map = new HashMap<>(); map.put("name","jack"); map.put("age","20"); List<User> users = userMapper.selectByMap(map); users.forEach(System.out::println);//lambda表达式 } @Test public void TestPagination(){ Page<User> page = new Page<>(1,3); //返回的page和上面的一样 userMapper.selectPage(page,null); System.out.println("总页数:"+page.getTotal()); System.out.println("每页的数据:"+page.getSize()); System.out.println("总页数:"+page.getPages()); System.out.println("是否有前一页:"+page.hasPrevious()); System.out.println("是否有下一页:"+page.hasNext()); } //批量删除 @Test public void TestDelete(){ userMapper.deleteBatchIds(Arrays.asList(7,8)); } //通过Map删除 @Test public void DeleteByMap(){ Map<String,Object> map = new HashMap<>(); map.put("name","张三"); userMapper.deleteByMap(map); } //逻辑删除 @Test public void logicDelete(){ userMapper.deleteById(5); } //测试逻辑删除后的结果 @Test public void TestLogic(){ List<User> users = userMapper.selectList(null); users.forEach(System.out::println); } // AbstractWrapper 查询包装器 // 1、ge、gt、le、lt、isNull、isNotNull eq、ne //between、notBetween //allEq //like、notLike、likeLeft、likeRight //in、notIn、inSql、notinSql @Test public void TestWrapper(){ QueryWrapper<User> queryWrapper = new QueryWrapper(); //大于等于 // queryWrapper.ge("age",29); //大于 // queryWrapper.gt("age",50); //小于等于 // queryWrapper.le("age",50); //小于 // queryWrapper.lt("age",50); //isNull // queryWrapper.isNull("version"); //isNotNull // queryWrapper.isNotNull("deleted"); //qe等于 //ne 不等于 //between // queryWrapper.between("age",20,25); //allEq // Map<String,Object> map = new HashMap<>(); // map.put("age",20); // map.put("name","jack"); // queryWrapper.allEq(map); //like、notLike、likeLeft、likeRight // queryWrapper.like("name","o").likeRight("email","t"); //in、notIn、inSql、notinSql // queryWrapper.in("id",1,2,3); // queryWrapper.inSql("id","select id from user where id<3"); //or、and // queryWrapper.like("name","o").or().between("age",20,25); //嵌套or、嵌套and // queryWrapper.like("name","e").or(i->i.eq("name","jack")).ne("age",25); //orderBy、orderByDesc、orderByAsc // queryWrapper.orderByDesc("id"); // queryWrapper.orderByAsc("id"); //last // queryWrapper.last("limit 1"); //指定要查询的列 // queryWrapper.select("name","age","email"); //set setsql User user = new User(); user.setAge(99); UpdateWrapper<User> updateWrapper = new UpdateWrapper<>(); updateWrapper.like("name","to").set("name","鸡你太美").setSql("email = 'test3@baomidou.com'"); // List<User> users = userMapper.selectList(queryWrapper); userMapper.update(user,updateWrapper); // users.forEach(System.out::println); } @Test public void TestLambaqueryWrapper(){ LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.inSql(User::getId,"select id from user where id <5").orderByDesc(User::getId).select(User::getId,User::getAge,User::getName); List<User> users = userMapper.selectList(queryWrapper); users.forEach(System.out::println); } }
-
全局设置默认值
mybatis-plus.global-config.db-config.logic-delete-value=1 mybatis-plus.global-config.db-config.logic-not-delete-value=0
-
编写Service接口
IService:包含增删改查方法 Service层: TestService extends IService<Test> 面临的问题:需要重写里面的方法 TestServiceImpl extend ServiceImpl<TestMapper,Test> implements TestService 解决问题:ServiceImpl 实现了IService的方法,Serviceimpl的protected方法本包和子类可见, 所以TestServiceImpl不用重写IService中的方法 同时ServiceImpl自动装配了BaseMapper