日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

springboot 之jpa高級查詢操作

瀏覽:26日期:2023-03-26 16:21:29

springboot的jpa可以根據方法名自動解析sql 非常方便, 只需要在 dao接口中定義方法即可;

下面是一個 demo

package com.bus365.root.dao; import java.io.Serializable;import java.util.List; import org.springframework.data.jpa.repository.JpaRepository;import org.springframework.data.jpa.repository.JpaSpecificationExecutor;import org.springframework.data.jpa.repository.Query;import org.springframework.data.repository.query.Param; import com.bus365.root.model.User; public interface UserDao extends JpaRepository<User,Long>,JpaSpecificationExecutor<User>,Serializable { User findByName(String name); User findByNameAndAge(String name, Integer age); User findByNameOrAge(String name, Integer age); /*@Query(value = 'from User where name = :name') List<User> findbyname(@Param('name') String name);*/}

下面展示service層調用:

@Override public User findByName(String name) { User user = userDao.findByName(name); return user; } @Override public User findByNameAndAge(String name, Integer age) { User user = userDao.findByNameAndAge(name,age); return user; } @Override public User findByNameOrAge(String name, Integer age) { User user = userDao.findByNameOrAge(name,age); return user; }

具體的關鍵字,使用方法和生產成SQL如下表所示

Keyword Sample JPQL snippet And findByLastnameAndFirstname … where x.lastname = ?1 and x.firstname = ?2 Or findByLastnameOrFirstname … where x.lastname = ?1 or x.firstname = ?2 Is,Equals findByFirstnameIs,findByFirstnameEquals … where x.firstname = ?1 Between findByStartDateBetween … where x.startDate between ?1 and ?2 LessThan findByAgeLessThan … where x.age < ?1 LessThanEqual findByAgeLessThanEqual … where x.age ⇐ ?1 GreaterThan findByAgeGreaterThan … where x.age > ?1 GreaterThanEqual findByAgeGreaterThanEqual … where x.age >= ?1 After findByStartDateAfter … where x.startDate > ?1 Before findByStartDateBefore … where x.startDate < ?1 IsNull findByAgeIsNull … where x.age is null IsNotNull,NotNull findByAge(Is)NotNull … where x.age not null Like findByFirstnameLike … where x.firstname like ?1 NotLike findByFirstnameNotLike … where x.firstname not like ?1 StartingWith findByFirstnameStartingWith … where x.firstname like ?1 (parameter bound with appended %) EndingWith findByFirstnameEndingWith … where x.firstname like ?1 (parameter bound with prepended %) Containing findByFirstnameContaining … where x.firstname like ?1 (parameter bound wrapped in %) OrderBy findByAgeOrderByLastnameDesc … where x.age = ?1 order by x.lastname desc Not findByLastnameNot … where x.lastname <> ?1 In findByAgeIn(Collection ages) … where x.age in ?1 NotIn findByAgeNotIn(Collection age) … where x.age not in ?1 TRUE findByActiveTrue() … where x.active = true FALSE findByActiveFalse() … where x.active = false IgnoreCase findByFirstnameIgnoreCase … where UPPER(x.firstame) = UPPER(?1)

下面介紹使用java原生的jpa操作數據庫,對jpa熟悉的朋友應該很快就能理解,springboot使用原生jpa的關鍵是引入entitymanger

看一下service層

package com.bus365.root.service.impl; import java.util.List; import javax.persistence.EntityManager;import javax.persistence.PersistenceContext; import org.springframework.stereotype.Service; import com.bus365.root.model.Address;import com.bus365.root.service.AddressService; @Servicepublic class AddressServiceImpl implements AddressService { @PersistenceContextprivate EntityManager entityManager;public List<Address> listAddress(){List resultList = entityManager.createNativeQuery('select * from address ', Address.class).getResultList();return resultList;}}

注意 @PersistenceContext

private EntityManager entityManager;

動態引入entitymanger , 之后就能正常使用了;

createNativeQuery是操作原生mysql方法;支持跨表查詢;

jpa的事務 直接使用注解Transactional 參數rollbackon表示回滾條件, 這個注解一搬加在service層; 注意getSingleResult 如果查不到數據會報錯;

@Transactional(rollbackOn= {Exception.class}) public Address getAddressByid(Long id) { Address singleResult = null; try { singleResult = (Address) entityManager .createNativeQuery('select * from address where id = :id', Address.class).setParameter('id', id) .getSingleResult(); } catch (Exception e) { e.printStackTrace(); } return singleResult; }

jpa實現多表聯查;

@Transactional public List<Object[]> getUserWithAddrByid(Long id) { List resultList = entityManager.createNativeQuery( 'select u.id id,u.age age,u.name name,a.name aname,a.completeaddress addre from user u left join address a on u.addressid = a.id where u.id = :id') .setParameter('id', id).getResultList(); return resultList; }

這是一個聯查user 和address的例子, 返回的結果是個List<Object[]> 項目中一般封裝成vo 類,或者List<Map<String,Object>> 的形式

github項目地址 https://github.com/Christain1993/SpringBootIntegration

補充:springBootJpa的復雜查詢

分頁

/** * 條件查詢+分頁 * @param whereMap * @param page * @param size * @return */ public Page<CaseManage> findSearch(Map whereMap, int page, int size,Integer createId) { Sort sort = new Sort(Sort.Direction.DESC,'id'); Specification<CaseManage> specification = createSpecification(whereMap,createId); PageRequest pageRequest = new PageRequest(page,size,sort); return caseDao.findAll(specification, pageRequest); } /** * 條件查詢 * @param whereMap * @return */ public List<CaseManage> findSearch(Map whereMap,Integer createId) { Specification<CaseManage> specification = createSpecification(whereMap, createId); return caseDao.findAll(specification); } /** * 動態條件構建 * @param searchMap * @return */ private Specification<CaseManage> createSpecification(Map searchMap,Integer createId) { return new Specification<CaseManage>() { @Override public Predicate toPredicate(Root<CaseManage> root, CriteriaQuery<?> query, CriteriaBuilder cb) {List<Predicate> predicateList = new ArrayList<Predicate>();// 案件名稱if (searchMap.get('case_name')!=null && !''.equals(searchMap.get('case_name'))) { predicateList.add(cb.like(root.get('case_name').as(String.class), '%'+(String)searchMap.get('case_name')+'%'));}// 案件編號uuid類型if (searchMap.get('case_uuid')!=null && !''.equals(searchMap.get('case_uuid'))) { predicateList.add(cb.equal(root.get('case_uuid').as(String.class), (String)searchMap.get('case_uuid')));}return cb.and( predicateList.toArray(new Predicate[predicateList.size()])); } }; }or查詢

想實現這樣的效果

where (state=1 or state=2)and name=’zhangsan’

java代碼

List<Predicate> predicateList = new ArrayList<Predicate>();Predicate or = cb.or(cb.and(cb.equal(root.get('case_authority').as(String.class), '0')), cb.and(cb.equal(root.get('create_id').as(String.class), String.valueOf(createId))));predicateList.add(or);

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。如有錯誤或未考慮完全的地方,望不吝賜教。

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩中文字幕亚洲一区二区va在线| 亚洲乱码久久| 老牛国产精品一区的观看方式| 国产精品二区不卡| 国产一区二区三区亚洲| 69堂精品视频在线播放| 日韩欧美激情| 日韩高清不卡在线| 亚洲性视频在线| 一区在线视频观看| 国产综合欧美| 视频一区二区三区中文字幕| 国产综合亚洲精品一区二| 久久精品不卡| 99国产精品私拍| 首页欧美精品中文字幕| 老鸭窝亚洲一区二区三区| 亚洲综合国产| 国产精品美女久久久| 影音先锋久久精品| 日韩三级精品| 久久国产欧美日韩精品| 毛片不卡一区二区| 日韩av有码| 国产一区二区高清| 国产精品一区二区三区四区在线观看 | 国产精品专区免费| 国产91精品对白在线播放| 午夜精品一区二区三区国产| 日韩综合一区二区| 国产在线观看www| 久久亚洲风情| 国产91在线播放精品| 日本欧洲一区二区| 麻豆传媒一区二区三区| 婷婷亚洲综合| 久久亚洲人体| 美女网站久久| 国产成人精选| 日韩精品一级| 天堂√8在线中文| 中文字幕日韩亚洲| 亚洲午夜91| 久久永久免费| 欧美日韩在线精品一区二区三区激情综合| 日韩在线观看| 麻豆高清免费国产一区| 亚洲人成网77777色在线播放| 日韩在线视频精品| 麻豆国产精品视频| 日韩国产成人精品| 国产亚洲在线观看| 亚洲播播91| 久久精品国产免费| 国产精品调教| 中文字幕中文字幕精品| 日韩在线看片| 亚洲天堂资源| 国产va免费精品观看精品视频| 久久精品99国产精品| 深夜日韩欧美| 亚洲在线久久| 视频一区日韩精品| 亚洲综合中文| 亚洲精品美女91| 日本一区免费网站| 日本少妇一区二区| 日本成人在线视频网站| 欧美片第1页综合| 国产精品羞羞答答在线观看| 国产精品久久久久久久久久齐齐 | 国产精品天堂蜜av在线播放| 亚洲作爱视频| 亚洲欧美伊人| 亚洲福利久久| 91精品精品| 999精品在线| 超碰在线99| 超碰在线99| 久久精品国产99久久| 色黄视频在线观看| 亚洲手机在线| 亚洲一区亚洲| 免费在线观看成人| 亚洲精品进入| 国产精品视频首页| 九九久久国产| 亚洲爱爱视频| 免费毛片在线不卡| 蜜臀久久99精品久久久久久9| 国产美女一区| 日韩高清一区| 视频一区日韩精品| 麻豆久久一区二区| 久久高清免费| 黄色av日韩| 久久国产尿小便嘘嘘| 欧美二三四区| 老牛影视一区二区三区| 欧美视频久久| 日韩高清成人| 天堂成人国产精品一区| 免费视频一区二区三区在线观看| 国产一区二区三区亚洲综合| 久久中文视频| 欧美天堂一区二区| 欧美二区视频| 日韩精品视频网| 性感美女一区二区在线观看| 亚洲一区二区三区四区电影| 国产欧美在线观看免费| 91精品一区二区三区综合| 日本成人在线不卡视频| 99精品视频在线| 日韩av不卡一区二区| 国产主播一区| 精品视频一区二区三区在线观看| 在线亚洲一区| av高清一区| 精品高清久久| 日本va欧美va精品| 在线视频亚洲| 国产一区日韩| 97成人在线| 日韩在线播放一区二区| 色婷婷精品视频| 欧美日韩黄网站| 最新国产精品久久久| 亚洲高清av| 久久高清精品| 欧美aa在线观看| 久久一区精品| 国产欧美综合一区二区三区| 亚洲综合专区| 综合国产精品| 中文精品电影| 中文字幕一区二区精品区| 91精品一区二区三区综合在线爱| 久久av日韩| 国产一卡不卡| 久久99蜜桃| 国产欧美一区二区精品久久久 | 国语精品一区| 欧美91在线|欧美| 久久不见久久见免费视频7| 欧美一区久久| 国产精品99精品一区二区三区∴ | 亚洲天堂av影院| 国产a久久精品一区二区三区| 精品国产91| 色88888久久久久久影院| 日韩在线免费| 水蜜桃久久夜色精品一区的特点| 男女性色大片免费观看一区二区 | 免费av一区二区三区四区| 在线国产一区| 久久国产精品99国产| 噜噜噜躁狠狠躁狠狠精品视频 | 日韩精选在线| 精品日本视频| 亚洲国内精品| 深夜福利亚洲| 国产一二在线播放| 亚洲欧洲一区| 97成人超碰| 久久精品国产大片免费观看| 美女少妇全过程你懂的久久| 日韩中文字幕亚洲一区二区va在线| 日韩一区二区三区精品| 精品亚洲自拍| 免费看精品久久片| 久久精品国产网站| 狠狠爱成人网| 老司机精品在线| 亚洲欧美日韩国产| 国产精品久久亚洲不卡| 亚洲www啪成人一区二区| 91欧美日韩在线| 日韩网站中文字幕| 国产精品久久久免费| 国产日韩专区| 石原莉奈在线亚洲三区| 成人精品高清在线视频| 香蕉久久久久久| 欧美亚洲国产一区| 免费观看亚洲| 国产精品白丝一区二区三区| 夜夜嗨网站十八久久| 久久精品女人| 久久精品72免费观看| 日韩在线观看一区二区| 欧美gv在线| 97在线精品| 久久中文字幕一区二区三区| 欧美偷窥清纯综合图区| 亚洲精品乱码| 亚洲尤物av| 日本国产亚洲| 日本aⅴ亚洲精品中文乱码| 香蕉久久国产|