springboot mybatis 整合

  1. 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>
  1. 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 方式
  1. 入口類添加註解@EnableTransactionManagement,激活事務管理
@SpringBootApplication
@EnableTransactionManagement
public class MybatistestApplication {
    public static void main(String[] args) {
        SpringApplication.run(MybatistestApplication.class, args);
    }
}
  1. 創建實體類(數據庫創建對應表)
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; }
}
  1. 添加 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);
}
  1. 添加 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);
    }
}

參考:http://www.fengyunxiao.cn

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章