springboot数据库操作及事物管理操作例子

一.配置文件

application.yml

 1 spring:
 2   profiles:
 3     active: dev
 4   datasource:
 5     driver-class-name: com.mysql.jdbc.Driver
 6     url: jdbc:mysql://127.0.0.1:3306/dbgirl
 7     username: root
 8     password: 123456
 9   jpa:
10     hibernate:
11       ddl-auto: update
12     show-sql: true

application-dev.yml

1 server:
2   port: 8080
3 girl:
4   cupSize: B
5   age: 18
active: dev 这句active后面的dev代码加载的是application-dev.yml这个配置.
ddl-auto: update这句ddl-auto后面是的update代表的是更新这个表,如果的create的话,代表删掉原来的表重新建表,配置完这些之后就不需要我们自己建表,数据库会给我们建好相应的表.

二.代码

Girl.java

 1  */
 2 @Entity
 3 public class Girl {
 4
 5     @Id
 6     @GeneratedValue
 7     private Integer id;
 8
 9     @NotBlank(message = "这个字段必传")
10     private String cupSize;
11
12     @Min(value = 18, message = "未成年少女禁止入门")
13 //    @NotNull
14 //    @Max()
15 //    @Length()
16     private Integer age;
17
18     @NotNull(message = "金额必传")
19     private Double money;
20
21     public Girl() {
22     }
23
24     public Integer getId() {
25         return id;
26     }
27
28     public void setId(Integer id) {
29         this.id = id;
30     }
31
32     public String getCupSize() {
33         return cupSize;
34     }
35
36     public void setCupSize(String cupSize) {
37         this.cupSize = cupSize;
38     }
39
40     public Integer getAge() {
41         return age;
42     }
43
44     public void setAge(Integer age) {
45         this.age = age;
46     }
47
48     public Double getMoney() {
49         return money;
50     }
51
52     public void setMoney(Double money) {
53         this.money = money;
54     }
55 }
程序是的入口GirlApplication.java
1 @SpringBootApplication
2 public class GirlApplication {
3
4     public static void main(String[] args) {
5         SpringApplication.run(GirlApplication.class, args);
6     }
7 }
GirlProperties.java
 1 @Component
 2 @ConfigurationProperties(prefix = "girl")
 3 public class GirlProperties {
 4
 5     private String cupSize;
 6
 7     private Integer age;
 8
 9     public String getCupSize() {
10         return cupSize;
11     }
12
13     public void setCupSize(String cupSize) {
14         this.cupSize = cupSize;
15     }
16
17     public Integer getAge() {
18         return age;
19     }
20
21     public void setAge(Integer age) {
22         this.age = age;
23     }
24 }
GirlController.java
 1 @RestController
 2 public class GirlController {
 3
 4     @Autowired
 5     private GirlRepository girlRepository;
 6
 7     @Autowired
 8     private GirlService girlService;
 9
10     /**
11      * 查询所有女生列表
12      * @return
13      */
14     @GetMapping(value = "/girls")
15     public List<Girl> girlList() {
16         return girlRepository.findAll();
17     }
18
19     /**
20      * 添加一个女生     *
21      * @return
22      */
23     @PostMapping(value = "/girls")
24     public Girl girlAdd(@Valid Girl girl, BindingResult bindingResult) {
25         if (bindingResult.hasErrors()) {
26             System.out.println(bindingResult.getFieldError().getDefaultMessage());
27             return null;
28         }
29
30         girl.setCupSize(girl.getCupSize());
31         girl.setAge(girl.getAge());
32
33         return girlRepository.save(girl);
34     }
35
36     //查询一个女生
37     @GetMapping(value = "/girls/{id}")
38     public Girl girlFindOne(@PathVariable("id") Integer id) {
39         return girlRepository.findOne(id);
40     }
41
42     //更新
43     @PutMapping(value = "/girls/{id}")
44     public Girl girlUpdate(@PathVariable("id") Integer id,
45                            @RequestParam("cupSize") String cupSize,
46                            @RequestParam("age") Integer age) {
47         Girl girl = new Girl();
48         girl.setId(id);
49         girl.setCupSize(cupSize);
50         girl.setAge(age);
51
52         return girlRepository.save(girl);
53     }
54
55     //删除
56     @DeleteMapping(value = "/girls/{id}")
57     public void girlDelete(@PathVariable("id") Integer id) {
58         girlRepository.delete(id);
59     }
60
61     //通过年龄查询女生列表
62     @GetMapping(value = "/girls/age/{age}")
63     public List<Girl> girlListByAge(@PathVariable("age") Integer age) {
64         return girlRepository.findByAge(age);
65     }
66
67     @PostMapping(value = "/girls/two")
68     public void girlTwo() {
69         girlService.insertTwo();
70     }
71 }
最上面添加女生,这个是通过传入Gril这个参数,通过点出get方法来获取对应的属性值,推荐这个写法.
GirlRepository .java
1 public interface GirlRepository extends JpaRepository<Girl, Integer> {
2
3     //通过年龄来查询
4     public List<Girl> findByAge(Integer age);
5 }
GirlService.java
 1 @Service
 2 public class GirlService {
 3
 4     @Autowired
 5     private GirlRepository girlRepository;
 6
 7     @Transactional
 8     public void insertTwo() {
 9         Girl girlA = new Girl();
10         girlA.setCupSize("A");
11         girlA.setAge(18);
12         girlRepository.save(girlA);
13
14
15         Girl girlB = new Girl();
16         girlB.setCupSize("BBBB");
17         girlB.setAge(19);
18         girlRepository.save(girlB);
19     }
20 }

GirlService.java这个类是用来测试事物管理.
在这个类的某个方法上加上@Transactional这个注解说明这个方法就已经交由springboot事物管理.有事物管理和没有事物管理的区别是:
有事物管理这个方法内有一个操作失败,如这个类的插入操作,有一个插入失败,这个方法内的操作全部失败.
如果没有事物就只有失败的那一个操作失败.
一般用于同时操作多条数据,只有查询的时候不加事物.

				
时间: 2024-10-05 12:53:06

springboot数据库操作及事物管理操作例子的相关文章

使用springboot+jta+atomikos&#160;分布式事物管理

当项目在连接多个数据库时可能会发生事务问题,即一个库的事务不可能去操作另一个数据库的事务,这时就需要使用atomikos对数据库的事务进行统一的管理 第一步添加atomikos的依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jta-atomikos</artifactId> </dependency>

第十一章 SpringBoot事物管理器

一.springboot整合事物管理 springboot默认集成事物,只主要在方法上加上@Transactional即可 二.SpringBoot分布式事物管理 使用springboot+jta+atomikos 分布式事物管理 1.pom文件 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-parent</artifactId> <

spring 事物管理

1 在spring中支持编程式事物和声明式事务管理,通常使用声明式事物管理,声明式的事物管理是基于aop机制实现的使用很方便. 2 spring支持单一数据库资源的事物管理和跨越多个数据库资源的事物管理既JTA全局事物. 3 在spring中提供了多个事物管理类,常用的是;DataSourceTransactionManager,HibernateTransactionManager和JtaTransactionManager. DataSourceTransactionManager :数据源

SpringBoot使用WebFlux响应式编程操作数据库

这一篇文章介绍SpringBoot使用WebFlux响应式编程操作MongoDb数据库. 前言 在之前一篇简单介绍了WebFlux响应式编程的操作,我们在来看一下下图,可以看到,在目前的Spring WebFlux还没有支持类似Mysql这样的关系型数据库,所以本文以MongoDb数据库为例. SpringBoot使用WebFlux响应式编程操作数据库 接下来介绍SpringBoot使用WebFlux响应式编程操作MongoDb数据库. 新建项目 pom文件 新建项目,在项目中加入webflux

MySQL数据库(7)_用户操作与权限管理、视图、存储过程、触发器、基本函数

用户操作与权限管理 MySQL用户操作 创建用户 方法一: CREATE USER语句创建 CREATE USER "用户名"@"IP地址" IDENTIFIED BY "密码"; 方法二: INSERT语句创建 INSERT INTO mysql.user(user,host, password,ssl_cipher,x509_issuer,x509_subject) VALUES('用户名','IP地址',password('密码'),'',

(四)SQL入门 数据库的操作与事务管理

数据库的操作,有三个最基本的语句,insert插入,update修改,delete删除. 不同的数据库厂商的实现可能不同,所以就不说具体的语法怎么写的了.说语法也没有意义,到处都可以复制粘贴,记得听某个视频,里面说,当程序员很简单,就是Ctrl+C,Ctrl+V. 知道了数据库操作的三个基本操作,下面说说一个新的名词.事务. 什么是事务呢?之前我在绵阳去新的地方上班的时候,那个时候,那个时候,我还不知道什么是事务,现在上班的地方有个同事毕业半年多了,已经转正了,貌似也不知道.这个名称呢,听上去会

Android学习--------实现增删改查数据库操作以及实现类似微信好友对话管理操作

最近的一个实验用到东西挺多,特地总结一下. 要求功能: 1.第一个页面添加歌曲名和歌手,跳到第二个页面列表显示所有记录,使用sqlite数据库 2.对于第二个页面显示的信息可以进行删除和修改操作,并自动刷新 最后我做的效果: 长按列表项弹出单个管理的菜单,像微信好友对话管理一样. 删除时可以直接删除这一条并在列表中直接显示,更新时弹出对话框更新内容提交后在列表中重新显示. 做此例遇到的困难: 1.菜单获取上下文 2.获取对话框中的内容 3.对话框按钮添加监听事件-----注意包不要导错:impo

如何处理Spring、Ibatis结合MySQL数据库使用时的事务操作

Ibatis是MyBatis的前身,它是一个开源的持久层框架.它的核心是SqlMap--将实体Bean跟关系数据库进行映射,将业务代码和SQL语句的书写进行分开.Ibatis是"半自动化"的ORM持久层框架.这里的"半自动化"是相对Hibernate等提供了全面的数据库封装机制的"全自动化"ORM实现而言的,"全自动"ORM实现了POJO与数据库表字段之间的映射并且实现了SQL的自动生成和执行.而Ibatis的着力点,则在于P

如何处理Ibatis结合MySQL数据库使用时的事务操作

Ibatis是MyBatis的前身,它是一个开源的持久层框架.它的核心是SqlMap--将实体Bean跟关系数据库进行映射,将业务代码和SQL语句的书写进行分开.Ibatis是"半自动化"的ORM持久层框架.这里的"半自动化"是相对Hibernate等提供了全面的数据库封装机制的"全自动化"ORM实现而言的,"全自动"ORM实现了POJO与数据库表字段之间的映射并且实现了SQL的自动生成和执行.而Ibatis的着力点,则在于P