广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Mybatis Example的高级用法详解
  • 784
分享到

Mybatis Example的高级用法详解

2024-04-02 19:04:59 784人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录mybatis Example的高级用法一. mapper接口中的函数及方法二. example实例方法三. 使用案例说说Mybatis Example常见用法一. 说明二. 排

Mybatis Example的高级用法

近几个项目一直使用的mybatis来对数据库做查询,期间用到了很多高效简洁的查询方法,特此记录和分享。

一. mapper接口中的函数及方法

方法名 功能
int countByExample(UserExample example) 按条件计数
int deleteByPrimaryKey(Integer id) 按主键删除
int deleteByExample(UserExample example) 按条件查询
String/Integer insert(User record) 插入数据(返回值为ID)
User selectByPrimaryKey(Integer id) 按主键查询
ListselectByExample(UserExample example) 按条件查询
ListselectByExampleWithBLOGs(UserExample example) 按条件查询(包括BLOB字段)。只有当数据表中的字段类型有为二进制的才会产生。
int updateByPrimaryKey(User record) 按主键更新
int updateByPrimaryKeySelective(User record) 按主键更新值不为null的字段
int updateByExample(User record, UserExample example) 按条件更新
int updateByExampleSelective(User record, UserExample example) 按条件更新值不为null的字段

二. example实例方法

example 用于添加条件,相当于where后面的部分,理论上单表的任何复杂条件查询都可以使用example来完成。

方法 说明
example.setOrderByClause(“字段名 ASC”); 添加升序排列条件,DESC为降序
example.setDistinct(false) 去除重复,boolean型,true为选择不重复的记录。
example.and(Criteria criteria) 为example添加criteria查询条件,关系为与
example.or(Criteria criteria) 为example添加criteria查询条件,关系为或
criteria.andXxxIsNull 添加字段xxx为null的条件
criteria.andXxxIsNotNull 添加字段xxx不为null的条件
criteria.andXxxEqualTo(value) 添加xxx字段等于value条件
criteria.andXxxNotEqualTo(value) 添加xxx字段不等于value条件
criteria.andXxxGreaterThan(value) 添加xxx字段大于value条件
criteria.andXxxGreaterThanOrEqualTo(value) 添加xxx字段大于等于value条件
criteria.andXxxLessThan(value) 添加xxx字段小于value条件
criteria.andXxxLessThanOrEqualTo(value) 添加xxx字段小于等于value条件
criteria.andXxxIn(List<?>) 添加xxx字段值在List<?>条件
criteria.andXxxNotIn(List<?>) 添加xxx字段值不在List<?>条件
criteria.andXxxLike(“%”+value+”%”) 添加xxx字段值为value的模糊查询条件
criteria.andXxxNotLike(“%”+value+”%”) 添加xxx字段值不为value的模糊查询条件
criteria.andXxxBetween(value1,value2) 添加xxx字段值在value1和value2之间条件
criteria.andXxxNotBetween(value1,value2) 添加xxx字段值不在value1和value2之间条件

三. 使用案例

1.基本字段查询


      // 1.使用criteria
      Example example = new Example(User.class);
            Criteria criteria = example.createCriteria();
            criteria.andEqualTo("name", name);
            criteria.andNotEqualTo("id", id);
            criteria.andEqualTo("userId", uid);
            List<User> list = userMapper.selectByExample(example);
            
            // 不使用criteria,实则example.and()本质底层还是返回的criteria,倒是可以简便写法。
            Example example = new Example(User.class);
   example.and()
                .andEqualTo("name", name)
                .andEqualTo("id", id)
                .andEqualTo("userId", uid);
    List<User> list = userMapper.selectByExample(example);
  等效于:select * from user where name = #{name} and id = #{id} and uid = #{uid}

2. and or 查询


  Example example = new Example(User.getClass());
        // where 条件
        Criteria criteria = example.createCriteria();
        Criteria criteria1 = example.createCriteria();
        
        criteria.andIn("id", ids);
        criteria1.orLike("des", "%" + des + "%");
        criteria1.orLike("name", "%" + name + "%");
        example.and(criteria1);
        example.and().andEqualTo("status", staus)
 等效于:where id in ( #{ids} ) and ( name like concat(‘%', #{name} ,'%') or des like concat(‘%', #{des} ,'%') ) and status = #{status} 

注意:如果不加 example.and(criteria1);,则默认example只添加生成的第一个criteria,criteria1 将不会加到此条件中

3. 数组参数的条件查询


public Example test(List<String> names, String sex) {
  Example example = new Example(User.getClass());
  example.and().andEqualTo("sex", sex)
        Example.Criteria criteria = example.createCriteria();
        for (String str : names) {
             criteria.orLike("name", str);
         }
         example.and(criteria);
         List<User> list = userMapper.selectByExample(example);
            
 等效于:where sex = #{sex} and ( name like concat(‘%', #{name1} ,'%') or name like concat(‘%', #{name2} ,'%') )
}

说说Mybatis Example常见用法

一. 说明

我们在使用mybatis example做业务 增/删/改/查时,会遇到一些场景。做一下记录。

二. 排序查询

使用mybatis example方式做查询时候,业务需要按照条件排序,比如:创建时间倒序


example.setOrderByClause("create_time desc");

2.1 示例:


 @Override
    public UpgradeNotifyInfoDTO queryLatestNotify(Integer appType) {
        UpgradeNotifyInfoDTO notifyDTO=new UpgradeNotifyInfoDTO();
        SportAppUpgradeNotifyExample example = new SportAppUpgradeNotifyExample();
        example.setOrderByClause("`create_time` desc");
        SportAppUpgradeNotifyExample.Criteria criteria =  example.createCriteria();
        criteria.andAppTypeEqualTo(appType);
        // 0- 禁用 1-启用
        criteria.andStatusEqualTo(1);
        List<SportAppUpgradeNotify> list = upgradeNotifyMapper.selectByExample(example);
        if (!CollectionUtils.isEmpty(list)){
            BeanUtils.copyProperties(list.get(0),notifyDTO);
        }
        return notifyDTO;
    }

注: 多条件排序写法如下:


   ReservationProductOrderDetailExample example = new ReservationProductOrderDetailExample();
        example.setOrderByClause("`reservate_time` desc,`reservate_start_time` desc, `create_time` desc");
        ReservationProductOrderDetailExample.Criteria criteria = example.createCriteria();

三. 查询limit, 只返回前50条数据

3.1 借助PageHelper

我们通过Pagehelper做分页查询,那么limit同样可以使用Pagehelper。如下,查询符合条件中的前50条。这里不会返回数据总数 count


PageHelper.startPage(1, 50);
 public List<ShopCityInfoRespDTO> queryShopList(String shopCityName,String shopCityId) {
        List<ShopCityInfoRespDTO> shopCityList = new ArrayList<>();
        ShopInfoExample example = new ShopInfoExample();
        ShopInfoExample.Criteria criteria =  example.createCriteria();
        criteria.andStatusEqualTo("0");
        if(!StringUtils.isEmpty(shopCityId)) {
            criteria.andShopIdEqualTo(shopCityId);
        }
        if(!StringUtils.isEmpty(shopCityName)) {
            criteria.andShopNameLike("%" + shopCityName + "%");
        }
        // 这里限制查询50条数据,但不能返回总数
        PageHelper.startPage(1, 50);
        List<ShopInfo>  shopInfoList = shopInfoMapper.selectByExample(example);
        if(CollectionUtils.isEmpty(shopInfoList)){
           return shopCityList;
        }
        for (ShopInfo shopInfo : shopInfoList){
            ShopCityInfoRespDTO  respDTO = new ShopCityInfoRespDTO();
            respDTO.setCompanyId(shopInfo.getCompanyId());
            respDTO.setShopCityId(shopInfo.getShopId());
            respDTO.setShopCityName(shopInfo.getShopName());
            respDTO.setShopCityCode(shopInfo.getShopCode());
            respDTO.setShopType(1);
            shopCityList.add(respDTO);
        }
        return shopCityList;
    }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: Mybatis Example的高级用法详解

本文链接: https://www.lsjlt.com/news/159841.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Mybatis Example的高级用法详解
    目录Mybatis Example的高级用法一. mapper接口中的函数及方法二. example实例方法三. 使用案例说说Mybatis Example常见用法一. 说明二. 排...
    99+
    2022-11-12
  • MyBatis通用Mapper中的通用example(排序)详解
    目录MyBatis通用Mapper的通用example(排序)接口实现类MyBatis通用Mapper技巧一、排序二、处理oracle的null异常三、mapper的selec...
    99+
    2022-11-12
  • Java SpringBoot高级用法详解
    目录1,IDEA中Lombok作用创建项目2.pom.xml说明2.1 pom.xml标签说明2.2 依赖的相关说明2.3 SHA1介绍SpringBoot高级用法YML文件说明3....
    99+
    2022-11-12
  • 详解Flutter中listview的高级用法
    目录简介ListView的常规用法创建不同类型的items总结简介 一般情况下,我们使用Listview的方式是构建要展示的item,然后将这些item传入ListView的构造函数...
    99+
    2023-01-04
    Flutter listview用法 Flutter listview
  • JavaScript的高级概念和用法详解
    目录1. 闭包2. 函数绑定3.使用命名空间4. 判断属性是否存在5. 解构赋值6.遍历对象属性7. 过滤数组8. 消除重复值9. 判断是否数组10. 转换数字和字符串11. 转换为...
    99+
    2022-11-13
  • vue3 setup() 高级用法示例详解
    目录一、选项式API 和 组合式API 区别二、setup 具体怎么用?2.1、setup 什么时候执行?2.2、setup 数据和方法如何使用?2.3、setup 内部有 this...
    99+
    2022-11-12
  • 详解shell 变量的高级用法示例
    变量删除和替换 案例:从头开始匹配,将符合最短的数据删除 (#) variable_1="I love you, Do you love me" echo $variable_1 variable_2=${vari...
    99+
    2022-06-04
    shell 变量
  • Mybatis中@Param注解的用法详解
    目录1、概述2、实例:实例一:@Param注解基本类型的参数实例二:@Param注解JavaBean对象3、注意点附:为什么要用@param总结1、概述 首先明确这个注解是为SQL语...
    99+
    2022-11-13
  • tk-mybatis的使用方法详解
    tkmybatis是在mybatis框架的基础上提供了很多工具,让开发更加高效,下面来看看这个框架的基本使用,后面会对相关源码进行分析,感兴趣的同学可以看一下,挺不错的一个工具 实现...
    99+
    2022-11-12
  • Shell编程之变量的高级用法详解
    变量替换 语法 说明 ${变量名#匹配规则} 从变量开...
    99+
    2022-06-04
    Shell 变量
  • mybatis嵌套循环map方式(高级用法)
    目录mybatis嵌套循环mapmybatis入参map的基本语法mybatis嵌套循环map的高级用法mybatis中循环map集合操作mybatis嵌套循环map mybatis...
    99+
    2022-11-13
  • Mybatis基础概念与高级应用方法
    今天小编给大家分享一下Mybatis基础概念与高级应用方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Mybatis基础回...
    99+
    2023-07-02
  • 详解Python变量与注释高级用法
    目录Python变量与注释高级用法1.概述2.变量2.1.变量解包2.2.给变量注明类型2.3.变量命名原则3.注释3.1.注释类型3.2.错误使用注释案例Python变量与注释高级...
    99+
    2022-11-11
  • Mybatis中@Param的用法和作用详解
    用注解来简化xml配置的时候,@Param注解的作用是给参数命名,参数命名后就能根据名字得到参数值,正确的将参数传入sql语句中我们先来看Mapper接口中的@Select方法package Mapper; public inte...
    99+
    2023-05-31
    mybatis param
  • mybatis plus in方法使用详解
    如果是List类型的String,例如:List<String>这种类型的,就直接放值就可以了,本文讲的是当你查询到的是一个list集合如何遍历取值,否则要写sql和接口...
    99+
    2022-11-12
  • Mybatis Plus QueryWrapper复合用法详解
    目录QueryWrapper复合用法使用QueryWrapper小结mybatisplus自定义分页查询其中ew.customSqlSegmentQueryWrapper 设置参数几...
    99+
    2022-11-12
  • MyBatis动态SQL标签的用法详解
    1.MyBatis动态SQL MyBatis 的强大特性之一便是它的动态 SQL,即拼接SQL字符串。如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 S...
    99+
    2022-11-12
  • mybatis-plus中wrapper的用法实例详解
    目录一、条件构造器关系介绍条件构造器关系介绍 :wapper介绍 :二、项目实例1、根据主键或者简单的查询条件进行查询2、MyBatis-Plus还提供了Wrapper条件构造器,具...
    99+
    2022-11-13
  • MySQL Select 查询语句详解及高级用法
    MySQL是一个开源的关系型数据库管理系统,支持多种操作语言,其中最基础、最常用的命令之一就是SELECT语句。在本篇文章中,这里将详细介绍MySQL SELECT语句的各个方面,从最基本的查询语句,到更高级的技巧和功能。 一、基本...
    99+
    2023-10-01
    mysql 数据库 sql
  • 详解python数值与字符串高级用法
    python数值与字符串高级用法 1.概述 这篇是一篇没有尽头的文章,每当过段时间,再次打开就会看到不一样的内容,有新东西在更新啊。是啊,之所以取名为高级用法,就是因为它是连载的,一...
    99+
    2022-11-11
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作