一、什么是JPA?
JPA(Java Persistence API) Java 持久层API,是JDK5.0注解或XML描述 对象-关系表的映射关系,并将运行期内的实体对象持久化到数据库中。
JPA的总体思想和现有Hibernate、TopLink、Jdo等ORM框架大体一致,总的来说,JPA 包括以下3方面的技术:
1、ORM映射元数据
JPA支持XML和JDK5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中;
2、API
用来操作实体对象,执行CRUD操作,框架在后台替代我们完成所有的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。
3、查询语言
这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。

二、环境搭建流程
1、创建工程的时候,添加JPA 的依赖;或者在pom.xml文件中添加

<!--jpa  依赖-->
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa </artifactId>
</dependency><!--mysql 依赖-->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>6.0.5</version>
</dependency><!--hibernate 依赖-->
<dependency><groupId>org.hibernate.javax.persistence</groupId><artifactId>hibernate-jpa-2.0-api</artifactId><version>1.0.1.Final</version>
</dependency><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>5.0.7.Final</version>
</dependency>

2、配置数据源,在application.yml 文件中 添加

server:port: 1111context-path: /Bootspring:profiles:active: dev #可设置使用哪个配置文件datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/user_boot?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTCusername: rootpassword: rootjpa:hibernate:ddl-auto: updateshow-sql: true

hibernate 自动减表方式有五个 (前提要把数据库建好):
update:表示自动根据model对象来更新表结构,启动 hibernate 时会自动检查数据库,如果缺少表则自动建表;缺少列则自动添加列;
create: 启动hibernate时,自动删除原来的表,新建所有的表,所以每次启动后的以前数据都会丢失。
create-drop:应用停下来的时候,自动会把表和数据删掉、
none: 什么也不做;
validate:会验证类里的属性和表字段是否一致,不一致,则会报错;

3、实体映射 entity类

@Entity   //注解的包 都是引用的 javax.persistence 下的
public class User {@Id@GeneratedValueprivate Integer id;private String name;@Min(value = 18, message = "禁止添加未成年人员!")private String age;@NotNull(message = "金额必传")private Double money;getter()  setter()   toString()}

@Enitty 表明是一个映射的实体类
@Id 表名字段id
@GeneratedValue 字段自动生成
属性名字和表字段是一致的。

4、接口访问 dao 层

/**
* Created by Advancer on 2017/12/29 10:41.
* auth: lbh
*/
public interface UserRepository extends JpaRepository<User, Integer> {//通过年龄来查询数据public List<User> findUserByAge(String age);}

直接继承 JpaRepository 接口就可以了,里面内置了一些简单的CRUD操作,也可自定义,查看源码

@NoRepositoryBean
public interface JpaRepository<T, ID extends Serializable> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {List<T> findAll();List<T> findAll(Sort var1);List<T> findAll(Iterable<ID> var1);<S extends T> List<S> save(Iterable<S> var1);void flush();<S extends T> S saveAndFlush(S var1);void deleteInBatch(Iterable<T> var1);void deleteAllInBatch();T getOne(ID var1);<S extends T> List<S> findAll(Example<S> var1);<S extends T> List<S> findAll(Example<S> var1, Sort var2);
}

5、测试数据 controller层

package com.lbh.Controller;import com.lbh.Dao.UserRepository;
import com.lbh.Service.UserService;
import com.lbh.entity.User;
import com.lbh.util.ResultUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;import javax.validation.Valid;
import java.util.List;/**
* Created by Advancer on 2017/12/29 10:36.
* auth: lbh
*/
@RestController
@RequestMapping("/user")
public class UserController {private final static Logger logger = LoggerFactory.getLogger(UserController.class);@Autowiredprivate UserRepository userRepository;@Autowiredprivate UserService userService;/*** 查询用户的全部列表* @return*/@GetMapping(value = "/getUsers")public List<User> getUserList(){logger.info("getUserList()");return userRepository.findAll();}/*** 新增一条记录* @param user* @return*/@PostMapping(value = "/addUser")public Object addUser(@Valid User user, BindingResult bindingResult){if (bindingResult.hasErrors()){return ResultUtils.error(1, bindingResult.getFieldError().getDefaultMessage());}user.setAge(user.getAge());user.setMoney(user.getMoney());return ResultUtils.success(userRepository.save(user));}/*** 查询一个用户* @param id* @return*/@GetMapping(value = "/getUser/{id}")public User findUserById(@PathVariable("id") Integer id){return userRepository.findOne(id);}/*** 更新一个用户* @param id* @param name* @param age* @return*/@PutMapping(value = "/updUser/{id}")public User updUser(@PathVariable("id") Integer id,@RequestParam("name") String name,@RequestParam("age") String age){User user = new User();user.setId(id);user.setName(name);user.setAge(age);return userRepository.save(user);
}/*** 删除用户* @param id*/@DeleteMapping(value = "/delUser/{id}")public void delUser(@PathVariable("id") Integer id){userRepository.delete(id);}/*** 通过年龄来查询用户* @param age* @return*/@GetMapping(value = "/findUserByAge/{age}")public List<User> findUserByAge(@PathVariable("age") String age){return userRepository.findUserByAge(age);}/*** 事务测试 写入两条数据*/@PostMapping("/insertUserTwo")public void insertUserTwo(){userService.insertUsers();}/*** 根据id 查年龄* @param id*/@GetMapping("/getAge/{id}")public void getAge(@PathVariable("id") Integer id) throws Exception {userService.getAge(id);}}

获取数据测试效果:

三、事务控制
springboot开启事务很简单,只需要一个注解@Transactional 就可以了。因为在springboot中已经默认对jpa、jdbc、mybatis开启了事事务,引入它们依赖的时候,事物就默认开启。当然,如果你需要用其他的orm,比如beatlsql,就需要自己配置相关的事物管理器。

@Service
public class UserService {@Autowiredprivate UserRepository userRepository;@Transactional(rollbackFor = Exception.class)public void insertUsers(){User user = new User();user.setAge("24");user.setName("jkj");userRepository.save(user);User user1 = new User();user1.setAge("24");user1.setName("wyy");userRepository.save(user1);}
}

Spring Boot(二):整合 JPA 及 事务控制相关推荐

  1. 【Spring Boot】整合JPA模糊分页查询

    Spring Boot整合JPA 一.POM <?xml version="1.0" encoding="UTF-8"?> <project ...

  2. spring boot 学习(二)spring boot 框架整合 thymeleaf

    spring boot 框架整合 thymeleaf spring boot 的官方文档中建议开发者使用模板引擎,避免使用 JSP.因为若一定要使用 JSP 将无法使用. 注意:本文主要参考学习了大神 ...

  3. Spring boot Mybatis 整合(完整版)

    Spring boot Mybatis 整合(完整版) 更多干货 SpringBoot系列目录 正题 本项目使用的环境: 开发工具:Intellij IDEA 2017.1.3 springboot: ...

  4. Seata分布式事务控制整合Mybatis-Plus导致事务控制失效

    解决方案 1. pom文件引入Druid数据源 <!--druid--> <dependency> <groupId>com.alibaba</groupId ...

  5. Spring boot Mybatis 整合(注解版)

    之前写过一篇关于springboot 与 mybatis整合的博文,使用了一段时间spring-data-jpa,发现那种方式真的是太爽了,mybatis的xml的映射配置总觉得有点麻烦.接口定义和映 ...

  6. Spring Boot(二):Web 综合开发

    Spring Boot(二):Web 综合开发 上篇文章介绍了 Spring Boot 初级教程:Spring Boot(一):入门篇,方便大家快速入门.了解实践 Spring Boot 特性:本篇文 ...

  7. Spring boot Mybatis 整合

    PS: 参考博客 PS: spring boot配置mybatis和事务管理 PS: Spring boot Mybatis 整合(完整版)   这篇博客里用到了怎样 生成 mybatis 插件来写程 ...

  8. 关于Spring Boot WebSocket整合以及nginx配置详解

    这篇文章主要给大家介绍了关于Spring Boot WebSocket整合以及nginx配置的相关资料,文中通过示例代码给大家介绍的非常详细,相信对大家的学习或者工作具有一定的参考学习价值,需要的朋友 ...

  9. Spring Boot 应用系列 5 -- Spring Boot 2 整合logback

    上一篇我们梳理了Spring Boot 2 整合log4j2的配置过程,其中讲到了Spring Boot 2原装适配logback,并且在非异步环境下logback和log4j2的性能差别不大,所以对 ...

  10. Spring Boot下使用JPA报错:'hibernate.dialect' not set的解决办法

    问题现象: Spring Boot下使用JPA报错:'hibernate.dialect' not set 原因是: 没有设置数据库方言导致的 解决方案: 1.如果配置文件格式为application ...

最新文章

  1. OpenCV(十二)漫水填充算法
  2. Linux pip安装包。解决:You should consider upgrading via the 'pip install --upgrade pip' command.
  3. kinect+java3d+robot开发备忘录
  4. python导入模块的变量_python 环境变量和import模块导入方法(详解)
  5. c++socket多个客户端通过不同端口与一个服务端通信_手写RPC,深入底层理解整个RPC通信...
  6. Paper:《Generating Sequences With Recurrent Neural Networks》的翻译和解读
  7. 笔记 - AliCloud 云数据库 简介
  8. [当人工智能遇上安全] 1.人工智能真的安全吗?浙大团队外滩大会分享AI对抗样本技术
  9. 最长连续序列—leetcode128
  10. IO编程__字节流__输入、输出__图片移动
  11. SAP CRM WebClient UI Technical profile里timeout 设置
  12. 7.1.8860.142
  13. 求解一元一次方程C语言,问一道算法题目(解一元一次方程的问题)
  14. python写一个计时器_Python 实现一个计时器
  15. 微型计算机原理DL,微型计算机原理练习附解答.doc
  16. 获取系统当前日期时间
  17. 一篇关于蓝牙SDP和L2CAP协议的文章
  18. java中JFrame.setSize,Java JFrame .setSize(x, y) not working?
  19. Markdown编辑器使用-yellowcong
  20. 阿里VIP会员看腾讯视频?这不是一个意外的选择

热门文章

  1. 回顾一年的工作历程_回顾历程、总结经验、展望未来
  2. 伊利诺伊大学厄本那 香槟分校计算机科学,美国伊利诺伊大学厄本那香槟分校专业设置...
  3. SG Input 软件安全分析之逆向分析
  4. python实现指纹识别毕业论文_指纹识别系统毕业论文.doc
  5. DevOps 对比分析:产品、服务、开源投入
  6. 怎样分析数据致提高产出?(一)
  7. windowsxp下载python下载视频_Python 实现视频下载
  8. 云服务器+Dock+搭建个人博客网站
  9. FastReport.Net报表工具 vs RDL标准报表定义语言
  10. 计算机局域网的组网,计算机局域网组网方案设计(精选).doc