• SpringBoot整合MyBatis


    转载请在文章最上方加上此句话:原文地址:http://www.cnblogs.com/zhuxiaojie/p/5836159.html

    前言:这段时间用springboot感觉确实挺好用的,很大程度上的简化了开发,由其是它的自动化配置,让大大的提高了开发效率,现在我们要让SpringBoot与MyBatis一起工作。

    注:1.本人亲测可用,包括事务。

      2.使用注解形式,全程无MyBatis与Spring的配置文件

      3.文章时间为2016-9-3日,使用的是MyBatis官方提供的mybatis-spring-boot-starter,当前最新版本为1.1.1。

      4.mybatis-spring-boot-starter的github源码地址为:https://github.com/mybatis/spring-boot-starter

      5.mybatis-spring-boot-stater的官方文档地址为:http://www.mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/

    方法一:多数据源的mytis

    强烈推荐:只要一行注解,使用mybatis的多数据源,无需要任何配置

    github地址:https://gitee.com/xiaojiezhu/mybadis-starter.git

    使用方法如下,先加入如下配置文件,在yaml中

    mysql:
      server:
        saas:
          url: "jdbc:mysql://localhost:3306/saas?useUnicode=true&characterEncoding=utf8"
          username: root
          password: 123
          driverClassName: com.mysql.jdbc.Driver
          initialSize: 1  #初始化大小
          minIdle: 1  #空闲连接池的大小
          maxActive: 50 #最大激活数量
        saas2:
          url: "jdbc:mysql://localhost:3306/saas2?useUnicode=true&characterEncoding=utf8"
          username: root
          password: 123
          driverClassName: com.mysql.jdbc.Driver
          initialSize: 1  #初始化大小
          minIdle: 1  #空闲连接池的大小
          maxActive: 50 #最大激活数量

    如上是定义了两个数据源

    然后在main方法所在类加上此注解

    @MyBadisLoader({"saas = com.llc.admin.web.dao.saas = classpath:mapper/*xml" , 
                    "saas2 = com.llc.admin.web.dao.saas2 = classpath:mapper/*.xml,classpath:mapper/user/*.xml"})
    @SpringBootApplication
    public class WebApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(WebApplication.class,args);
        }
    }

    上面的注解中 saas是上方配置文件,数据源的名称,后面是扫描的接口包名,可以用逗号分隔传入多个,再后面是扫描xml的配置文件路径,也支持多个 注解中接收的是一个数组,所以支持多个数据源,除此不需要任何代码就可以使用

    就可以直接支持多数据源

    下面方法二是使用mybatis官方的starter,需要经过一些配置才行

    方法二:使用mybatis官方starter

    首先加入mybatis-spring-boot-stater的Maven依赖

            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.1.1</version>
            </dependency>

    配置数据源,这里使用的dbcp的数据源,具体大家可以看自己的情况来使用

    在src/main/resource中,添加一个prop.properties配置文件,这里面添加了一些数据库连接的信息

    #jdbc
    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://192.168.137.2:3306/weichat?useUnicode=true&characterEncoding=utf8
    jdbc.username=root
    jdbc.password=123456
    jdbc.maxActive=2335
    jdbc.maxIdel=120
    jdbc.maxWait=100

    然后加上下面的代码注入数据源

    @Configuration
    //这个注解导入刚才增加的jdbc配置文件 @PropertySource(
    "classpath:prop.properties") public class DataSourceConfiguration { @Value("${jdbc.driver}") private String driver; @Value("${jdbc.url}") private String url; @Value("${jdbc.username}") private String username; @Value("${jdbc.password}") private String password; @Value("${jdbc.maxActive}") private int maxActive; @Value("${jdbc.maxIdel}") private int maxIdel; @Value("${jdbc.maxWait}") private long maxWait; @Bean public BasicDataSource dataSource(){ BasicDataSource dataSource = new BasicDataSource(); dataSource.setDriverClassName(driver); dataSource.setUrl(url); dataSource.setUsername(username); dataSource.setPassword(password); dataSource.setMaxActive(maxActive); dataSource.setMaxIdle(maxIdel); dataSource.setMaxWait(maxWait); dataSource.setValidationQuery("SELECT 1"); dataSource.setTestOnBorrow(true); return dataSource; } }

    增加MyBatis的配置

    import javax.sql.DataSource;
    
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.mybatis.spring.SqlSessionFactoryBean;
    import org.mybatis.spring.SqlSessionTemplate;
    import org.springframework.beans.factory.annotation.Autowired;
    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.annotation.EnableTransactionManagement;
    import org.springframework.transaction.annotation.TransactionManagementConfigurer;
    
    /**
     * @author zxj
     *
     */
    @Configuration
    //加上这个注解,使得支持事务
    @EnableTransactionManagement
    public class MyBatisConfig implements TransactionManagementConfigurer {
        @Autowired
        private DataSource dataSource;
    
        @Override
        public PlatformTransactionManager annotationDrivenTransactionManager() {
             return new DataSourceTransactionManager(dataSource);
        }
    
        @Bean(name = "sqlSessionFactory")
        public SqlSessionFactory sqlSessionFactoryBean() {
            SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
            bean.setDataSource(dataSource);
    
            try {
                return bean.getObject();
            } catch (Exception e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            }
        }
    
        @Bean
        public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
            return new SqlSessionTemplate(sqlSessionFactory);
        }
    }

    然后需要配置MyBatis配置文件的路径,这个配置需要与上面的配置分开来写,因为它们有着一个先后顺序

    import org.mybatis.spring.mapper.MapperScannerConfigurer;
    import org.springframework.boot.autoconfigure.AutoConfigureAfter;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    /**
     * 扫描mybatis的接口
     * 
     * @author zxj
     *
     */
    @Configuration
    // 因为这个对象的扫描,需要在MyBatisConfig的后面注入,所以加上下面的注解
    @AutoConfigureAfter(MyBatisConfig.class)
    public class MyBatisMapperScannerConfig {
        @Bean
        public MapperScannerConfigurer mapperScannerConfigurer() {
            MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
            //获取之前注入的beanName为sqlSessionFactory的对象
            mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");
            //指定xml配置文件的路径
            mapperScannerConfigurer.setBasePackage("com.framework.msg.mapper");
            return mapperScannerConfigurer;
        }
    }

    然后这就是配置完了,真的很简单,但是细心的朋友可能会问,代码里面怎么没有配置MyBatis接口的地址呢?

    在这里,使用@Mapper注解来标识一个接口为MyBatis的接口,MyBatis会自动寻找这个接口,如下

    import java.util.Map;
    
    import org.apache.ibatis.annotations.Insert;
    import org.apache.ibatis.annotations.Mapper;
    import org.apache.ibatis.annotations.Param;
    import org.apache.ibatis.annotations.Select;
    
    @Mapper
    public interface TestDao {
    
        @Select("select * from wx_userinfo;")
        public Map<String,Object> find();
        
        @Insert("insert into wx_userinfo(openid,status,nickname,sex,city,province,country,headimgurl,subscribe_time) "+
                "values(#{id},1,'nick',1,'city','provi','contr','img',now())")
        public int insert(@Param("id")int id);
    }

    这样就可以使用了,当然,在这之前,你得开启@ComponentScan注解,或者直接使用@SpringBootApplication(推荐)

  • 相关阅读:
    C语言程序设计 第二章 数据类型
    C语言程序设计 认识函数
    趣味c语言编程100例(三)
    如何使用 Eset Nod32通行证批量获取精灵
    C语言程序设计 使用库函数参考手册
    C语言程序设计 概述
    C语言程序设计 VC6调试程序(视频)
    趣味c语言编程100例(四)
    java WebService 异常
    数据库战略高度解析(2) 数据库驱动程序
  • 原文地址:https://www.cnblogs.com/zhuxiaojie/p/5836159.html
Copyright © 2020-2023  润新知