• SpringMvc整合Mybatis并使用声明式事务


    (1)、引入相关依赖

     1     <dependency>
     2       <groupId>com.alibaba</groupId>
     3       <artifactId>druid</artifactId>
     4       <version>1.1.12</version>
     5     </dependency>
     6 
     7     <dependency>
     8       <groupId>mysql</groupId>
     9       <artifactId>mysql-connector-java</artifactId>
    10       <version>8.0.13</version>
    11     </dependency>
    12 
    13     <dependency>
    14       <groupId>org.springframework</groupId>
    15       <artifactId>spring-orm</artifactId>
    16       <version>4.3.22.RELEASE</version>
    17     </dependency>
    18 
    19     <dependency>
    20       <groupId>org.mybatis</groupId>
    21       <artifactId>mybatis-spring</artifactId>
    22       <version>2.0.0</version>
    23     </dependency>
    24     <dependency>
    25       <groupId>org.mybatis</groupId>
    26       <artifactId>mybatis</artifactId>
    27       <version>3.5.0</version>
    28     </dependency>

    (2)、编写Mybatis配置类

     1 package cn.coreqi.config;
     2 
     3 import com.alibaba.druid.pool.DruidDataSource;
     4 import org.mybatis.spring.SqlSessionFactoryBean;
     5 import org.mybatis.spring.annotation.MapperScan;
     6 import org.springframework.context.annotation.Bean;
     7 import org.springframework.context.annotation.Configuration;
     8 import org.springframework.jdbc.datasource.DataSourceTransactionManager;
     9 import org.springframework.transaction.annotation.EnableTransactionManagement;
    10 
    11 import javax.sql.DataSource;
    12 
    13 @EnableTransactionManagement    //启动事务管理器
    14 @Configuration
    15 @MapperScan(value = "cn.coreqi.mapper") //扫描Mapper文件
    16 public class MybatisConfig {
    17     @Bean
    18     public DataSource dataSource(){
    19         DruidDataSource ds = new DruidDataSource();
    20         ds.setDriverClassName("com.mysql.jdbc.Driver");
    21         ds.setUrl("jdbc:mysql://localhost:3306/mybatisdemo?serverTimezone=UTC");
    22         ds.setUsername("root");
    23         ds.setPassword("123456");
    24         return ds;
    25     }
    26 
    27     //注册Mybatis SqlSessionFactory
    28     @Bean
    29     public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){
    30         SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
    31         sqlSessionFactory.setDataSource(dataSource);
    32         return sqlSessionFactory;
    33     }
    34     
    35     //注册事务管理器
    36     @Bean
    37     public DataSourceTransactionManager transactionManager(DataSource dataSource){
    38         DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
    39         transactionManager.setDataSource(dataSource);
    40         return transactionManager;
    41     }
    42 }

    (3)、编写Mapper文件

     1 package cn.coreqi.mapper;
     2 
     3 import cn.coreqi.entities.User;
     4 import org.apache.ibatis.annotations.*;
     5 
     6 @Mapper
     7 public interface UserMapper{
     8     @Select("select * from users where Id = #{id}")
     9     public User getUserById(Integer id);
    10     @Insert("insert into users(UserName,PassWord,Enabled) values(#{UserName},#{PassWord},#{Enabled})")
    11     @Options(useGeneratedKeys = true,keyProperty = "Id")
    12     public int addUser(User user);
    13     @Update("update users set UserName = #{UserName},PassWord = #{PassWord},Enabled = #{Enabled} where Id = #{Id}")
    14     public int modifyUser(User user);
    15     @Delete("delete from users where Id = #{id}")
    16     public void delById(Integer id);
    17 }

    (4)、编写Service文件

     1 package cn.coreqi.service;
     2 
     3 import cn.coreqi.entities.User;
     4 import cn.coreqi.mapper.UserMapper;
     5 import org.springframework.beans.factory.annotation.Autowired;
     6 import org.springframework.stereotype.Service;
     7 import org.springframework.transaction.annotation.Isolation;
     8 import org.springframework.transaction.annotation.Propagation;
     9 import org.springframework.transaction.annotation.Transactional;
    10 
    11 import java.io.IOException;
    12 import java.sql.SQLException;
    13 
    14 @Service
    15 public class UserService {
    16     @Autowired
    17     private UserMapper userMapper;
    18 
    19     @Transactional(readOnly = true)
    20     public User getUserById(Integer id){
    21         return userMapper.getUserById(id);
    22     }
    23 
    24     @Transactional
    25     public User insertUser(User user){
    26         userMapper.addUser(user);
    27         return user;
    28     }
    29 
    30     //@Transactional属性
    31     //  1.propagation   指定当前事务的传播行为,共7种,常用的有REQUIRES_NEW和REQUIRED
    32     //  2.isolation     指定当前事务的隔离级别,共5种,常用的有READ_COMMITTED,*事务的隔离级别要得到底层数据库的支持,而不是应用程序和框架的支持
    33     //  3.rollbackFor&noRollbackFor   指定当前事务的回滚属性,rollbackFor指定遇到那些异常进行回滚,noRollbackFor指定遇到那些异常不进行回滚。*如果不指定这两个属性的默认情况下
    34     //                                Spring的声明式事务对所有的运行时异常(RuntimeException)和Error类型的异常进行回滚。
    35     //  4.readOnly      指定当前事务是否只读,true表示这个事务只读取数据而不对数据做修改,这样可以帮助数据库引擎优化事务
    36     //  5.timeout       指定当前事务可以保持多久,防止长期运行事务占用资源,单位秒。
    37     @Transactional(propagation = Propagation.REQUIRES_NEW,isolation = Isolation.READ_COMMITTED,
    38             rollbackFor = {IOException.class, SQLException.class},noRollbackFor = {ArithmeticException.class},
    39     readOnly = false,timeout = 30)
    40     public User modifyUser(User user){
    41         userMapper.modifyUser(user);
    42         return user;
    43     }
    44     
    45     @Transactional
    46     public void delById(Integer id){
    47         userMapper.delById(id);
    48 
    49     }
    50 }
  • 相关阅读:
    CacheHelper
    自动完成 或者动态匹配
    http://www.jb51.net/article/28619.htm
    http://www.kindsoft.net/docs/qna.html
    开发测试的理想模型
    关于浮点数的死区问题
    ZOJ Problem Set – 2321 Filling Out the Team
    Input类、四元数、
    忙蒙蔽了
    2014-03-28
  • 原文地址:https://www.cnblogs.com/fanqisoft/p/10318280.html
Copyright © 2020-2023  润新知