SpingBoot小记录

需要使用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);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值