Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
KnowledgePlanet
road-map
xfg-dev-tech-mybatis
提交
5890fe98
xfg-dev-tech-mybatis
项目概览
KnowledgePlanet
/
road-map
/
xfg-dev-tech-mybatis
通知
309
Star
22
Fork
19
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
xfg-dev-tech-mybatis
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
“19d10b4ecb57448ef1a1b61e9fc495c4b1fd2fc8”上不存在“...app/src/git@gitcode.net:weixin_41840029/PaddleOCR.git”
提交
5890fe98
编写于
7月 15, 2023
作者:
小傅哥
⛹
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat: 注解事务和编程事务
上级
1797ef8a
变更
10
隐藏空白更改
内联
并排
Showing
10 changed file
with
119 addition
and
3 deletion
+119
-3
xfg-dev-tech-app/src/main/java/cn/bugstack/xfg/dev/tech/config/PluginAutoConfiguration.java
...bugstack/xfg/dev/tech/config/PluginAutoConfiguration.java
+1
-1
xfg-dev-tech-app/src/main/java/cn/bugstack/xfg/dev/tech/config/TransactionManagerAutoConfiguration.java
.../dev/tech/config/TransactionManagerAutoConfiguration.java
+26
-0
xfg-dev-tech-app/src/main/resources/mybatis/mapper/employee_salary_mapper.xml
.../main/resources/mybatis/mapper/employee_salary_mapper.xml
+1
-1
xfg-dev-tech-app/src/test/java/cn/bugstack/xfg/dev/tech/test/domain/IEmployeeServiceTest.java
...gstack/xfg/dev/tech/test/domain/IEmployeeServiceTest.java
+15
-0
xfg-dev-tech-domain/src/main/java/cn/bugstack/xfg/dev/tech/domain/employee/model/entity/EmployeeInfoEntity.java
...tech/domain/employee/model/entity/EmployeeInfoEntity.java
+2
-0
xfg-dev-tech-domain/src/main/java/cn/bugstack/xfg/dev/tech/domain/employee/repository/IEmployeeRepository.java
.../tech/domain/employee/repository/IEmployeeRepository.java
+2
-0
xfg-dev-tech-domain/src/main/java/cn/bugstack/xfg/dev/tech/domain/employee/service/EmployeeService.java
...xfg/dev/tech/domain/employee/service/EmployeeService.java
+5
-0
xfg-dev-tech-domain/src/main/java/cn/bugstack/xfg/dev/tech/domain/employee/service/IEmployeeService.java
...fg/dev/tech/domain/employee/service/IEmployeeService.java
+2
-0
xfg-dev-tech-infrastructure/src/main/java/cn/bugstack/xfg/dev/tech/infrastructure/repository/EmployeeRepository.java
...ev/tech/infrastructure/repository/EmployeeRepository.java
+42
-0
xfg-dev-tech-infrastructure/src/main/java/cn/bugstack/xfg/dev/tech/infrastructure/repository/SalaryAdjustRepository.java
...ech/infrastructure/repository/SalaryAdjustRepository.java
+23
-1
未找到文件。
xfg-dev-tech-app/src/main/java/cn/bugstack/xfg/dev/tech/config/PluginAutoConfig.java
→
xfg-dev-tech-app/src/main/java/cn/bugstack/xfg/dev/tech/config/PluginAutoConfig
uration
.java
浏览文件 @
5890fe98
...
@@ -6,7 +6,7 @@ import org.springframework.context.annotation.Bean;
...
@@ -6,7 +6,7 @@ import org.springframework.context.annotation.Bean;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.Configuration
;
@Configuration
@Configuration
public
class
PluginAutoConfig
{
public
class
PluginAutoConfig
uration
{
@Bean
@Bean
public
Interceptor
plugin
()
{
public
Interceptor
plugin
()
{
...
...
xfg-dev-tech-app/src/main/java/cn/bugstack/xfg/dev/tech/config/TransactionManagerAutoConfiguration.java
0 → 100644
浏览文件 @
5890fe98
package
cn.bugstack.xfg.dev.tech.config
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.jdbc.datasource.DataSourceTransactionManager
;
import
org.springframework.transaction.PlatformTransactionManager
;
import
org.springframework.transaction.support.TransactionTemplate
;
import
javax.sql.DataSource
;
@Configuration
public
class
TransactionManagerAutoConfiguration
{
@Bean
public
PlatformTransactionManager
transactionManager
(
DataSource
dataSource
)
{
return
new
DataSourceTransactionManager
(
dataSource
);
}
@Bean
public
TransactionTemplate
transactionTemplate
(
PlatformTransactionManager
transactionManager
)
{
TransactionTemplate
transactionTemplate
=
new
TransactionTemplate
(
transactionManager
);
transactionTemplate
.
setPropagationBehaviorName
(
"PROPAGATION_REQUIRED"
);
return
transactionTemplate
;
}
}
xfg-dev-tech-app/src/main/resources/mybatis/mapper/employee_salary_mapper.xml
浏览文件 @
5890fe98
...
@@ -13,7 +13,7 @@
...
@@ -13,7 +13,7 @@
</resultMap>
</resultMap>
<insert
id=
"insert"
parameterType=
"cn.bugstack.xfg.dev.tech.infrastructure.po.EmployeeSalaryPO"
>
<insert
id=
"insert"
parameterType=
"cn.bugstack.xfg.dev.tech.infrastructure.po.EmployeeSalaryPO"
>
INSERT INTO employee_salary(employee, salary_total_amount, salary_merit_amount, salary_base_amount,
INSERT INTO employee_salary(employee
_number
, salary_total_amount, salary_merit_amount, salary_base_amount,
create_time, update_time)
create_time, update_time)
VALUES(#{employeeNumber}, #{salaryTotalAmount}, #{salaryMeritAmount}, #{salaryBaseAmount}, now(), now())
VALUES(#{employeeNumber}, #{salaryTotalAmount}, #{salaryMeritAmount}, #{salaryBaseAmount}, now(), now())
</insert>
</insert>
...
...
xfg-dev-tech-app/src/test/java/cn/bugstack/xfg/dev/tech/test/domain/IEmployeeServiceTest.java
浏览文件 @
5890fe98
...
@@ -2,6 +2,7 @@ package cn.bugstack.xfg.dev.tech.test.domain;
...
@@ -2,6 +2,7 @@ package cn.bugstack.xfg.dev.tech.test.domain;
import
cn.bugstack.xfg.dev.tech.domain.employee.model.entity.EmployeeInfoEntity
;
import
cn.bugstack.xfg.dev.tech.domain.employee.model.entity.EmployeeInfoEntity
;
import
cn.bugstack.xfg.dev.tech.domain.employee.service.IEmployeeService
;
import
cn.bugstack.xfg.dev.tech.domain.employee.service.IEmployeeService
;
import
cn.bugstack.xfg.dev.tech.infrastructure.po.EmployeePO
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSON
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.junit.Test
;
import
org.junit.Test
;
...
@@ -10,6 +11,7 @@ import org.springframework.boot.test.context.SpringBootTest;
...
@@ -10,6 +11,7 @@ import org.springframework.boot.test.context.SpringBootTest;
import
org.springframework.test.context.junit4.SpringRunner
;
import
org.springframework.test.context.junit4.SpringRunner
;
import
javax.annotation.Resource
;
import
javax.annotation.Resource
;
import
java.math.BigDecimal
;
@Slf4j
@Slf4j
@RunWith
(
SpringRunner
.
class
)
@RunWith
(
SpringRunner
.
class
)
...
@@ -19,6 +21,19 @@ public class IEmployeeServiceTest {
...
@@ -19,6 +21,19 @@ public class IEmployeeServiceTest {
@Resource
@Resource
private
IEmployeeService
employeeService
;
private
IEmployeeService
employeeService
;
@Test
public
void
test_insertEmployInfo
()
{
EmployeeInfoEntity
employeeInfo
=
new
EmployeeInfoEntity
();
employeeInfo
.
setEmployeeNumber
(
"10000022"
);
employeeInfo
.
setEmployeeName
(
"小卡拉米"
);
employeeInfo
.
setEmployeeLevel
(
"T1"
);
employeeInfo
.
setEmployeeTitle
(
"实习工程师"
);
employeeInfo
.
setSalaryTotalAmount
(
new
BigDecimal
(
"100"
));
employeeInfo
.
setSalaryMeritAmount
(
new
BigDecimal
(
"10"
));
employeeInfo
.
setSalaryBaseAmount
(
new
BigDecimal
(
"90"
));
employeeService
.
insertEmployInfo
(
employeeInfo
);
}
@Test
@Test
public
void
test_queryEmployInfo
()
{
public
void
test_queryEmployInfo
()
{
EmployeeInfoEntity
employeeInfoEntity
=
employeeService
.
queryEmployInfo
(
"10000001"
);
EmployeeInfoEntity
employeeInfoEntity
=
employeeService
.
queryEmployInfo
(
"10000001"
);
...
...
xfg-dev-tech-domain/src/main/java/cn/bugstack/xfg/dev/tech/domain/employee/model/entity/EmployeeInfoEntity.java
浏览文件 @
5890fe98
...
@@ -13,6 +13,8 @@ import java.math.BigDecimal;
...
@@ -13,6 +13,8 @@ import java.math.BigDecimal;
@NoArgsConstructor
@NoArgsConstructor
public
class
EmployeeInfoEntity
{
public
class
EmployeeInfoEntity
{
/** 雇员编号 */
private
String
employeeNumber
;
/** 雇员姓名 */
/** 雇员姓名 */
private
String
employeeName
;
private
String
employeeName
;
/** 雇员级别 */
/** 雇员级别 */
...
...
xfg-dev-tech-domain/src/main/java/cn/bugstack/xfg/dev/tech/domain/employee/repository/IEmployeeRepository.java
浏览文件 @
5890fe98
...
@@ -4,6 +4,8 @@ import cn.bugstack.xfg.dev.tech.domain.employee.model.entity.EmployeeInfoEntity;
...
@@ -4,6 +4,8 @@ import cn.bugstack.xfg.dev.tech.domain.employee.model.entity.EmployeeInfoEntity;
public
interface
IEmployeeRepository
{
public
interface
IEmployeeRepository
{
void
insertEmployeeInfo
(
EmployeeInfoEntity
employeeInfoEntity
);
EmployeeInfoEntity
queryEmployInfo
(
String
employNumber
);
EmployeeInfoEntity
queryEmployInfo
(
String
employNumber
);
}
}
xfg-dev-tech-domain/src/main/java/cn/bugstack/xfg/dev/tech/domain/employee/service/EmployeeService.java
浏览文件 @
5890fe98
...
@@ -12,6 +12,11 @@ public class EmployeeService implements IEmployeeService{
...
@@ -12,6 +12,11 @@ public class EmployeeService implements IEmployeeService{
@Resource
@Resource
private
IEmployeeRepository
employeeRepository
;
private
IEmployeeRepository
employeeRepository
;
@Override
public
void
insertEmployInfo
(
EmployeeInfoEntity
employeeInfoEntity
)
{
employeeRepository
.
insertEmployeeInfo
(
employeeInfoEntity
);
}
@Override
@Override
public
EmployeeInfoEntity
queryEmployInfo
(
String
employNumber
)
{
public
EmployeeInfoEntity
queryEmployInfo
(
String
employNumber
)
{
return
employeeRepository
.
queryEmployInfo
(
employNumber
);
return
employeeRepository
.
queryEmployInfo
(
employNumber
);
...
...
xfg-dev-tech-domain/src/main/java/cn/bugstack/xfg/dev/tech/domain/employee/service/IEmployeeService.java
浏览文件 @
5890fe98
...
@@ -4,6 +4,8 @@ import cn.bugstack.xfg.dev.tech.domain.employee.model.entity.EmployeeInfoEntity;
...
@@ -4,6 +4,8 @@ import cn.bugstack.xfg.dev.tech.domain.employee.model.entity.EmployeeInfoEntity;
public
interface
IEmployeeService
{
public
interface
IEmployeeService
{
void
insertEmployInfo
(
EmployeeInfoEntity
employeeInfoEntity
);
EmployeeInfoEntity
queryEmployInfo
(
String
employNumber
);
EmployeeInfoEntity
queryEmployInfo
(
String
employNumber
);
}
}
xfg-dev-tech-infrastructure/src/main/java/cn/bugstack/xfg/dev/tech/infrastructure/repository/EmployeeRepository.java
浏览文件 @
5890fe98
...
@@ -7,7 +7,14 @@ import cn.bugstack.xfg.dev.tech.infrastructure.dao.IEmployeeSalaryAdjustDAO;
...
@@ -7,7 +7,14 @@ import cn.bugstack.xfg.dev.tech.infrastructure.dao.IEmployeeSalaryAdjustDAO;
import
cn.bugstack.xfg.dev.tech.infrastructure.dao.IEmployeeSalaryDAO
;
import
cn.bugstack.xfg.dev.tech.infrastructure.dao.IEmployeeSalaryDAO
;
import
cn.bugstack.xfg.dev.tech.infrastructure.po.EmployeePO
;
import
cn.bugstack.xfg.dev.tech.infrastructure.po.EmployeePO
;
import
cn.bugstack.xfg.dev.tech.infrastructure.po.EmployeeSalaryPO
;
import
cn.bugstack.xfg.dev.tech.infrastructure.po.EmployeeSalaryPO
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Repository
;
import
org.springframework.stereotype.Repository
;
import
org.springframework.transaction.PlatformTransactionManager
;
import
org.springframework.transaction.TransactionDefinition
;
import
org.springframework.transaction.TransactionStatus
;
import
org.springframework.transaction.support.TransactionCallback
;
import
org.springframework.transaction.support.TransactionCallbackWithoutResult
;
import
org.springframework.transaction.support.TransactionTemplate
;
import
javax.annotation.Resource
;
import
javax.annotation.Resource
;
...
@@ -19,6 +26,40 @@ public class EmployeeRepository implements IEmployeeRepository {
...
@@ -19,6 +26,40 @@ public class EmployeeRepository implements IEmployeeRepository {
@Resource
@Resource
private
IEmployeeSalaryDAO
employeeSalaryDAO
;
private
IEmployeeSalaryDAO
employeeSalaryDAO
;
@Resource
private
TransactionTemplate
transactionTemplate
;
@Override
public
void
insertEmployeeInfo
(
EmployeeInfoEntity
employeeInfoEntity
)
{
transactionTemplate
.
execute
(
new
TransactionCallbackWithoutResult
()
{
@Override
protected
void
doInTransactionWithoutResult
(
TransactionStatus
status
)
{
try
{
EmployeePO
employeePO
=
EmployeePO
.
builder
()
.
employeeNumber
(
employeeInfoEntity
.
getEmployeeNumber
())
.
employeeName
(
employeeInfoEntity
.
getEmployeeName
())
.
employeeLevel
(
employeeInfoEntity
.
getEmployeeLevel
())
.
employeeTitle
(
employeeInfoEntity
.
getEmployeeTitle
())
.
build
();
employeeDAO
.
insert
(
employeePO
);
EmployeeSalaryPO
employeeSalaryPO
=
EmployeeSalaryPO
.
builder
()
.
employeeNumber
(
employeeInfoEntity
.
getEmployeeNumber
())
.
salaryTotalAmount
(
employeeInfoEntity
.
getSalaryTotalAmount
())
.
salaryMeritAmount
(
employeeInfoEntity
.
getSalaryMeritAmount
())
.
salaryBaseAmount
(
employeeInfoEntity
.
getSalaryBaseAmount
())
.
build
();
employeeSalaryDAO
.
insert
(
employeeSalaryPO
);
}
catch
(
Exception
e
)
{
status
.
setRollbackOnly
();
e
.
printStackTrace
();
}
}
});
}
@Override
@Override
public
EmployeeInfoEntity
queryEmployInfo
(
String
employNumber
)
{
public
EmployeeInfoEntity
queryEmployInfo
(
String
employNumber
)
{
// 查询雇员
// 查询雇员
...
@@ -27,6 +68,7 @@ public class EmployeeRepository implements IEmployeeRepository {
...
@@ -27,6 +68,7 @@ public class EmployeeRepository implements IEmployeeRepository {
EmployeeSalaryPO
employeeSalaryPO
=
employeeSalaryDAO
.
queryEmployeeSalaryByEmployNumber
(
employNumber
);
EmployeeSalaryPO
employeeSalaryPO
=
employeeSalaryDAO
.
queryEmployeeSalaryByEmployNumber
(
employNumber
);
return
EmployeeInfoEntity
.
builder
()
return
EmployeeInfoEntity
.
builder
()
.
employeeNumber
(
employeePO
.
getEmployeeNumber
())
.
employeeName
(
employeePO
.
getEmployeeName
())
.
employeeName
(
employeePO
.
getEmployeeName
())
.
employeeLevel
(
employeePO
.
getEmployeeLevel
())
.
employeeLevel
(
employeePO
.
getEmployeeLevel
())
.
employeeTitle
(
employeePO
.
getEmployeeTitle
())
.
employeeTitle
(
employeePO
.
getEmployeeTitle
())
...
...
xfg-dev-tech-infrastructure/src/main/java/cn/bugstack/xfg/dev/tech/infrastructure/repository/SalaryAdjustRepository.java
浏览文件 @
5890fe98
...
@@ -11,6 +11,8 @@ import cn.bugstack.xfg.dev.tech.infrastructure.po.EmployeePO;
...
@@ -11,6 +11,8 @@ import cn.bugstack.xfg.dev.tech.infrastructure.po.EmployeePO;
import
cn.bugstack.xfg.dev.tech.infrastructure.po.EmployeeSalaryAdjustPO
;
import
cn.bugstack.xfg.dev.tech.infrastructure.po.EmployeeSalaryAdjustPO
;
import
cn.bugstack.xfg.dev.tech.infrastructure.po.EmployeeSalaryPO
;
import
cn.bugstack.xfg.dev.tech.infrastructure.po.EmployeeSalaryPO
;
import
org.springframework.stereotype.Repository
;
import
org.springframework.stereotype.Repository
;
import
org.springframework.transaction.annotation.Isolation
;
import
org.springframework.transaction.annotation.Propagation
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.annotation.Transactional
;
import
javax.annotation.Resource
;
import
javax.annotation.Resource
;
...
@@ -25,8 +27,28 @@ public class SalaryAdjustRepository implements ISalaryAdjustRepository {
...
@@ -25,8 +27,28 @@ public class SalaryAdjustRepository implements ISalaryAdjustRepository {
@Resource
@Resource
private
IEmployeeSalaryAdjustDAO
employeeSalaryAdjustDAO
;
private
IEmployeeSalaryAdjustDAO
employeeSalaryAdjustDAO
;
/**
* Spring Boot 事务管理的级别可以通过 `@Transactional` 注解的 `isolation` 属性进行配置。常见的事务隔离级别有以下几种:
* 1. `DEFAULT`:使用底层数据库的默认隔离级别。MySQL 默认为 `REPEATABLE READ`,Oracle 默认为 `READ COMMITTED`。
* 2. `READ_UNCOMMITTED`:最低的隔离级别,允许读取未提交的数据变更,可能会导致脏读、不可重复读和幻读问题。
* 3. `READ_COMMITTED`:允许读取已经提交的数据变更,可以避免脏读问题,但可能会出现不可重复读和幻读问题。
* 4. `REPEATABLE_READ`:保证同一事务中多次读取同一数据时,结果始终一致,可以避免脏读和不可重复读问题,但可能会出现幻读问题。
* 5. `SERIALIZABLE`:最高的隔离级别,可以避免脏读、不可重复读和幻读问题,但会影响并发性能。
* <p>
* 在 Spring Boot 中,默认的事务隔离级别为 `DEFAULT`。如果没有特殊需求,建议使用默认隔离级别。
* SpringBoot 事务的传播行为可以通过 `@Transactional` 注解的 `propagation` 属性进行配置。常用的传播行为有以下几种:
* 1. `Propagation.REQUIRED`:默认的传播行为,如果当前存在事务,则加入该事务,否则新建一个事务;
* 2. `Propagation.SUPPORTS`:如果当前存在事务,则加入该事务,否则以非事务的方式执行;
* 3. `Propagation.MANDATORY`:如果当前存在事务,则加入该事务,否则抛出异常;
* 4. `Propagation.REQUIRES_NEW`:无论当前是否存在事务,都会新建一个事务,如果当前存在事务,则将当前事务挂起;
* 5. `Propagation.NOT_SUPPORTED`:以非事务的方式执行操作,如果当前存在事务,则将当前事务挂起;
* 6. `Propagation.NEVER`:以非事务的方式执行操作,如果当前存在事务,则抛出异常;
* 7. `Propagation.NESTED`:如果当前存在事务,则在该事务的嵌套事务中执行,否则新建一个事务。嵌套事务是独立于外部事务的,但是如果外部事务回滚,则嵌套事务也会回滚。
* <p>
* 除了传播行为,`@Transactional` 注解还可以配置其他属性,例如隔离级别、超时时间、只读等。
*/
@Override
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Transactional
(
rollbackFor
=
Exception
.
class
,
timeout
=
350
,
propagation
=
Propagation
.
REQUIRED
,
isolation
=
Isolation
.
DEFAULT
)
public
String
adjustSalary
(
AdjustSalaryApplyOrderAggregate
adjustSalaryApplyOrderAggregate
)
{
public
String
adjustSalary
(
AdjustSalaryApplyOrderAggregate
adjustSalaryApplyOrderAggregate
)
{
String
employeeNumber
=
adjustSalaryApplyOrderAggregate
.
getEmployeeNumber
();
String
employeeNumber
=
adjustSalaryApplyOrderAggregate
.
getEmployeeNumber
();
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录