版权声明:本文为博主原创文章,未经博主允许不得转载。 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官网
搭建项目所需环境:
- ntelliJ IDEA 2018.1.3 x64
- apache-maven-3.5.0
- 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);
}
}