第二篇:Spring Boot整合JPA、事务处理及AOP的使用

2023-10-29

(一)Spring Boot整合JPA的具体步骤

注:Spring Boot整合JPA 源码下载
注:springboot学习资料汇总
参考:spring data jpa的使用
参考:《Spring Cloud微服务实战》作者
参考:方志朋博客
参考:Spring Boot官网
Spring Cloud官网
搭建项目所需环境:
  1. intelliJ IDEA 2018.1.3 x64
  2. apache-maven-3.5.0
  3. JDK1.8或JDK1.8以上,否则Spring Boot运行报错
项目文件结构图:

这里写图片描述

第一步:添加依赖

<!--引入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>
 </dependency>

   <!-- 记录日志 -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
        </dependency>

第二步:连接数据库(使用application.yml)

application.yml

    spring:
      profiles:
        active: a
      datasource:
          driver-class-name: com.mysql.jdbc.Driver
          url: jdbc:mysql://127.0.0.1:3306/db_person?useSSL=false
          username: root
          password: root

      jpa:
        hibernate:
          ddl-auto: update # 自动更新
        show-sql: true  # 控制台打印SQl语句

3.第三步:创建Person类封装数据

/**
 * 使用@Entity注解,创建数据表
 */
@Entity
public class Person {
    @Id
    @GeneratedValue
    private  Integer id;
    private String name;
    private Integer age;

    //必须要有构造函数
    public Person() {
    }
    ---省略getter和setter方法---
 }   

第四步:创建PersonRepository接口操作数据库

public interface PersonRepository extends JpaRepository<Person,Integer> {

    /**
     *
     * @param age
     * @return 通过年龄查找返回一个列表
     */
    public List<Person> findByAge(Integer age);

    /**
     *
     * @param id
     * @return 通过id查询返回一个对象
     */
    public Person findById(Integer id);
}

第五步:创建PersonController处理请

/**
 * Created by HP on 2018/7/30.
 */
@RestController
public class PersonController {

    private final static Logger logger = LoggerFactory.getLogger(PersonController.class);
    @Autowired
    private PersonRepository personRepository;

    @Autowired
    private PersonService personService;
    /**
     * 1.查询列表
     */
    @GetMapping(value = "/find/personList")
    public List<Person> findAllPerson() {
        logger.info("查询列表");
        return personRepository.findAll();
    }

    /**
     * 2.添加一位员工信息
     */
    @PostMapping(value="/add/onePerson")
    public Person addPerson(@RequestParam("name") String name, @RequestParam("age") Integer age){
        logger.info("添加一位员工信息");
        Person person = new Person();
        person.setName(name);
        person.setAge(age);
        return personRepository.save(person);
    }
    /**
     * 3.查询一个人
     */
    @GetMapping(value = "/person/{id}")
    public Person findPerson(@PathVariable("id") Integer id){
       logger.info("查询一个人");
        //使用此方法
        return personRepository.findById(id);
    }
    @GetMapping(value = "/person/age/{age}")
    public List<Person> findListPerson(@PathVariable("age") Integer age){
        logger.info("通过年龄查询");
        return personRepository.findByAge(age);
    }
    /**
     * 4.删除一条记录
     */
    @DeleteMapping(value = "/delete/person/{id}")
    public void delPerson(@PathVariable("id") Integer id){
        logger.info("删除一条记录");
        personRepository.delete(id);
    }
    /**
     * 5.更新数据
     */
    @PostMapping(value = "/update/person/{id}")
    public Person updatePerson(@PathVariable("id") Integer id,
                             @RequestParam("name") String name,
                             @RequestParam("age") Integer age){

        logger.info("更新个人数据");
        Person person=new Person();
        person.setId(id);
        person.setName(name);
        person.setAge(age);
       return personRepository.save(person);

    }

}

(二)Spring Boot事务处理

由于Spring Boot默认是开启事务的,所有我们只需要在自己数据库操作上添加@Transactional注解即可!
注:在Service层添加事务注解@Transactional
PersonService.java

@Service
public class PersonService {

    @Autowired
    private PersonRepository personRepository;

    /**
     * Spring boot开启事务只需要添加@Transactional即可!
     *
     */
    @Transactional
    public void insertTwo() {
        Person person1 = new Person();
        person1.setAge(18);
        person1.setName("李斯");
        personRepository.save(person1);

        //将数据库字段设置为2个字节,超过就报错
        Person person2 = new Person();
        person2.setAge(28);
        person2.setName("曹操666");
        personRepository.save(person2);
    }
}

参考:SpringBoot事务注解@Transactional

(三)Spring Boot中使用AOP

第一步,添加依赖


<!--引入aop-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

第二步,创建AOP方法的类

AspectDemo.java

@Aspect //声明一个切面
@Component 
public class AspectDemo {

    //定义切点
    @Pointcut("execution(* com.wang.controller.*.*(..))")
    public void qieru(){

    }

    //在切点前执行以下代码
    @Before("qieru()")
    public void qianzhi(){
        System.out.println("前置通知");
    }
    @After("qieru()")
    public void houzhi(){
        System.out.println("后置通知");
    }
    @AfterReturning("qieru()")
    public void qianzhifanhui(){
        System.out.println("后置返回 ");
    }
    @AfterThrowing("qieru()")
    public void qianzhiYichang(){
        System.out.println("后置异常");
    }
    @Around("qieru()")
    public void huanrao(ProceedingJoinPoint poin) throws Throwable {
        System.out.println("环绕通知"+logger.getClass().getName());
        poin.proceed();
    }
}

第三步,创建测试方法

/**
 * Created by HP on 2018/7/30.
 */
@RestController
public class PersonController {

    private final static Logger logger = LoggerFactory.getLogger(PersonController.class);
    @Autowired
    private PersonRepository personRepository;

    @Autowired
    private PersonService personService;
    /**
     * 1.查询列表
     */
    @GetMapping(value = "/find/personList")
    public List<Person> findAllPerson() {
        logger.info("查询列表");
        return personRepository.findAll();
    }

    /**
     * 2.添加一位员工信息
     */
    @PostMapping(value="/add/onePerson")
    public Person addPerson(@RequestParam("name") String name, @RequestParam("age") Integer age){
        logger.info("添加一位员工信息");
        Person person = new Person();
        person.setName(name);
        person.setAge(age);
        return personRepository.save(person);
    }
    /**
     * 3.查询一个人
     */
    @GetMapping(value = "/person/{id}")
    public Person findPerson(@PathVariable("id") Integer id){
       logger.info("查询一个人");
        //使用此方法
        return personRepository.findById(id);
    }
    @GetMapping(value = "/person/age/{age}")
    public List<Person> findListPerson(@PathVariable("age") Integer age){
        logger.info("通过年龄查询");
        return personRepository.findByAge(age);
    }
    /**
     * 4.删除一条记录
     */
    @DeleteMapping(value = "/delete/person/{id}")
    public void delPerson(@PathVariable("id") Integer id){
        logger.info("删除一条记录");
        personRepository.delete(id);
    }
    /**
     * 5.更新数据
     */
    @PostMapping(value = "/update/person/{id}")
    public Person updatePerson(@PathVariable("id") Integer id,
                             @RequestParam("name") String name,
                             @RequestParam("age") Integer age){

        logger.info("更新个人数据");
        Person person=new Person();
        person.setId(id);
        person.setName(name);
        person.setAge(age);
       return personRepository.save(person);

    }

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

第二篇:Spring Boot整合JPA、事务处理及AOP的使用 的相关文章

随机推荐

  • 华为OD机试 - 阿里巴巴找黄金宝箱(IV)(Java)

    题目描述 一贫如洗的樵夫阿里巴巴在去砍柴的路上 无意中发现了强盗集团的藏宝地 藏宝地有编号从0 N的箱子 每个箱子上面有一个数字 箱子排列成一个环 编号最大的箱子的下一个是编号为0的箱子 请输出每个箱了贴的数字之后的第一个比它大的数 如果不
  • java爱心效果代码来了

    爱心 代码来了 村上春树说 仪式是一件很重要的事 现实生活被琐事充斥 仪式感总是被人遗忘 凑合的晚饭 乱丢的衣物 杂乱无章的生活让原本平淡的生活过得一潭死水 找不到生活的乐趣 童话 小王子 里狐狸对小王子说 你最好在每天相同的时间来 比如你
  • scrapy提高爬取速度

    scrapy在单机跑大量数据的时候 在对settings文件不进行设置的时候 scrapy的爬取速度很慢 再加上多个页面层级解析 往往导致上万的数据可能爬取要半个小时之久 这还不包括插入数据到数据库的操作 下面是我在实验中测试并且验证爬取速
  • Docker 之桥接网络(一)

    参考 https docs docker com network bridge 在网络方面 桥接网络是一个链路层设备 它在网络段之间转发流量 网桥可以是运行在主机内核中的硬件设备或软件设备 就Docker而言 桥接网络使用软件桥 允许连接到
  • Windows下配置环境变量

    Windows下配置环境变量 在安装某些软件或者应用程序时 需要配置环境变量 以便在后续可以正常使用 环境变量相当于给系统或用户应用程序设置一些参数 具体起什么作用和对应的环境变量相关 比如path 是告诉系统 当要求系统运行一个程序而没有
  • React 18的新特新

    React 18 最新的特性 批处理文件 在同一个 函数中 调用多次 useState 也只是会更新一次 function App const count setCount useState 0 const flag setFlag use
  • 基于51单片机的水位液位温度监测鱼缸系统仿真原理图程序

    硬件设计 上一篇咱们讲了基于数码管显示的液位检测 本章讲一下基于LCD1602显示的液位检测 同时伴有温度测量 该系统可应用于鱼缸 水塔 水箱的检测 本系统液位检测方案是基于液位传感器 通过传感器嵌入液体反馈回电信号 通过电信号的大小可以反
  • 如何利用python将一个list中的数字提取,然后求和?

    coding UTF 8 import re name score list u 唐僧 100 u 猪八戒 60 u 孙悟空 95 u 沙和尚 80 1 将score list列表转换为以 为分隔符的字符串 name score list
  • 极限学习机ELM原理与实现

    极限学习机 ELM 是当前一类非常热门的机器学习算法 被用来训练单隐层前馈神经网络 SLFN 本篇博文尽量通俗易懂地对极限学习机的原理进行详细介绍 之后分析如何用python实现该算法并对代码进行解释 1 算法的原理 极限学习机 ELM 用
  • 【STM32】 JDY-31蓝牙模块

    目录 一 介绍 二 模块特点 三 产品应用范围 四 模块技术参数 五 模块接口说明 六 蓝牙模块接口电路图 七 蓝牙模块实物图 一 介绍 蓝牙模块是指集成蓝牙功能的芯片基本电路集合 用于无线网络通讯 本蓝牙模块就是为了只能无线数据传输而专门
  • 微服务 - 拆分微服务的问题和拆分方法

    概述 现在被谈论最多的就是微服务和中台系统 我个人的理解是微服务或者是中台好不好 主要看实际的业务场景 架构的变迁往往需要耗费很大的学习成本和时间成本 所以更改架构的时候要三思而后行 适合自己特别重要 由单体到多应用的演变 从我入职开始 公
  • 变压器哪些部位易造成渗油?

    变压器哪些部位易造成渗油 答 1 套管升高座电流互感器小绝缘子引出线的桩头处 所有套管引线桩头 法兰处 2 气体继电器及连接管道处 3 潜油泵接线盒 观察窗 连接法兰 连接螺丝紧固件 胶垫 4 冷却器散热管 5 全部连接通路碟阀 6 集中净
  • [前端] vue开发的项目用ajax发送请求携带cookie

    只需要在main js中写这三行代码即可 import axios from axios axios defaults withCredentials true 让ajax携带cookie Vue prototype axios axios
  • 初谈 ChatGPT

    引子 最近 小编发现互联网中的大 V 突然都在用 ChatGPT 做宣传 ChatGPT不会淘汰你 能驾驭ChatGPT的人会淘汰你 带领一小部分人先驾驭ChatGPT 确实 ChatGPT这个新生事物 如今被视为蒸汽机 电脑 iPhone
  • 众所周知,YouTube是个学习网站

    大数据文摘出品 来源 medium 编译 Hippo 国内有小破站 国外有YouTube 就像国内的b站一样 YouTube不仅是一个多媒体娱乐帝国 还是一个全面的学习平台 每月无需支付订阅费即可在YouTube上观看视频 所有供你观看和学
  • dev GridControl 按条件纵向合并单元格

    dev GridControl 按条件纵向合并单元格 gridView5 OptionsView AllowCellMerge true gridView5 CellMerge gridView5 CellMerge 自定义合并单元格监听事
  • npm安装报错 npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree

    项目场景 安装npm报错npm ERR code ERESOLVE npm ERR ERESOLVE unable to resolve dependency tree 原因分析 ERESOLVE与npm 7 x的问题 7 x有些处理检测比
  • 黑马JVM总结(十五)

    1 GC 相关参数 2 GC 分析1 下面通过一个案例去读懂垃圾回收的一个过程 学会读懂垃圾回收的日志 XX UseSerialGC 是一个垃圾回收器 jdk8下默认的垃圾回收器不是它 改为UseSerialGC它的幸存区的比例才不会调整
  • Jenkins系列(五)----Jenkins自动发布spring-boot应用

    一 测试环境 三台服务器来测试 一台SVN服务器 一台Jenkins服务器 一台应用服务器 如下 Jenkins服务器 192 168 84 100 SVN服务器 192 168 84 105 应用服务器 192 168 84 101 二
  • 第二篇:Spring Boot整合JPA、事务处理及AOP的使用

    一 Spring Boot整合JPA的具体步骤 注 Spring Boot整合JPA 源码下载 注 springboot学习资料汇总 参考 spring data jpa的使用 参考 Spring Cloud微服务实战 作者 参考 方志朋博