需要使用pom加载配置文件yml时需要在pom文件中添加
<!-- 用pom加载配置文件yml当中的属性-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<encoding>UTF-8</encoding>
<useDefaultDelimiters>true</useDefaultDelimiters>
</configuration>
</plugin>
mybatisplus的条件查询三种方法
// 方法一:按条件查询
QuerywRAPPER qw = new QueryWrappeer();
qw.lt("age",18);
List<Useer> userList = userDao.selectList(qw);
System.out.println(userList);
// 方法二:Lambda格式按条件查询
QueryWrapper<Usere> qw = new QueryWrapper<Useer>();
qw.lambda().lt(User::getAge,18);
List<User> userList = userDao.selectList(qw);
System.out.println(userList);
// 方法三:lambda方法进行查询
LambdaQueryWrapper<User> = new LambdaQueryWrapper<User>();
lqw.lt(User::getAge,10);
List<User> userList = userDao.selectList(lqw);
System.out.println(userList);
// 条件查询
LambdaQueryWrapper<User> = new LambdaQueryWrapper<User>();
// 在10-30中间进行查询
lqw.lt(User::getAge,30).gt(User::getAge,10);
//小于10或者大于30
lqw.lt(User::getAge,10).or().gt(User::getAge,30);
List<User> userList = userDao.selectList(lqw);
System.out.println(userList);
根据null值进行一个判定
// 模拟页面传递过来的查询数据
UserQuery uq = new UserQuery();
uq.setAge(10);
uq.setAge(30);
// null 判定
LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<Useer>();
// 判定第一个参数是否为true,如果为true则链接当前条件
lqw.lt(null != uq.getAge2(),User::getAge,uq.getAge2());
lqw.lt(null != uq.getAge(),User::getAge,uq.getAge2());
查询投影,lambda查询方法
LambdaQueryWrapper<User> lqw = new LambdaQueryWrappeer<Useer>();
lqw.select(User::getId,User::getName,User::getAge);
//普通查询方式
QueryWrapper<User> lqw = new QueryWrappeer<Useer>();
lqw.select("id","name","age","tel");
List<User> userList = userDao.selectList(lqw);
System.out.println(userList);
// 根据不同种类进行分组
QueryMapper<User> lqw = new QueeryWrapper<User>();
lqw.select("count(*) as count,tel");
//将tel进行查询 并且分组,相同进行count数量+1
lqw.groupBy("tel");
List<Map<String,Object>> userList = userDao.selectMaps(lqw);
System.out.println(userList);
条件查询eq,相当于=
// 条件查询
LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
// 当密码和账户都为jerry时,此处的eq就等同于=
lqw.eq(User::getName,"jerry").eq(User::getPassword,"jerry");
User loginUser = userDao.selectOne(lqw);
System.out.println(loginUser);
范围条件查询 between
// 范围条件查询 between
LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
lqw.between(User::getAge,10,30);
List<User> userList = userDao.selectList(lqw);
System.out.println(userList);
模糊匹配like
// 模糊匹配 like
LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
// 匹配从j开始的name名字
lqw.likeLeft(User::getName,"j");
List<User> userList = userDao.selectList(lqw);
System.out.println(userList);
DQL编程控制
字段映射与表名映射
1. 当出现数据库表中字段名 与后端编码名称不同
例如:数据库中表为pwd,但是后端代码中为password
则需添加 @TableField(value="pwd") 在private String password 之前
2. 编码当中出现了数据库当中未定义的属性,
例如:数据库表中没有online这个属性,在后端编码当中新增一个online属性
则需添加 @TableField(exist = false) 在新增的 private Integer online 之前
3. 类注解,当数据库表名和编写表名不同时
例如:数据库表当中为tb_user ,但编程为USER
则需要在类名上方加 @TableName("tb_user")
4. id自生策略
AUTO(0):使用数据库id自增策略控制id生成
NONE(1):不设置id生成策略
INPUT(2):用户手工输入id
ASSIGN_ID(3):雪花算法生成id(可兼容数据型与字符串型)
ASSIGN_UUID(4):以UUID生成算法作为id生成策略
例如:添加 @TableId(type = IdType.ASSIGN_ID) 在private Long id;
5. 逻辑删除字段,标记当前记录是否被删除
// 0 为存在的数值; 1为删除的数值
@TableLogic(value = "0",delval = "1")
private Integer deleted;
或者采用配置逻辑删除字面值
// 配置逻辑删除字面值
mybatis-plus;
global-config:
db-config:
logic-delete-field: deleted
logic-not-delete-value: 0
logic-delete-value: 1
// 执行SQL语句:UPDATE TB_USER SET deleted=1 where id =? and deleted = 0;
6. 乐观锁:解决并发问题(2000以下)
6.1 在数据库表中添加锁标记字段
6.2 在实体类当中添加对应的字段,并设定当前字段为逻辑删除标记字段
public class User{
private Long id;
@Version
private Integer version;
}
6.3 配置乐观锁拦截器实现锁机制对应的动态SQL语句拼装
@Configuration
public class MpConfig{
@Bean
public MybatisPlusInterceptor mpInterceptor(){
MybatisPlusInterceptor mpInterceptor = new MybatisPlusInterceptor();
mpInterceptor.addInnerInterceptor(new OptimisticLockerInnerceptor());
return mpInterceptor;
}
}
6.4 使用乐观锁机制再修改前必须先获取到对应的数据的version方可正常进行
@Test
void testUpdate(){
//先查询数据,获取到version数据
User user = userDao.selectById(1l);
//执行数据修改操作
user.setName("Tom adn Jerry");
userDao.updateById(user);
}