spring boot学习(5) SpringBoot 之Spring Data Jpa 支持(2)
package com.cy.dao; 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 com.cy.entity.Book; public interface BookDao extends JpaRepository<Book, Integer>, JpaSpecificationExecutor<Book>{ // ?1代表第一个参数
// 这种是hql形式
@Query("select b from Book b where b.name like %?1%")
public List<Book> findByName(String name); /**
* 随机查询n条图书
* nativeQuery默认是hql查询,这里true表示使用本地查询,就是原生的sql方式
* @param n
* @return
*/
@Query(value="select * from t_book order by RAND() limit ?1", nativeQuery=true)
public List<Book> randomList(Integer n); }
注意:
上面BookDao继承了JpaSpecificationExecutor,这个接口里面才可以动态条件查询;继承这个是为了动态查询Specification 使用
BookController:
package com.cy.controller; import java.util.List; import javax.annotation.Resource;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root; import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView; import com.cy.dao.BookDao;
import com.cy.entity.Book; @Controller
@RequestMapping("/book")
public class BookController { @Resource
private BookDao bookDao;
/**
* 根据条件动态查询
*/
@RequestMapping("/list2")
public ModelAndView list2(Book book){
ModelAndView mav = new ModelAndView();
List<Book> bookList = bookDao.findAll(new Specification<Book>(){
@Override
public Predicate toPredicate(Root<Book> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
Predicate predicate = cb.conjunction();
if(book!=null){
if(book.getName()!=null && !"".equals(book.getName())){
predicate.getExpressions().add(cb.like(root.get("name"), "%"+book.getName()+"%"));
}
if(book.getAuthor()!=null && !"".equals(book.getAuthor())){
predicate.getExpressions().add(cb.like(root.get("author"), "%"+book.getAuthor()+"%"));
}
}
return predicate;
}
});
mav.addObject("book", book);
mav.addObject("bookList", bookList);
mav.setViewName("bookList");
return mav;
} /**
* 根据名字查找图书
* @return
*/
@ResponseBody
@GetMapping("/queryByName")
public List<Book> queryByName(){
return bookDao.findByName("编程");
} //随机查询一条图书
@ResponseBody
@GetMapping("/randomList")
public List<Book> randomList(){
return bookDao.randomList(1);
}
}
src/main/resouces/templates/bookList.ftl里面增加两个搜索框:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>图书管理</title>
</head>
<body>
<a href="/bookAdd.html">添加</a>
<!-- 这个book返回来是为了搜素框回显使用的 -->
<form method="post" action="/book/list2">
图书名称:<input type="text" name="name" value="${book.name}"/>
图书作者:<input type="text" name="author" value="${book.author}" />
<input type="submit" value="搜索"/>
</form>
<table>
<tr>
<th>编号</th>
<th>图书名称</th>
<th>图书作者</th>
<th>操作</th>
</tr>
<#list bookList as book>
<tr>
<td>${book.id}</td>
<td>${book.name}</td>
<td>${book.author}</td>
<td>
<a href="/book/preUpdate/${book.id}">修改</a>
<a href="/book/delete?id=${book.id}">删除</a>
</td>
</tr>
</#list>
</table>
</body>
</html>
测试:
数据表情况:
mysql> select * from t_book;
+----+--------+--------------+
| id | author | name |
+----+--------+--------------+
| 2 | 作者1 | 图书五 |
| 7 | 外国佬 | java编程思想 |
| 8 | 王五 | 大刀王五 |
| 9 | 有人 | php编程 |
+----+--------+--------------+
1.http://localhost/book/queryByName显示: [{"id":7,"name":"java编程思想","author":"外国佬"},{"id":9,"name":"php编程","author":"有人"}]
2.http://localhost/book/randomList, 随机查询一条图书;
3.http://localhost/book/list2,搜索图书名称:五:
spring boot学习(5) SpringBoot 之Spring Data Jpa 支持(2)的更多相关文章
- spring boot学习(4) SpringBoot 之Spring Data Jpa 支持(1)
第一节:Spring Data Jpa 简介 Spring-Data-Jpa JPA(Java Persistence API)定义了一系列对象持久化的标准,目前实现这一规范的产品有Hibernate ...
- Spring Boot学习(一)——Spring Boot介绍
Spring Boot介绍 Spring Boot简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式 ...
- spring boot 学习(五)SpringBoot+MyBatis(XML)+Druid
SpringBoot+MyBatis(xml)+Druid 前言 springboot集成了springJDBC与JPA,但是没有集成mybatis,所以想要使用mybatis就要自己去集成. 主要是 ...
- spring boot学习(十三)SpringBoot缓存(EhCache 2.x 篇)
SpringBoot 缓存(EhCache 2.x 篇) SpringBoot 缓存 在 Spring Boot中,通过@EnableCaching注解自动化配置合适的缓存管理器(CacheManag ...
- spring boot 学习(十)SpringBoot配置发送Email
SpringBoot配置发送Email 引入依赖 在 pom.xml 文件中引入邮件配置: <dependency> <groupId>org.springframework. ...
- spring boot学习(6) SpringBoot 之事务管理
两个操作要么同时成功,要么同时失败: 事务的一致性: 以前学ssh ssm都有事务管理service层通过applicationContext.xml配置,所有service方法都加上事务操作: 用来 ...
- spring boot学习(2) SpringBoot 项目属性配置
第一节:项目内置属性 application.properties配置整个项目的,相当于以前的web.xml: 注意到上一节的访问HelloWorld时,项目路径也没有加:直接是http://loca ...
- spring boot学习(7) SpringBoot 之表单验证
第一节:SpringBoot 之表单验证@Valid 是spring-data-jpa的功能: 下面是添加学生的信息例子,要求姓名不能为空,年龄大于18岁. 贴下代码吧: Student实体: ...
- spring boot 学习入门篇【spring boot项目的搭建以及如何加载jsp界面】
[ 前言] Spring Boot 简介:Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置, ...
随机推荐
- Java——String类
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...
- 玩转X-CTR100 | STM32F4 l GPIO位带操作
更多塔克创新资讯欢迎登陆[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] STM32F4位带概念,及位带的GPIO操作实践应用. 原理介 ...
- Android Studio打开React Native创建的项目
1.点击 Import project 2.找到项目下android文件夹,选择build.gradle文件,open
- WinRAR 0day漏洞 附利用过程
英国安全机构Mohammad Reza Espargham的漏洞实验室发现,流行压缩工具WinRAR 5.21最新版里存在一个安全漏洞,目前该漏洞还属于零日漏洞,同时官方正在全力修补该漏洞.同时报告该 ...
- ZOJ 2965 Accurately Say "CocaCola"!
Time Limit: 2 Seconds Memory Limit: 65536 KB In a party held by CocaCola company, several stude ...
- 按照Right-BICEP要求设计四则运算2程序的单元测试用例
Right——结果是否正确? B——是否所有的边界条件都是正确的? I——能查一下反响关联吗? C——能用其它手段交叉检查一下吗? E——你是否可以强制错误条件发生? P——是否满足性能要求? 测试计 ...
- Gradle 下载不了
可自行下载对应的 gradle-x.x-all.zip 放在下列目录 C:\Users\penno\.gradle\wrapper\dists\gradle-4.4-all\9br9xq1tocpiv ...
- http协议详谈
scheme - 定义因特网服务的类型.最常见的类型是 httphost - 定义域主机(http 的默认主机是 www)domain - 定义因特网域名,比如 runoob.comport - 定义 ...
- 使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(一)-- 起步
本文记录了在Windows环境下安装Visual Studio Code开发工具..Net Core 1.0 SDK和开发一个简单的Web-Demo网站的全过程. 一.安装Visual Studio ...
- test20181015 B君的第二题
题意 分析 考场85分 用multiset暴力,由于教练的机子飞快,有写priority_queue水过了的人. #include<cstdlib> #include<cstdio& ...