springboot+事务+mybatis|jpa的简易搭建
一、pom.xml和application.properties配置
1、pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<!-- servlet依赖. -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!-- tomcat的支持.-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional> <!-- 这个需要为 true 热部署才有效 -->
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
<!-- 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>
<version>5.1.46</version>
</dependency>
</dependencies>
2、application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.password=XXXX
#mybatis.mapper-locations=classpath:com/transaction/mapper/*.xml
#mybatis.type-aliases-package=com.transaction.pojo
logging.level.root = DEBUG
logging.level.org.springframework=DEBUG
logging.level.org.org.mybatis=DEBUG
二、jpa
1、User
@Table(name = "user")
@Entity
@JsonIgnoreProperties({ "handler","hibernateLazyInitializer"})
public class User implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
private Integer id;
@Column(nullable = false, length = 6)
private String name;
private String password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
2、UserDAO
public interface UserDAO extends JpaRepository<User, Integer> {
}
3、UserService
@Service
public class UserService{
@Autowired
private UserDAO userDAO;
@Transactional
public User getUser(int id) {
return userDAO.findOne(id);
}
@Transactional
public void insert(User user) {
userDAO.save(user);
user.setName("asd"+user.getName());
user.setId(user.getId()+1);
userDAO.save(user);
}
}
4、UserController
@RestController
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("getUser")
public User getUser(int id){
User u = userService.getUser(id);
System.out.println(u.getName()+"!!!!!!!!!!!!!!!!");
return u;
}
@RequestMapping("insert")
public String insert(User user) {
user.setId(5);
try {
userService.insert(user);
} catch (Exception e) {
return "fail";
}
return "success";
}
}
5、TransactionApplication
@SpringBootApplication
@EnableTransactionManagement
//@MapperScan(basePackages ="com.transaction",annotationClass = Repository.class)
public class TransactionApplication {
public static void main(String[] args) {
SpringApplication.run(TransactionApplication.class, args);
}
}
6、运行启动
三、mybatis
1、User
public class User implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private Integer id;
private String name;
private String password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
2、Mapper
①userMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.transaction.mapper.UserMapper">
<select id="getUser" resultType="user" parameterType="java.lang.Integer">
select * from user where id = #{id}
</select>
<insert id="insert" keyColumn="id" keyProperty="id" parameterType="user" useGeneratedKeys="true">
insert into user(id,name,password) values(#{id},#{name},#{password})
</insert>
</mapper>
②UserMapper
@Repository
public interface UserMapper {
User getUser(int id);
void insert(User user);
}
3、UserService
public interface UserService{
public User getUser(int id);
public void insert(User user);
}
4、UserServiceImpl
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
@Transactional(isolation = Isolation.READ_COMMITTED, timeout = 1)
public User getUser(int id){
return userMapper.getUser(id);
}
@Override
@Transactional(isolation = Isolation.READ_COMMITTED, timeout = 1)
public void insert(User user) {
userMapper.insert(user);
System.err.println(user.getId());
user.setName("asd"+user.getName());
userMapper.insert(user);
}
}
5、UserController
@RestController
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("getUser")
public User getUser(int id){
User u = userService.getUser(id);
System.out.println(u.getName()+"!!!!!!!!!!!!!!!!");
return u;
}
@RequestMapping("insert")
public String insert(User user) {
user.setId(5);
try {
userService.insert(user);
} catch (Exception e) {
return "fail";
}
return "success";
}
}
6、TransactionApplication
@SpringBootApplication
@MapperScan(basePackages ="com.transaction",annotationClass = Repository.class)
public class TransactionApplication {
public static void main(String[] args) {
SpringApplication.run(TransactionApplication.class, args);
}
@Autowired
PlatformTransactionManager transactionManager = null;
@PostConstruct
public void viewTransactionManager() {
System.out.println("tran:"+transactionManager.getClass().getName());
}
}
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.password=XXXX
mybatis.mapper-locations=classpath:com/transaction/mapper/*.xml
mybatis.type-aliases-package=com.transaction.pojo
logging.level.root = DEBUG
logging.level.org.springframework=DEBUG
logging.level.org.org.mybatis=DEBUG