您好,登錄后才能下訂單哦!
小編給大家分享一下Mybatis Example怎么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
近幾個項目一直使用的mybatis來對數據庫做查詢,期間用到了很多高效簡潔的查詢方法,特此記錄和分享。
方法名 | 功能 |
---|---|
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 用于添加條件,相當于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方式做查詢時候,業務需要按照條件排序,比如:創建時間倒序
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();
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; }
以上是“Mybatis Example怎么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。