首页 > 数据库 >Mybatis-plus核心功能-自定义SQL

Mybatis-plus核心功能-自定义SQL

时间:2024-05-24 19:30:16浏览次数:25  
标签:QueryWrapper 自定义 car wrapper personList plus SQL new

  1. MyBatis-Plus提供了强大的条件构造器。通过条件构造器可以写一些复杂的SQL语句,从而提高我们的开发效率。通过 EntityWrapper(简称 EW,MP 封装的一个查询条件构造器)或者 Condition(与 EW 类似) 来让用户自由的构建查询条件,简单便捷,没有额外的负担, 能够有效提高开发效率,它主要用于处理 sql 拼接,排序,实体参数查询等。

  2. 举例

    @Test
    void testWrapper1() {
    
        QueryWrapper<Person> wrapper=new QueryWrapper<>();
        
        HashMap<String,Object> map=new HashMap<>();
        map.put("name","zhangsan");
        map.put("age",20);
    
        wrapper.allEq(map);
    
        List<Person> personList = personMapper.selectList(wrapper);
    
        personList.forEach(System.out::println);
    }
    
    @Test
    void testWrapper4() {
    
        QueryWrapper<Person> wrapper=new QueryWrapper<>();
    
        wrapper.gt("age",18);
        //大于等于
    
        List<Person> personList = personMapper.selectList(wrapper);
    
        personList.forEach(System.out::println);
    }
    
    @Test
    void testWrapper9() {
    
        QueryWrapper<Person> wrapper=new QueryWrapper<>();
        //模糊查询
        wrapper.like("name","o");
    
        List<Person> personList = personMapper.selectList(wrapper);
    
        personList.forEach(System.out::println);
    }
    
    //根据年龄进行分组查询
    @Test
    void testWrapper19() {
    
        QueryWrapper<Person> wrapper=new QueryWrapper<>();
    
        wrapper.groupBy("age");
    
        List<Person> personList = personMapper.selectList(wrapper);
    
        personList.forEach(System.out::println);
    }
    
    
  3. 自定义SQL:Mybatis-Plus(以下简称MBP)的初衷是为了简化开发,而不建议开发者自己写SQL语句的;但是有时客户需求比较复杂,仅使用MBP提供的Service,Mapper与Wrapper进行组合,难以实现可以需求; 这时我们就要用到自定义的SQL了。

    • 注解SQL
    public interface CarMapper extends BaseMapper<Car> {
     
        @Select("select * from car where car_seq = #{carSeq}")
        Car queryCar(String carSeq);
     
    }
    
    • Wrapper传参+注解SQL
    //创建Wrapper对象
    QueryWrapper<Entity> wrapper = new QueryWrapper<>(); 
    //设置查询条件
    wrapper.eq("column1", value1)
           .ne("column2", value2)
           .like("column3", value3);
     
    //示例
    wrapper.eq("car_state", "1")
                    .like("car_id", "渝A");
    
    //mapper接口
    
    @Select("select * from car ${ew.customSqlSegment}")
    Page<Car> selectByPrimaryKey(Page<Car> page, @Param(Constants.WRAPPER) QueryWrapper<Car> queryWrapper);
    
    //完整代码
    //分页查询方式1
    QueryWrapper<Car> wrapper = new QueryWrapper<>();
    Page<Car> resultPage = new Page<>(1, 10);
     
    wrapper.eq("car_state", "1")
           .like("car_id", "渝A")
           .orderByAsc("car_id");//排序
    carMapper.selectByPrimaryKey(resultPage,wrapper);
     
     
    //分页查询方式2
    IPage<Car> page = new Page<>(1, 10); // 分页查询
    LambdaQueryWrapper<Car> qw = new LambdaQueryWrapper<Car>()
         .like(Car::getCarId, "渝A") // 车牌号 =
         .eq(Car::getCarState, 1); // 状态
     
    //selectPage是BaseMapper自带方法
    IPage<Car> userPage = carMapper.selectPage(page, qw)
    
    
    • Wrapper传参+xml文件SQL
    //mapper类
    Car selectBySeq (@Param(Constants.WRAPPER) QueryWrapper<Car> queryWrapper);
    //xml配置文件 
    <select id="selectBySeq " resultMap="BaseResultMap">
            select * from `car` ${ew.customSqlSegment}
    </select>
    //通过Wapper传递查询参数
        @RequestMapping("/ok")
        public void testCustomSQL2() {
            LambdaQueryWrapper<Car> query = new LambdaQueryWrapper<>();
            query.eq(Car::getCarId, "11");
     
            Car car= carMapper.queryCarSeq(query);
     
            System.out.println(car.toString());
        }
     
    //或者
    Wrapper wrapper = new QueryWrapper<Car>().eq("car_state", 1).like("cai_id", "渝");
    List<Car> userList = carMapper.queryCarSeq(wrapper);
    

标签:QueryWrapper,自定义,car,wrapper,personList,plus,SQL,new
From: https://www.cnblogs.com/hytip/p/18211576

相关文章

  • Mysql事务
    1.概述事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。注意:默认MySQL的事务是自动提交的,也就是说,当执行完一条DML语句时,MySQL会立即隐式的提交事务。2.事务操作2.1方......
  • MySQl存储引擎
    1.体系结构1.1连接层最上层是一些客户端和链接服务,包含本地sock通信和大多数基于客户端/服务端工具实现的类似于TCP/IP的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可......
  • 50道题目!Python、SQL数据库、AB测试、业务分析、机器学习都在这里了!
    介绍每日一题系列已经更新了50道题目啦!题目难度为初级到中级,涵盖了Python、SQL数据库、AB测试、业务分析、机器学习五大主题,适合初学者和有一定基础的朋友。原文链接:50道题目!Python、SQL数据库、AB测试、业务分析、机器学习都在这里了!欢迎点击取阅!......
  • MySQL查询某个字段含有字母数字的值
    1.正则表达式(REGEXP)查询MySQL表中某个字段含有字母和数字的值,可以使用正则表达式(REGEXP)来匹配这样的模式。在MySQL中,正则表达式是一个强大的工具,可以用来搜索和匹配字符串中的特定模式。假设我们有一个名为my_table的表,并且我们想要查询名为my_column的字段,这个字段包含至少一个......
  • MySQL查询某个字段含有字母数字的值
    1.正则表达式(REGEXP)查询MySQL表中某个字段含有字母和数字的值,可以使用正则表达式(REGEXP)来匹配这样的模式。在MySQL中,正则表达式是一个强大的工具,可以用来搜索和匹配字符串中的特定模式。假设我们有一个名为my_table的表,并且我们想要查询名为my_column的字段,这个字段包含至少......
  • MybatisPlus公用Page导致同对象返回
    代码 Page<CouponInfo>page=newPage<>(1,-1);CouponInfocouponInfo1=newCouponInfo();couponInfo1.setId(1630503086041903106L);Page<CouponInfo>couponInfoPage=couponInfoMapper.selectPageList(couponInfo1,pa......
  • MySQL 5.7 升级到 8.0
    1.升级前检查wgethttps://downloads.mysql.com/archives/get/p/43/file/mysql-shell-8.0.36-linux-glibc2.12-x86-64bit.tar.gztarxfmysql-shell-8.0.36-linux-glibc2.12-x86-64bit.tar.gz-C/tmp/cd/tmp/mysql-shell-8.0.34-linux-glibc2.12-x86-64bit/bin./mysqlsh-u......
  • SQL的多表联查
    这里我先附上两张表的数据:Orders表:OrderIDCustomerID1321324NULLCustomers表:CustomerIDCustomerName1Alice2Bob3Charlie4DavidINNERJOIN......
  • MySQL入门——基础语法
    数据库的操作显示当前的数据库创建数据库语法:CREATEDATABASE[IFNOTEXISTS]db_name[create_specification[,create_specification]...]create_specification:[DEFAULT]CHARACTERSETcharset_name[DEFAULT]COLLATEcollation_name说明:大写的表示关键字......
  • SQL Server 去掉数组项
    declare@srctextnvarchar(max)='a,b,c';declare@deltextnvarchar(max)='b';declare@rtnTextnvarchar(max);--SQLServer去掉数组项SELECT@rtnText=STUFF((SELECT','+valueFROMSTRING_......