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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_36279318/article/details/81837789

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

注:Spring Boot整合JPA 源码下载
注:springboot学习资料汇总
参考:spring data jpa的使用
参考:《Spring Cloud微服务实战》作者
参考:方志朋Spring Boot 专栏
参考:Spring Boot官网
搭建项目所需环境:
  1. ntelliJ 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);
    }
}

(三)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);

    }

}

猜你喜欢

转载自blog.csdn.net/weixin_36279318/article/details/81837789
今日推荐