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

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

springboot 之jpa高級查詢操作

瀏覽:30日期: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久久,三上悠亚国产精品一区二区三区
国产精品网站在线看| 国产精品久久观看| 日韩国产在线| 久久婷婷av| 欧美日中文字幕| 久久精品不卡| 中文国产一区| 最近国产精品视频| 免费在线观看成人| 日韩1区2区3区| 国产精品色在线网站| 国产一区国产二区国产三区| 日本激情一区| 亚洲国产一区二区三区在线播放 | 国产成人精选| 欧洲一区二区三区精品| 亚洲v在线看| 亚洲影院天堂中文av色| 中文一区在线| 久久国产乱子精品免费女| 色综合五月天| 一级欧美视频| 丁香婷婷久久| 亚洲精品无播放器在线播放| 免费亚洲一区| 国产农村妇女精品一区二区 | 九九久久国产| 麻豆9191精品国产| а√在线中文在线新版| 亚洲啊v在线免费视频| 成人小电影网站| 欧美日韩午夜电影网| 影音先锋久久精品| 久久精品动漫| 美女高潮久久久| 亚洲欧洲日本mm| 国内揄拍国内精品久久| 日韩影院在线观看| 亚洲精品在线影院| 国产精品亚洲综合久久| 亚洲主播在线| 米奇777超碰欧美日韩亚洲| 国产成人免费| 欧美aaaaaa午夜精品| 日韩1区2区3区| 一区二区三区四区日韩| 国产精品88久久久久久| 久久精品av| 免费毛片在线不卡| 伊人久久大香线蕉av不卡| 蜜臀久久精品| 久久精品国产免费| 国产日韩欧美高清免费| 四虎精品永久免费| 亚洲色图网站| 午夜性色一区二区三区免费视频| 国产精品婷婷| 蜜桃av一区二区三区电影| 国产视频久久| 天堂成人免费av电影一区| 国产精品社区| 亚洲精品乱码日韩| 亚洲欧美网站在线观看| 色综合视频一区二区三区日韩 | 蜜臀a∨国产成人精品| 亚洲精品人人| 日韩精品久久久久久| 欧美日韩视频免费看| 国产精品s色| 麻豆国产精品一区二区三区| 国产高清亚洲| 精品成人18| 999视频精品| 狠狠久久婷婷| 蜜臀av性久久久久蜜臀aⅴ流畅| 国产精品美女| 日本欧美韩国一区三区| 欧美日韩亚洲三区| 日韩欧美网址| 亚洲资源网站| 国产一区二区三区四区| 午夜欧美精品久久久久久久| 蜜臀久久99精品久久久久久9| 国产情侣久久| 久久久人人人| 在线亚洲激情| 久久精品72免费观看| 激情国产在线| 综合激情一区| 日韩电影在线视频| 亚洲tv在线| 五月天久久久| 国产精品扒开腿做爽爽爽软件| 国产精品99一区二区| 国产日韩欧美三区| 欧美日韩国产探花| 麻豆视频一区二区| 久久不射中文字幕| 中文在线资源| 国产日韩欧美一区二区三区 | 欧美日韩一区二区高清| 99精品美女| 久久伊人国产| 中文字幕中文字幕精品| 国产精品99一区二区三区| 亚洲三级av| 亚洲综合电影一区二区三区| av资源中文在线| 国产精品一区二区99| 一级欧美视频| 波多野结衣一区| 国产在线看片免费视频在线观看| 日韩综合小视频| 99亚洲精品| 久久久久久久久99精品大| 久久精品国产久精国产爱| 亚洲精品日韩久久| 午夜在线精品偷拍| 美女毛片一区二区三区四区| 国产一区2区| 精品一区二区三区视频在线播放| 日本亚州欧洲精品不卡| 美女久久一区| 午夜一区在线| 爽好久久久欧美精品| 欧美在线资源| 最新亚洲一区| 中文字幕免费一区二区| 美女被久久久| 少妇高潮一区二区三区99| 亚洲深夜福利| 一本综合精品| 88久久精品| 久久99偷拍| 高清久久精品| 亚洲成人va| 亚洲黄色影院| 亚洲一二av| 国产精品国产三级在线观看| 国产精品夜夜夜| 久久免费影院| 亚洲www啪成人一区二区| 午夜精品亚洲| 欧美精品中文| 国产v日韩v欧美v| 亚洲免费成人| 国产精品资源| 日韩美女一区二区三区在线观看| 1000部精品久久久久久久久| 首页国产欧美久久| 久久精品99国产国产精| 午夜精品成人av| 亚洲精品一二三**| 国产一区二区三区网| 香蕉成人久久| 美女免费视频一区| 久久裸体视频| 欧美视频久久| 亚洲网站视频| 国产精品超碰| 免费的成人av| www.com.cn成人| 奇米色欧美一区二区三区| 日韩在线欧美| 国产精品s色| 免费精品视频在线| 国产精品久久久久av电视剧| 四虎在线精品| 黄色日韩在线| 国产不卡av一区二区| 亚洲综合中文| 成人日韩在线| 国模精品一区| 青青草国产精品亚洲专区无| 婷婷亚洲五月| 成人av三级| 国产欧美视频在线| 亚洲伊人精品酒店| 午夜一级久久| 黄色欧美日韩| 亚洲午夜在线| 日韩免费小视频| 在线天堂中文资源最新版| 福利一区二区三区视频在线观看| 国产精品资源| 欧美视频久久| 日韩va亚洲va欧美va久久| 99亚洲视频| 久久av一区| 老牛国产精品一区的观看方式| 国产综合精品| 欧美日韩少妇| 老鸭窝亚洲一区二区三区| 亚洲深夜影院| 中文字幕一区二区精品区| 亚洲乱码一区| 国产午夜久久av| 精品中文字幕一区二区三区 | 视频一区国产视频| 水野朝阳av一区二区三区|