@Transactional事务的简单使用

@Transactional只有经过经过 Spring 的代理类才能生效,调用类中的方法,事务不会生效,@EnableTransactionManagement不加上事务也可以生效

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CREATE TABLE IF NOT EXISTS telephone(
   id INT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
   ocm_cust_id VARCHAR(100) NOT NULL,
   is_default VARCHAR(40) NOT NULL,
   telephone_number VARCHAR(40) NOT NULL
)ENGINE=INNODB DEFAULT CHARSET=utf8;
 
SELECT *  FROM  telephone  WHERE ocm_cust_id='ocm123456'  AND  is_default='Y'
 
INSERT INTO telephone(ocm_cust_id,is_default,telephone_number)
VALUE
('ocm123456','Y','13301455191'),
('ocm123456','N','18852782003')
 
UPDATE telephone SET is_default='Y'
WHERE ocm_cust_id='ocm123456' AND telephone_number='13301455191'

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.1.RELEASE</version>
<!--     <version>2.3.4.RELEASE</version>-->
        <relativePath/>
    </parent>
    <groupId>com.java</groupId>
    <artifactId>pingan</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>pingan</name>
    <description>Demo project for Spring Boot</description>
 
    <properties>
        <java.version>1.8</java.version>
        <skipTests>true</skipTests>
    </properties>
 
    <dependencies>
        <!--移除tomcat容器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!--加入undertow-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-undertow</artifactId>
        </dependency>
        <!--实体类字段校验依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
        <!--引入thymeleaf依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
            <version>2.2.2.RELEASE</version>
        </dependency>
        <!--springboot整合mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.2</version>
        </dependency>
        <!-- mybatis pagehelper 分页插件 -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.10</version>
        </dependency>
        <!--springboot整合mongodb-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongo-java-driver</artifactId>
            <version>3.0.4</version>
        </dependency>
        <!--引入shiro依赖-->
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-core</artifactId>
            <version>1.4.0</version>
        </dependency>
        <!--添加fastjson依赖-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <!--<version>1.2.7</version>-->
            <version>1.2.70</version>
        </dependency>
        <!--mysql驱动5.6.17-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>
 
        <!--腾讯云短信01-->
        <!-- https://mvnrepository.com/artifact/com.github.qcloudsms/qcloudsms -->
        <dependency>
            <groupId>com.github.qcloudsms</groupId>
            <artifactId>qcloudsms</artifactId>
            <version>1.0.6</version>
        </dependency>
        <!--阿里云短信接口-->
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.0.6</version> <!-- 注:如提示报错,先升级基础包版,无法解决可联系技术支持 -->
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
            <version>1.1.0</version>
        </dependency>
        <!--榛子云-->
        <dependency>
            <groupId>com.zhenzikj</groupId>
            <artifactId>zhenzisms</artifactId>
            <version>1.0.2</version>
        </dependency>
        <!-- 热部署模块 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional> <!-- 这个需要为 true 热部署才有效 -->
        </dependency>
        <!--java爬虫需要的jar包-->
        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.12.2</version>
        </dependency>
        <!--判断空的用法  -->
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>
        <!--邮件发送相关依赖三个-->
        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>1.9.4</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.4.7</version>
        </dependency>
        <!--Spring Session使得基于Redis的Session共享-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
        </dependency>
 
        <!--lombok依赖-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.16</version>
        </dependency>
        <!--拼音的依赖包-->
        <dependency>
            <groupId>com.belerweb</groupId>
            <artifactId>pinyin4j</artifactId>
            <version>2.5.1</version>
        </dependency>
        <!--springboot整合aop-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
 
        <!--springboot整合邮件发送-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
          <!--ThreadFactoryBuilder的依赖包-->
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>30.1-jre</version>
        </dependency>
 
          <!--引入jmockit依赖-->
        <dependency>
            <groupId>org.jmockit</groupId>
            <artifactId>jmockit</artifactId>
            <version>1.38</version>
        </dependency>
         <!--引入junit单元测试依赖-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
 
        <!--引入poi依赖-->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-scratchpad</artifactId>
            <version>3.17</version>
        </dependency>
 
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.17</version>
        </dependency>
        <!--引入druid依赖-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.10</version>
        </dependency>
    </dependencies>
 
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
        <finalName>pingan</finalName>
    </build>
 
</project>

  数据库使用的是5.6.17版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.java.bean;
 
import lombok.Data;
 
/**
 * @author yourheart
 * @Description
 * @create 2022-05-10 23:39
 */
@Data
public class Telephone {
 
    private Integer id;
 
    private String ocmCustId;
 
    private String isDefault;
 
    private String telephoneNumber;
}

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package com.java.mapper.zero;
 
import com.java.bean.Telephone;
 
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
 
public interface TelephoneMapper {
 
    /**
     * 修改默认手机号标识
     * @param telephone
     * @return
     */
    @Update("UPDATE telephone SET is_default=#{isDefault} WHERE ocm_cust_id=#{ocmCustId} AND telephone_number=#{telephoneNumber}")
    int updateTelphone(Telephone telephone);
 
    /**
     * 查询以前的默认手机号信息
     * @param telephone
     * @return
     */
    @Select("SELECT *  FROM  telephone  WHERE ocm_cust_id=#{ocmCustId}  AND  is_default=#{isDefault}")
    Telephone getTelphoneDto(Telephone telephone);
}

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com.java;
 
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
import org.springframework.transaction.annotation.EnableTransactionManagement;
 
@SpringBootApplication
//开启定时任务支持
@EnableAsync()
//设置redis共享
@EnableRedisHttpSession
//开启事务支持
@EnableTransactionManagement
public class PinganApplication {
 
 
    public static void main(String[] args) {
        SpringApplication.run(PinganApplication.class, args);
    }
 
}
1
 
1
2
3
4
5
6
7
8
package com.java.service;
 
import com.java.bean.Telephone;
 
public interface TelphoneService {
 
    void  updateTelephone(Telephone telephone);
}

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package com.java.service.impl;
 
import com.java.bean.Telephone;
import com.java.service.TelphoneService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
 
import javax.annotation.Resource;
 
/**
 * @author yourheart
 * @Description
 * @create 2022-05-11 0:27
 */
@Service("TelphoneServiceImpl")
@Slf4j
public class TelphoneServiceImpl implements TelphoneService {
 
  @Resource(name = "UpdateTelphoneServiceImpl")
   private TelphoneService telphoneService;
 
 
    @Override
    public void updateTelephone(Telephone telephone) {
        telphoneService.updateTelephone(telephone);
 
 
    }
 
}

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package com.java.service.impl;
 
import com.java.bean.Telephone;
import com.java.mapper.zero.TelephoneMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
/**
 * @author yourheart
 * @Description
 * @create 2022-05-11 0:36
 */
@Service("UpdateTelphoneServiceImpl")
@Slf4j
public class UpdateTelphoneServiceImpl extends TelphoneServiceImpl {
 
    @Autowired
    private TelephoneMapper telephoneMapper;
 
    @Transactional
    @Override
    public void updateTelephone(Telephone telephone) {
        //查询出以前的默认手机号信息
        Telephone telphoneDto = telephoneMapper.getTelphoneDto(telephone);
        Telephone one=new Telephone();
        one.setOcmCustId(telphoneDto.getOcmCustId());
        one.setTelephoneNumber(telphoneDto.getTelephoneNumber());
        one.setIsDefault("N");
        log.info("one:{}",one);
 
        //修改以前默认的手机号标识为N
        telephoneMapper.updateTelphone(one);
 
        //修改当前接受的手机号为默认手机号
        Telephone two=new Telephone();
        two.setOcmCustId(telephone.getOcmCustId());
        two.setTelephoneNumber(telephone.getTelephoneNumber());
        log.info("two:{}",two);
        telephoneMapper.updateTelphone(two);
    }
}

  单元测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package com.java;
 
 
 
import com.java.bean.Telephone;
import com.java.service.TelphoneService;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
 
import javax.annotation.Resource;
 
 
@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class PinganApplicationTests{
 
 
    @Resource(name = "TelphoneServiceImpl")
    private TelphoneService telphoneService;
 
 
 
 
    @Test
    public void moTest(){
 
 
        String ocmCustId="";
        String telephoneNumber="";
        String isDefault="";
 
        Telephone telephone=new Telephone();
        telephone.setOcmCustId(ocmCustId);
        telephone.setTelephoneNumber(telephoneNumber);
        telephone.setIsDefault(isDefault);
        telphoneService.updateTelephone(telephone);
 
 
    }
 
}

  

posted @   不忘初心2021  阅读(129)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示