springboot2 与 mybatis3 整合比较简单,只使用注解的方式,可以按照以下步骤。
- pom.xml 添加mysql,mybatis等依赖。
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
- application.yml:添加数据库连接信息和mybatis配置信息(默认使用hikari高性能连接池)
spring:
datasource:
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/test?useSSL=false
mybatis:
type-aliases-package: cn.example.mybatistest.model
# mapper-locations: mapper/*Mapper.xml # 暂时不需要 xml 方式
- 入口类添加注解@EnableTransactionManagement,激活事务管理
@SpringBootApplication
@EnableTransactionManagement
public class MybatistestApplication {
public static void main(String[] args) {
SpringApplication.run(MybatistestApplication.class, args);
}
}
- 创建实体类(数据库创建对应表)
public class User {
private Long id;
private String name;
public Long getId() { return id; }
public String getName() { return name; }
public void setId(Long id) { this.id = id; }
public void setName(String name) { this.name = name; }
}
- 添加 dao 层,使用注解方式
@Mapper
@Repository
public interface UserDao {
@Select("select * from user where id=#{id}")
public User getNameById(@Param("id") long id);
@Options(useGeneratedKeys = true, keyProperty = "iid")
@Insert("insert into user(name) values(#{name})")
public int insert(User user);
}
- 添加 service 层,并在该层进行事务管理
@Service
public class UserService {
@Autowired UserDao userDao;
// 只读取数据,不修改数据,提高效率
@Transactional(propagation= Propagation.SUPPORTS,readOnly=true)
public User getImageById(long id) {
return userDao.getNameById(id);
}
// 需要开启事务,修改数据
@Transactional(propagation = Propagation.REQUIRED)
public int insert() {
User user = new User();
user.setName("insert");
return userDao.insert(user);
}
// 测试异常回滚,一有异常,所有操作都回滚
@Transactional(propagation = Propagation.REQUIRED)
public int rollback3() {
User user = new User();
user.setName("rollback3");
userDao.insert(user);
int i = 1 / 0; // 异常,回滚修改
user.setName("rollback33");
return userDao.insert(user);
}
}