zoukankan      html  css  js  c++  java
  • MyBatis中通用Mapper接口以及Example的方法解析

    一、通用Mapper中的方法解析

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

    二、Example实例解析

    mybatis的逆向工程中会生成实例及实例对应的example,example用于添加条件,相当where后面的部分

    import tk.mybatis.mapper.entity.Example;
    
    Example example = new Example(JavaBean.class);
    Example.Criteria criteria = example.createCriteria();
    
    方法 说明
    example.setOrderByClause(“字段名 ASC”); 添加升序排列条件,DESC为降序
    example.setDistinct(false) 去除重复,boolean型,true为选择不重复的记录。
    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.查询

    ① selectByPrimaryKey() 按主键查询

    //相当于:select * from user where id = 100;
    User user = UserMapper.selectByPrimaryKey(100); 
    

    ② selectByExample() 和 selectByExampleWithBLOGs()

    //相当于:select * from user where username = 'wyw' 
    // and  username is null order by username asc,email desc
    UserExample example = new UserExample();
    Criteria criteria = example.createCriteria();
    criteria.andUsernameEqualTo("wyw");
    criteria.andUsernameIsNull();
    example.setOrderByClause("username asc,email desc");
    List<?>list = XxxMapper.selectByExample(example);
    

    2.插入数据

    ①insert()

    //相当于:insert into user(ID,username,password,email) values 
    //('dsfgsdfgdsfgds','jack','1234','hello@126.com');
    User user = new User();
    user.setId("dsfgsdfgdsfgds");
    user.setUsername("jack");
    user.setPassword("1234")
    user.setEmail("hello@163.com");
    XxxMapper.insert(user);
    

    3.更新数据

    ①updateByPrimaryKey()

    //相当于:update user set username='rose', password='5678', 
    //email='hello@163.com' where id='a01'
    User user =new User();
    user.setId("a01");
    user.setUsername("rose");
    user.setPassword("5678");
    user.setEmail("hello@163.com");
    XxxMapper.updateByPrimaryKey(user);
    

    ②updateByPrimaryKeySelective()

    //相当于:update user set password='7890' where id='a01'
    User user = new User();
    user.setId("a01");
    user.setPassword("7890");
    XxxMapper.updateByPrimaryKey(user);
    

    ③ updateByExample() 和 updateByExampleSelective()

    //相当于:update user set password='6666' where username='jack'
    UserExample example = new UserExample();
    Criteria criteria = example.createCriteria();
    criteria.andUsernameEqualTo("jack");
    User user = new User();
    user.setPassword("6666");
    XxxMapper.updateByPrimaryKeySelective(user,example);
    

    updateByExample()更新所有的字段,包括字段为null的也更新
    建议使用 updateByExampleSelective()更新想更新的字段

    4.删除数据

    ①deleteByPrimaryKey()

    //相当于:delete from user where id=1
    XxxMapper.deleteByPrimaryKey(1);  
    

    ②deleteByExample()

    //相当于:delete from user where username='jack'
    UserExample example = new UserExample();
    Criteria criteria = example.createCriteria();
    criteria.andUsernameEqualTo("jack");
    XxxMapper.deleteByExample(example);
    

    5.查询数据数量

    ①countByExample()

    //相当于:select count(*) from user where username='jack'
    UserExample example = new UserExample();
    Criteria criteria = example.createCriteria();
    criteria.andUsernameEqualTo("jack");
    int count = XxxMapper.countByExample(example);
    
  • 相关阅读:
    直击 KubeCon 2019 现场,阿里云 Hands-on Workshop 亮点回顾
    分享 KubeCon 2019 (上海)关于 Serverless 及 Knative 相关演讲会议
    MaxCompute 费用暴涨之新增SQL分区裁剪失败
    UI2CODE复杂背景无法识别?闲鱼工程师这样打造高准确率方案
    阿里云发布边缘容器,云边端一体化时代来临
    中间件性能挑战赛上线了两大黑科技,是高手就盘它!!
    MaxCompute 费用暴涨之存储压缩率降低导致SQL输入量变大
    通知: Spring Cloud Alibaba 仓库迁移
    MaxCompute 项目子账号做权限管理
    性能压测工具选型对比
  • 原文地址:https://www.cnblogs.com/tian-ci/p/10543089.html
Copyright © 2011-2022 走看看