mybatis Example 使用方法

、mapper接口中的方法解析

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    按主键查询
ListselectByExample(UserExample example) thorws SQLException    按条件查询
ListselectByExampleWithBLOGs(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后面的部分
xxxExample example = new xxxExample();
Criteria criteria = new 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.查询

1.selectByPrimaryKey()

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

2.selectByExample() 和 selectByExampleWithBLOGs()

UserExample example = new UserExample();
Criteria criteria = example.createCriteria();
criteria.andUsernameEqualTo("wyw");
criteria.andUsernameIsNull();
example.setOrderByClause("username asc,email desc");
List<?>list = XxxMapper.selectByExample(example);
//相当于:select * from user where username = 'wyw' and  username is null order by username asc,email desc
1
2
注:在iBator逆向工程生成的文件XxxExample.java中包含一个static的内部类Criteria,Criteria中的方法是定义SQL 语句where后的查询条件

2.插入数据

1.insert()

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

3.更新数据

1.updateByPrimaryKey()

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

2.updateByPrimaryKeySelective()

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

3.updateByExample() 和 updateByExampleSelective()

UserExample example = new UserExample();
Criteria criteria = example.createCriteria();
criteria.andUsernameEqualTo("admin");
User user = new User();
user.setPassword("wyw");
XxxMapper.updateByPrimaryKeySelective(user,example);
//相当于:update user set password='wyw' where username='admin'
updateByExample()更新所有的字段,包括字段为null的也更新,建议使用 updateByExampleSelective()更新想更新的字段

4.删除数据

1.deleteByPrimaryKey()

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

5.查询数据数量

1.countByExample()

UserExample example = new UserExample();
Criteria criteria = example.createCriteria();
criteria.andUsernameEqualTo("wyw");
int count = XxxMapper.countByExample(example);
//相当于:select count(*) from user where username='wyw'

====================================================

  Example简单介绍

  1.example是Mybatis数据层框架中的一个工具,可以帮我们完成sql语句中where条件句的书写,相当于where后面的部分,我们可以根据不同的条件来查询和操作数据库,简化书写sql的过程。

  2.用MyBatis的逆向工程可以自动生成Example类。

  Example具体用法

  1.Example类的生成

  只要在generatorConfig.xml 文件中用表名生成对应的实体类时将生成Example的信息都变为true即可。

  如:

  enableCountByExample="true"

  enableUpdateByExample="true"

  enableDeleteByExample="true"

  enableSelectByExample="true"

  selectByExampleQueryId="false"

  2.Example类的具体用法

  1.每个实体类都对应一个xxxExample.java类,这个类可以用来自定义sql,用Mybait自动生成工具生成了这个类后,可以看到类里面一般有这些参数:

  orderByClause:用于指定ORDER BY条件,这个条件没有构造方法,直接通过传递字符串值指定。

  distinct: 是用来指定是否要去重查询的,true为去重,false不去重。

  oredCriteriia:是用来指定查询条件的。

  2.Example.java中包含一个static 的内部类 Criteria ,在Criteria中有很多方法,主要是定义SQL 语 句where后的查询条件,Criterion是最基本的Where条件,针对字段进行筛选。

  3.Example类中的一些方法说明:

  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之间条件

  Examle在基础中心的应用实例

  以查询系统用户详情接口qrySystemUserDetail为例:

  Long sysUserIdRec = qrySystemUserDetailReq.getSysUserId();

  String sysUserCode = qrySystemUserDetailReq.getSysUserCode();

  SystemUserExample systemUserExample = new SystemUserExample();

  SystemUserExample.Criteria criteria = systemUserExample.createCriteria();

  if (sysUserIdRec != null)

  criteria.andSysUserIdEqualTo(sysUserIdRec);

  if (sysUserCode != null)

  criteria.andSysUserCodeEqualTo(sysUserCode);

  List systemUserList = systemUserMapper.selectByExample(systemUserExample);

  这是用where语句处理and查询条件的情况,

  相当于:select * from system_user where sys_user_id={#sysUserId} and sys_user_code={#sysUserCode}

  Examle其他用法补充无锡男科医院哪家好 http://www.zzch120.com/

  1.用Example的方法给查询结果一些限制,如:

  //指定要进行去重查询

  systemUserExample.setDistinct(true);//去重

  //指定ORDER BY条件

  systemUserExample.setOrderByClause(“字段名 ASC”);//升序

  2.用where语句处理or查询条件的情况,如:

  UserExample.Criteria criteria1 = example.createCriteria();

  UserExample.Criteria criteria2 = example.createCriteria();

  if(!StringUtils.isNotBlank(user.getName())){

  Criteria1.andNameEqualTo(user.getName());

  }

  if(!StringUtils.isNotBlank(user.getSex())){

  Criteria2.andSexEqualTo(user.getSex());

  }

  Example.or(criteria2);

  List userList=userMapper.selectByExample(example);

  相当于:select * from user where name={#user.name} or sex={#user.sex}

  3.模糊查询,如:

  if(!StringUtils.isNotBlank(user.getName())){

  criteria.andNameLIke(‘%’+user.getName()+’%’);

  }

  List userList=userMapper.selectByExample(example);

  相当于:select * from user where name like %{#user.name}%

====================================================

这几天刚接触example,很多内容都是破碎的,写一篇文章加深理解。

一、什么是example类

mybatis-generator会为每个字段产生Criterion,为底层的mapper.xml创建动态sql。如果表的字段比较多,产生的example类会十分庞大。理论上通过example类可以构造你想到的任何筛选条件。在mybatis-generator中加以配置,配置数据表的生成操作就可以自动生成example了。具体配置可以参考 Mybatis-Generator的具体使用方法 - zorro的菜鸟笔记 - 博客园

下面是mybatis自动生成example的使用。

二、了解example成员变量

 //作用:升序还是降序
 //参数格式:字段+空格+asc(desc)
 protected String orderByClause;  
 //作用:去除重复
 //true是选择不重复记录,false,反之
 protected boolean distinct;
 //自定义查询条件
 //Criteria的集合,集合中对象是由or连接
 protected List<Criteria> oredCriteria;
 //内部类Criteria包含一个Cretiron的集合,
 //每一个Criteria对象内包含的Cretiron之间是由  AND连接的
 public static class Criteria extends GeneratedCriteria {
  protected Criteria() {super();}
 }
 //是mybatis中逆向工程中的代码模型
 protected abstract static class GeneratedCriteria {......}
 //是最基本,最底层的Where条件,用于字段级的筛选
 public static class Criterion {......}

三、example使用前的准备

比如我的example是根据user表生成的,UserMapper属于dao层,UserMapper.xml是对应的映射文件。

UserMapper接口:
long countByExample(CompetingStoreExample example);
List<CompetingStore> selectByExample(CompetingStoreExample example);

在我们的测试类里:
UserExample example = new UserExample();
UserExample.Criteria criteria = example.createCriteria();

四、查询用户数量

 long count = UserMapper.countByExample(example);

类似于:select count(*) from user

五、where条件查询或多条件查询

 example.setOrderByClause(“age asc"); //升序
 example.setDistinct(false); //不去重
 if(!StringUtils.isNotBlank(user.getName())){
 Criteria.andNameEqualTo(user.getName());
 }
 if(!StringUtils.isNotBlank(user.getSex())){
 Criteria.andSexEqualTo(user.getSex());
 }
 List<User> userList=userMapper.selectByExample(example);

类似于:select * from user where name={#user.name} and sex={#user.sex} order by age asc;

 UserExample.Criteria criteria1 = example.createCriteria();
 UserExample.Criteria criteria2 = example.createCriteria();
 if(!StringUtils.isNotBlank(user.getName())){
 Criteria1.andNameEqualTo(user.getName());
 }
 if(!StringUtils.isNotBlank(user.getSex())){
 Criteria2.andSexEqualTo(user.getSex());
 }
 Example.or(criteria2);
 List<User> userList=userMapper.selectByExample(example);

类似于:select * from user where name={#user.name} or sex={#user.sex} ;

六、模糊查询

 if(!StringUtils.isNotBlank(user.getName())){
 criteria.andNameLIke(‘%’+name+’%’);
 }
 List<User> userList=userMapper.selectByExample(example);

类似于:select * from user where name like %{#user.name}%

七、分页查询

 int start = (currentPage - 1) * rows;
 //分页查询中的一页数量
 example.setPageSize(rows); 
 //开始查询的位置
 example.setStartRow(start);  
 List<User> userList=userMapper.selectByExample(example);

类似于:select * from user limit start to rows

mybatis中关于example类详解 - 知乎

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值