问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

spring怎么进行的事务管理,求指导?

发布网友 发布时间:2022-05-02 08:49

我来回答

3个回答

懂视网 时间:2022-05-02 13:10

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事物管理.有事物管理和没有事物管理的区别是:
有事物管理这个方法内有一个操作失败,如这个类的插入操作,有一个插入失败,这个方法内的操作全部失败.
如果没有事物就只有失败的那一个操作失败.
一般用于同时操作多条数据,只有查询的时候不加事物.



 

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

标签:文件   drive   有一个   error   自己   ups   name   add   java   

热心网友 时间:2022-05-02 10:18

Spring+Hibernate的实质:
就是把Hibernate用到的数据源Datasource,Hibernate的SessionFactory实例,事务管理器HibernateTransactionManager,都交给Spring管理。

那么再没整合之前Hibernate是如何实现事务管理的呢?
通过ServletFilter实现数据库事务的管理,这样就避免了在数据库操作中每次都要进行数据库事务处理。

一.事务的4个特性:
原子性:一个事务中所有对数据库的操作是一个不可分割的操作序列,要么全做,要么全部做。
一致性:数据不会因为事务的执行而遭到破坏。
隔离性:一个事务的执行,不受其他事务(进程)的干扰。既并发执行的个事务之间互不干扰。
持久性:一个事务一旦提交,它对数据库的改变将是永久的。

二.事务的实现方式:
实现方式共有两种:编码方式;声明式事务管理方式。

基于AOP技术实现的声明式事务管理,实质就是:在方法执行前后进行拦截,然后在目标方法开始之前创建并加入事务,执行完目标方法后根据执行情况提交或回滚事务。

声明式事务管理又有两种方式:基于XML配置文件的方式;另一个是在业务方法上进行@Transactional注解,将事务规则应用到业务逻辑中。

三.创建事务的时机:

是否需要创建事务,是由事务传播行为控制的。读数据不需要或只为其指定只读事务,而数据的插入,修改,删除就需要事务管理了。

一种常见的事务管理配置:事务*TransactionInterceptor和事务自动代理BeanNameAutoProxyCreator相结合的方式

<!--定义Hibernate的事务管理器HibernateTransactionManager -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<!-- 依赖注入上面定义的sessionFactory -->
<property name="sessionFactory" ref="sessionFactory"/>
</bean>

<!--定义Spring的事务*TransactionInterceptor -->
<bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
<!-- 依赖注入上面定义的事务管理器transactionManager -->
<property name="transactionManager" ref="transactionManager"/>
<!-- 定义需要进行事务拦截的方法及所采用的事务控制类型 -->
<property name="transactionAttributes">
<props>
<!-- 以browse、list、load、get及is开头的所有方法采用只读型事务控制类型 -->
<prop key="browse*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="list*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="is*">PROPAGATION_REQUIRED,readOnly</prop>
<!-- 所有方法均进行事务控制,如果当前没有事务,则新建一个事务 -->
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>

<!-- 定义BeanNameAutoProxyCreatorf进行Spring的事务处理-->
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<!-- 针对指定的bean自动生成业务代理 -->
<property name="beanNames">
<list>
<value>adminService</value>
<value>columnsService</value>
<value>newsService</value>
<value>crawlService</value>
<value>memberLevelService</value>
<value>memberService</value>
<value>categoryService</value>
<value>merService</value>
<value>cartService</value>
<value>ordersService</value>
<value>trafficService</value>
</list>
</property>
<!-- 这个属性为true时,表示被代理的是目标类本身而不是目标类的接口 -->
<property name="proxyTargetClass">
<value>true</value>
</property>
<!-- 依赖注入上面定义的事务*transactionInterceptor -->
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
</list>
</property>
</bean>

热心网友 时间:2022-05-02 11:36

Spring+Hibernate的实质:
就是把Hibernate用到的数据源Datasource,Hibernate的SessionFactory实例,事务管理器HibernateTransactionManager,都交给Spring管理。
那么再没整合之前Hibernate是如何实现事务管理的呢?
瑭锦TANJURD解释通过ServletFilter实现数据库事务的管理,这样就避免了在数据库操作中每次都要进行数据库事务处理。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
传奇世界退师和出师同样能得到声望吗 声望可以转让吗? 传奇世界 声望怎么弄,最快弄声望的方法? 传奇世界 声望问题徒弟问题 天龙八部2中的哪个门派最牛逼啊 天龙八部手游哪个门派厉害 天龙八部手游门派排名 天龙八部里,三大最强门派,第一实至名归! miui13怎么开启dc调光 小米14怎么样小米14有没有DC调光功能【详解】 小米14dc调光是什么意思 个人贷款需要担保人吗 个人办理住房贷款,如果找担保人,需要满足哪些条件 capitalize在Python中含义 是首字母大写么 问问大家python代码这一段是什么意思,谢谢啦! python 3.1 从string模块导入capitalize出错 python中如何将一个英文句子中的每个单词的首字母由小写转换为大写 核酸扩增荧光定量检测报告! 请专家帮我看下报告 猫咪荧光检测和核酸检测的区别 佣金代扣代缴企业所得税 向境外企业支付技术服务费 增值税税率是多少 对外付汇需要缴纳哪些税金? 所有的对外支付的投资利润都需要代扣代缴增值税和所得税么? 服务贸易对外支出应纳所得税率是多少 企业向境外个人支付特许权使用费所得税税率是多少 对外支付代扣代缴所得税如何计算? 武汉全高日用品有限公司怎么样? 武汉市太古壹玖壹捌室内设计工程有限公司怎么样? 武汉盛材煊自动化设备有限公司怎么样? 武汉和晟顺筑建设有限公司怎么样? 武汉思达普智能停车设备制造有限公司怎么样? 还没被起诉前转移财产犯法吗 起诉前转移财产犯罪吗? 在没有被起诉前把财产转移,这个法律认可吗 起个好听又有含义的笔名 未立案前算转移财产吗 在没有被起诉前把财产转移这个法律认可么 起诉期间转移财产合法吗 好听霸气的笔名? 没有起诉前, 将个人财产转移 , 有效吗 民事赔偿被起诉前如何转移财产才不犯法 求笔名!清新霸气又好听的!希望大家能够帮帮忙! 请问在广东省茂名市考摩托车牌要多少钱和怎么考法?考什么的? 有什么好听的笔名,必须原创,注名出处 求几个好听有气势的笔名, 如何报考摩托车驾照 生源地助学贷款提额什么意思 欠钱不还起诉前把股东,资产转移他人属于犯法吗? 生源地信用助学贷款金额可以超过学费和住宿费用的总和吗? 茂名 考摩托车驾驶证的具体流程是怎样的,在哪里报名,报名要带上什么, 交通事故未被起诉前转移财产