Spring Data JPA在Spring Boot中的应用
1.JPA
JPA(Java Persistence API)是Sun官方提出的Java持久化规范。它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据。他的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束现在Hibernate,TopLink,JDO等ORM框架各自为营的局面。值得注意的是,JPA是在充分吸收了现有Hibernate,TopLink,JDO等ORM框架的基础上发展而来的,具有易于使用,伸缩性强等优点。JPA是一套规范,不是一套产品,那么像Hibernate,TopLink,JDO他们是一套产品,如果说这些产品实现了这个JPA规范,那么我们就可以叫他们为JPA的实现产品。
2.项目搭建
本文采用IDEA搭建Spring Boot的JPA应用,Demo结构图如下:
3.具体实现
(1)配置文件
- pom.xml里加入spring-boot-starter-data-jpa以及mysql-connector-java的依赖,如下所示。
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-data-jpa</artifactId>
- </dependency>
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- <version>6.0.6</version>
- </dependency>
- application.yml里加入hibernate、jpa的配置,以及返回json对日期字段的特殊处理配置,注意time-zone的设置,须与mysql的url配置一致,否则会引起时间相差8小时的问题。jpa里的show-sql作用,如果设置为true,执行程序后可以看在控制台里看到sql语句,如下所示。
- spring:
- profiles:
- active: product
- datasource:
- driver-class-name: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql://localhost:3306/saascrm?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
- username: root
- password: snail123
- jpa:
- hibernate:
- ddl-auto: update
- show-sql: true
- jackson:
- date-format: yyyy-MM-dd HH:mm:ss
- time-zone: UTC
(2)分层
为了区别各个模块,为项目建立几个包:controller、Entity、respository、service,这是典型的MVC架构,各个层次的代表意义在此不再赘述。
(3)Respository层
spring data jpa让我们解脱了DAO层的操作,基本上所有CRUD都可以依赖于它来实现,需要实现JpaRepository接口
- public interface UserRepository extends JpaRepository<UserInfo,Long> {
- }
(4)Entity层
定义了用户信息表实体UserInfo,通过Hibernate与数据库形成映射关系,如下:
- @Entity
- @Component
- public class UserInfo {
- public UserInfo() {
- }
- @Id
- @GeneratedValue
- public Long getId() {
- return id;
- }
- public void setId(Long id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getJobNumber() {
- return jobNumber;
- }
- public void setJobNumber(String jobNumber) {
- this.jobNumber = jobNumber;
- }
- public Date getCreateTime() {
- return createTime;
- }
- public void setCreateTime(Date createTime) {
- this.createTime = createTime;
- }
- private Long id; //ID
- private String name; //姓名
- private String jobNumber; //工号
- private Date createTime; //创建时间
- }
(5)service层
定义了服务层接口以及服务层接口实现类,如下:
- UserService.java
- public interface UserService {
- List<UserInfo> getUserList();
- UserInfo getUserByName(String name);
- UserInfo addUserInfo(UserInfo userInfo);
- UserInfo updateUserInfoById(UserInfo userInfo);
- void deleteUserInfoById(Long Id);
- List<UserInfo>getCurrentUserList();
- Page<UserInfo> getPageUserList();
- }
- UserServiceImpl.java
其中涉及单表的增删改查,还有分页查询等
- @Service
- public class UserServiceImpl implements UserService{
- @Autowired
- private UserRepository userRepository;
- /**
- * 获取所有用户列表
- * @return
- */
- public List<UserInfo> getUserList(){
- List<UserInfo> userList=new ArrayList<UserInfo>();
- userList=userRepository.findAll();
- return userList;
- }
- /**
- * 通过姓名获取用户信息
- * @param name 用户姓名
- * @return
- */
- public UserInfo getUserByName(String name) {
- return userRepository.findByName(name);
- }
- /**
- * 新增用户信息
- * @param userInfo 用户信息
- * @return
- */
- public UserInfo addUserInfo(UserInfo userInfo) {
- return userRepository.save(userInfo);
- }
- /**
- * 更新用户信息
- * @param userInfo 用户信息
- * @return
- */
- public UserInfo updateUserInfoById(UserInfo userInfo) {
- return userRepository.save(userInfo);
- }
- /**
- * 删除用户信息
- * @param id 主键Id
- */
- public void deleteUserInfoById(Long id) {
- userRepository.delete(id);
- }
- /**
- * 获取最新的用户
- * @return
- */
- public List<UserInfo> getCurrentUserList() {
- Sort sort=new Sort(Sort.Direction.DESC,"createTime");
- return userRepository.findAll(sort);
- }
- /**
- * 获取分页的用户
- * @return
- */
- public Page<UserInfo> getPageUserList() {
- Sort sort=new Sort(Sort.Direction.DESC,"createTime");
- Pageable pageable=new PageRequest(0,5,sort);
- return userRepository.findAll(pageable);
- }
- }
(6)Controller层
其中,日期格式需要做转换,在需要日期转换的Controller中使用SpringMVC的注解@initbinder和Spring自带的WebDateBinder类来操作。WebDataBinder是用来绑定请求参数到指定的属性编辑器.由于前台传到controller里的值是String类型的,当往Model里Set这个值的时候,如果set的这个属性是个对象,Spring就会去找到对应的editor进行转换,然后再SET进去。
- @RestController
- @RequestMapping(value = "/test")
- public class TestController {
- @Autowired
- private UserInfo userInfo;
- @Resource
- private UserService userService;
- /**
- * 获取所有用户
- * @return
- */
- @GetMapping(value = "/getUserList")
- public List<UserInfo> getUserList() {
- return userService.getUserList();
- }
- @GetMapping(value = "/getUserInfo")
- public UserInfo getUserInfoByName(@RequestParam("name") String name) {
- return userService.getUserByName(name);
- }
- @GetMapping(value = "/getCurrentUserList")
- public List<UserInfo> getCurrentUserList(){
- return userService.getCurrentUserList();
- }
- @GetMapping(value="/getPageUserList")
- public Page<UserInfo> getPageUserList(){
- return userService.getPageUserList();
- }
- @PutMapping(value = "/addUserInfo")
- public UserInfo addUserInfo(UserInfo userInfo) {
- return userService.addUserInfo(userInfo);
- }
- @PostMapping(value ="/updateUserInfo")
- public UserInfo updateUserInfo(UserInfo userInfo){
- return userService.updateUserInfoById(userInfo);
- }
- @PostMapping(value="/deleteUserInfo")
- public void deleteUserInfo(@RequestParam("id") Long id){
- userService.deleteUserInfoById(id);
- }
- @InitBinder
- protected void init(HttpServletRequest request, ServletRequestDataBinder binder) {
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));/*TimeZone时区,解决差8小时的问题*/
- binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));
- }
4.测试
Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。
本文借助PostMan工具进行测试,如下图所示。(注意事项,如果选择PUT请求,那么只能选x-www-form-urlencoded)
Spring Data JPA在Spring Boot中的应用的更多相关文章
- 使用Spring Data JPA的Spring Boot
本文教你开始使用Spring Data JPA.来自优锐课JAVA架构专业讲师精心整理. 欢迎使用带有Spring Data JPA的Spring Boot教程!在本教程中,我们将看到Spring D ...
- Spring Data JPA 整合Spring
1.1 Spring Data JPA 与 JPA和hibernate之间的关系 JPA是一套规范,内部是有接口和抽象类组成的.hibernate是一套成熟的ORM框架,而且Hibernate实现 ...
- Spring Data JPA简介 Spring Data JPA特点
Spring Data JPA 是Spring基于ORM框架.JPA规范的基础上封装的一套JPA 应用框架,底层使用了Hibernate 的JPA技术实现,可使开发者用极简的代码即可实现对数据的访问和 ...
- 整合Spring Data JPA与Spring MVC: 分页和排序
之前我们学习了如何使用Jpa访问关系型数据库.比较完整Spring MVC和JPA教程请见Spring Data JPA实战入门,Spring MVC实战入门. 通过Jpa大大简化了我们对数据库的开发 ...
- 整合Spring Data JPA与Spring MVC: 分页和排序pageable
https://www.tianmaying.com/tutorial/spring-jpa-page-sort Spring Data Jpa对于分页以及排序的查询也有着完美的支持,接下来,我们来学 ...
- <Spring Data JPA>二 Spring Data Jpa
1.pom依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...
- Spring Data JPA 整合Spring 第二篇
主要是在CustomerDao中去写一些代码,在调用Query中去用SQL 例如 public interface CustomerDao extends JpaRepository<Custo ...
- spring data jpa和spring data redis同时配置时,出现Multiple Spring Data modules found, entering strict repository configuration mode错误
问题说明 data jpa和data redis同时配置时,出现Spring modules spring Spring Data Release Train <dependencyManage ...
- 【spring data jpa】spring data jpa 中的update 更新字段,如果原字段值为null不处理,不为null则在原来的值上加一段字符串
示例代码: /** * 如果barCode字段值为null则不处理 * 如果barCode字段值不为null则在原本值的前面拼接 del: * @param dealer * @return */ @ ...
随机推荐
- js对手机软键盘的监听
js还没有办法对手机软键盘直接进行监听的,但是可以有其他角度来判断软键盘是否弹起.比如输入框是否获取焦点等.focusin和focusout支持冒泡,对应focus和blur, 使用focusin和f ...
- Webpack 代码分离
Webpack 代码分离 代码分离是 webpack 中最引人注目的特性之一. 你可以把你的代码分离到不同的 bundle 中,然后你就可以去按需加载这些文件. 总的来说, webpack 分离可以分 ...
- 用javascript实现java的Map
function Map(){ var obj={}; //空的容器 //put方法 this.put=function(key,value){ obj[key]=value; //把键值绑定到obj ...
- JS事件及其兼容用法
JavaScript与HTML之间的交互是通过事件实现的.事件,就是文档或浏览器窗口中发生的一些特定的交互瞬间. 1.事件流:描述的是从页面中接收事件的顺序. IE提出的事件冒泡流:事件开始由最具体的 ...
- springmvc 之 helloworld
构建SPRINGMVC主要分为几个部分(大体方式为创建并配置2个XML文件.一个JAVA文件及一个JSP文件). 一.创建动态JAVA WEB项目 //创建项目并导入JAR包. 二.创建并配置ser ...
- vmware克隆虚拟机后网卡名称及网络地址xiuf
使用vmware克隆虚拟机后,若原主机网卡名称为eth0,那么克隆后的主机使用ifconfig查看仅能看到一个名称为eth1的网卡 并且在/etc/sysconfig/network-scripts/ ...
- mac+phpstorm增加xdebug调试
一.版本信息 mac 10.10.5 phpstorm 10.0.3 xdebug 版本需要与phpstorm匹配,匹配地址 点我匹配 点我查看所有版本 提示:不确定xdebug版本的,把php ...
- 在React中使用Redux
这是Webpack+React系列配置过程记录的第六篇.其他内容请参考: 第一篇:使用webpack.babel.react.antdesign配置单页面应用开发环境 第二篇:使用react-rout ...
- DOM 和 BOM 的 对象 和方法
DOM 对象 有 documet event element attlibute 方法 getElementById getElementsBytagname getElementsB ...
- phpstorm显示行号
在Windows上. 其View->Active Editor->Show Line Numbers (仅适用于当前和变化File->Settings->Editor-> ...