1. 首页
  2. IT资讯

Java程序员如何使用spring data JPA完成分组查询?答案看这里!

“u003Cdivu003Eu003Cpu003E在BOS2.0课程学习spring data JPA的时候,已经对复杂的多表多条件联合查询进行讲解,对于分组的操作,spring data JPA中并没有提供直接的API去实现,下面制作一个测试demo,以“曲线救国”的方式进行分组查询。u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp9.pstatp.comu002Flargeu002Fpgc-imageu002F115f4ee6e84a44ceae4fbaefee3b40b7″ img_width=”500″ img_height=”300″ alt=”Java程序员如何使用spring data JPA完成分组查询?答案看这里!” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E编辑u003Cu002Fpu003Eu003Cp class=”ql-align-center”u003E请点击输入图片描述u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E完成的需求u003Cu002Fstrongu003E:查询辽宁省下的所有市以及其编码前四位(比如2101)u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E1. 准备数据(表t_area数据省份为辽宁省):u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp9.pstatp.comu002Flargeu002Fpgc-imageu002F9ece0e907bad441cbef83dbac4c96f65″ img_width=”710″ img_height=”376″ alt=”Java程序员如何使用spring data JPA完成分组查询?答案看这里!” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E编辑u003Cu002Fpu003Eu003Cp class=”ql-align-center”u003E请点击输入图片描述u003Cu002Fpu003Eu003Cpu003E在数据库中,辽宁省的邮政编码前两位是21,下属14个市级单位。u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E2. 可以预先写出原生SQL:u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cblockquoteu003Eu003Cpu003Eselect substr(c_id,0,4),c_city u003Cu002Fpu003Eu003Cpu003Efrom t_area u003Cu002Fpu003Eu003Cpu003Ewhere substr(c_id,0,2) = ’21’ –按照c_id前两位是21(即辽宁省)过滤市u003Cu002Fpu003Eu003Cpu003Egroup by c_city,substr(c_id,0,4) — 按照城市名称、c_id前四位进行分组u003Cu002Fpu003Eu003Cu002Fblockquoteu003Eu003Cpu003Eu003Cstrongu003E查询结果如下:u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp9.pstatp.comu002Flargeu002Fpgc-imageu002F4a77ce02877d4c7ba273366465411ef9″ img_width=”216″ img_height=”255″ alt=”Java程序员如何使用spring data JPA完成分组查询?答案看这里!” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E编辑u003Cu002Fpu003Eu003Cp class=”ql-align-center”u003E请点击输入图片描述u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E3.利用JPA的配置(这里就不贴出了),编写DAO接口,继承JpaRepositoryu003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cblockquoteu003Eu003Cpu003Epublic interface AreaDao extends JpaRepository<Area, String>{u003Cu002Fpu003Eu003Cpu003E @Query(value=”select new cn.itcast.bos.domain.base.CityArea(substr(a.id,0,4),a.city)”u003Cu002Fpu003Eu003Cpu003E + ” from Area a”u003Cu002Fpu003Eu003Cpu003E + ” where substr(a.id,0,2) = ?”u003Cu002Fpu003Eu003Cpu003E + ” group by substr(a.id,0,4),a.city”)u003Cu002Fpu003Eu003Cpu003E List<CityArea> getCityByProId(String string);u003Cu002Fpu003Eu003Cpu003E}u003Cu002Fpu003Eu003Cu002Fblockquoteu003Eu003Cpu003E需要特别说明,由于该查询结果只接受两个字段,无法直接会用T_AREA表对应的JavaBean来接收响应数据,需要额外提供一个普通类(CityArea)接收。u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E4. 准备CityArea接收查询结果u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cblockquoteu003Eu003Cpu003Epublic class CityArea {u003Cu002Fpu003Eu003Cpu003E private String id;u003Cu002Fpu003Eu003Cpu003E private String cityName;u003Cu002Fpu003Eu003Cpu003E public String getId() {u003Cu002Fpu003Eu003Cpu003E return id;u003Cu002Fpu003Eu003Cpu003E }u003Cu002Fpu003Eu003Cpu003E public void setId(String id) {u003Cu002Fpu003Eu003Cpu003E this.id = id;u003Cu002Fpu003Eu003Cpu003E }u003Cu002Fpu003Eu003Cpu003E public String getCityName() {u003Cu002Fpu003Eu003Cpu003E return cityName;u003Cu002Fpu003Eu003Cpu003E }u003Cu002Fpu003Eu003Cpu003E public void setCityName(String cityName) {u003Cu002Fpu003Eu003Cpu003E this.cityName = cityName;u003Cu002Fpu003Eu003Cpu003E }u003Cu002Fpu003Eu003Cpu003E public CityArea() {u003Cu002Fpu003Eu003Cpu003E }u003Cu002Fpu003Eu003Cpu003E u002Fu002F特别说明:u003Cu002Fpu003Eu003Cpu003E u002Fu002F该有参构造必须有,因为需要对应接收查询语句中u003Cu002Fpu003Eu003Cpu003E u002Fu002Fselect new cn.itcast.bos.domain.base.CityArea(substr(a.id,0,4),a.city)u003Cu002Fpu003Eu003Cpu003E u002Fu002F所new出来的对象的两个参数u003Cu002Fpu003Eu003Cpu003E public CityArea(String id, String cityName) {u003Cu002Fpu003Eu003Cpu003E this.id = id;u003Cu002Fpu003Eu003Cpu003E this.cityName = cityName;u003Cu002Fpu003Eu003Cpu003E }u003Cu002Fpu003Eu003Cpu003E}u003Cu002Fpu003Eu003Cu002Fblockquoteu003Eu003Cpu003E需要注意的是u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002F5e26adf3386d4e47b5ba7d3a91d5e750″ img_width=”748″ img_height=”153″ alt=”Java程序员如何使用spring data JPA完成分组查询?答案看这里!” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E编辑u003Cu002Fpu003Eu003Cp class=”ql-align-center”u003E请点击输入图片描述u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E5.准备测试类测试代码u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E注入daou003Cu002Fpu003Eu003Cblockquoteu003Eu003Cpu003E@Autowiredu003Cu002Fpu003Eu003Cpu003E private AreaDao areaDao;u003Cu002Fpu003Eu003Cu002Fblockquoteu003Eu003Cpu003E编写测试方法,传入查询条件 21(辽宁省id前两位)并debug运行u003Cu002Fpu003Eu003Cblockquoteu003Eu003Cpu003E@Testu003Cu002Fpu003Eu003Cpu003E @Transactionalu003Cu002Fpu003Eu003Cpu003E public void test6() {u003Cu002Fpu003Eu003Cpu003E List<CityArea> areas = areaDao.getCityByProId(“21″);u003Cu002Fpu003Eu003Cpu003E System.out.println(areas);u003Cu002Fpu003Eu003Cpu003E }u003Cu002Fpu003Eu003Cu002Fblockquoteu003Eu003Cpu003Edebug可以看到结果数据u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp9.pstatp.comu002Flargeu002Fpgc-imageu002F1bb9a8735fa64ff09dddbfbe64cbc340″ img_width=”798″ img_height=”209″ alt=”Java程序员如何使用spring data JPA完成分组查询?答案看这里!” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cu002Fdivu003E”

原文始发于:Java程序员如何使用spring data JPA完成分组查询?答案看这里!

主题测试文章,只做测试使用。发布者:玩家L-,转转请注明出处:http://www.cxybcw.com/26864.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code