SpringBoot整合mybaits(c3p0数据源)

参考:http://blog.csdn.net/isea533/article/details/50359390
他数据源使用的是阿里巴巴的druid数据源,这里使用c3p0

一、框架搭建(maven构建)

1. pom文件

1) mybatis-springboot最新的核心包

官网:http://www.mybatis.org/找样例下载最新的

<groupId>org.mybatis.spring.boot</groupId>`
<artifactId>mybatis-spring-boot</artifactId>
<version>1.3.0</version>
2) mybatis-springboot最新的核心包
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
3) mybatis核心包
 <groupId>org.mybatis</groupId>
 <artifactId>mybatis</artifactId>
 <version>3.4.1</version>
4) springboot web依赖包
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-web</artifactId>

此外还有jdbc驱动包,数据库连接池包,根据需求添加。

2.配置文件

1) yml文件配置

默认命名为application.yml,会自动识别配置。
yml语法参考:http://blog.csdn.net/u011250882/article/details/48770237

#数据源配置 这里是c3p0数据源配置 注意冒号后面要有空格
datasource:
      driverClass: com.mysql.cj.jdbc.Driver
      jdbcUrl:  jdbc:mysql://localhost:3306/mail??characterEncoding=utf-8&serverTimezone=UTC
      user: root
      password: ******
      maxIdleTime: 60
      initialPoolSize: 8
      minPoolSize: 5
      maxPoolSize: 10
       # 使用c3p0数据源
      type: com.mchange.v2.c3p0.ComboPooledDataSource

# MyBatis
mybatis:
    # 配置类型别名
    typeAliasesPackage: model
    # 配置mapper的扫描,找到所有的mapper.xml映射文件
    mapperLocations: classpath:mapper/*.xml
    # 加载全局的配置文件
    configLocation: classpath:mybatis-config.xml

  实际工作中一般都使用xml配置,这里使用我不熟悉的注解配置,所以上面的mapperLocations可以不配置。

2) mybaits-config.xml配置文件

参考网址http://blog.csdn.net/javahighness/article/details/53044655
又一个:http://blog.csdn.net/isea533/article/details/50359390

<configuration>
    <properties>
        <property name="dialect" value="mysql" />
    </properties>
    <settings>
        <!-- 开启驼峰匹配 -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <!-- 这个配置使全局的映射器启用或禁用缓存。系统默认值是true,设置只是为了展示出来 -->
        <setting name="cacheEnabled" value="true" />
        <!-- 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载。 系统默认值是true,设置只是为了展示出来 -->
        <setting name="lazyLoadingEnabled" value="true" />
        <!-- 允许或不允许多种结果集从一个单独的语句中返回(需要适合的驱动)。 系统默认值是true,设置只是为了展示出来 -->
        <setting name="multipleResultSetsEnabled" value="true" />
        <!--使用列标签代替列名。不同的驱动在这方便表现不同。参考驱动文档或充分测试两种方法来决定所使用的驱动。
        系统默认值是true,设置只是为了展示出来 -->
        <setting name="useColumnLabel" value="true" />
        <!--允许 JDBC 支持生成的键。需要适合的驱动。如果设置为 true 则这个设置强制生成的键被使用,尽管一些驱动拒绝兼容但仍然有效(比如
            Derby)。 系统默认值是false,设置只是为了展示出来 -->
        <setting name="useGeneratedKeys" value="false" />
        <!--配置默认的执行器。SIMPLE 执行器没有什么特别之处。REUSE 执行器重用预处理语句。
        BATCH 执行器重用语句和批量更新 系统默认值是SIMPLE,设置只是为了展示出来 -->
        <setting name="defaultExecutorType" value="SIMPLE" />
        <!--设置超时时间,它决定驱动等待一个数据库响应的时间。 系统默认值是null,设置只是为了展示出来 -->
        <setting name="defaultStatementTimeout" value="25000" />
    </settings>

</configuration>

分页插件参考:http://412887952-qq-com.iteye.com/blog/2313030

3) mybatis配置类
@Configuration
@EnableTransactionManagement
public class MybatisConfiguration implements TransactionManagementConfigurer {

    private static Log logger = LogFactory.getLog(MybatisConfiguration.class);

    //配置文件取值的第一种方法
    @Value("${mybatis.configLocation}")
    private String configLocation;

    @Value("${mybatis.mapperLocations}")
    private String mapperLocations;

    @Value("${mybatis.typeAliasesPackage}")
    private String typeAliasesPackage;

    @Autowired
    private DataSource dataSource;
    //配置文件读取的第二种方式
    @Bean
    @ConfigurationProperties("datasource")
    public ComboPooledDataSource dataSource(){
        return new ComboPooledDataSource();
    }

    @Bean
    public PageHelper pageHelper(){
        logger.info("MyBatis分页插件PageHelper");
        //分页插件
        PageHelper pageHelper = new PageHelper();
        Properties properties = new Properties();
        properties.setProperty("offsetAsPageNum", "true");
        properties.setProperty("rowBoundsWithCount", "true");
        properties.setProperty("reasonable", "true");
        properties.setProperty("supportMethodsArguments", "true");
        properties.setProperty("returnPageInfo", "check");
        properties.setProperty("params", "count=countSql");
        pageHelper.setProperties(properties);
        return pageHelper;
    }

    @Bean(name = "sqlSessionFactory")
    public SqlSessionFactory sqlSessionFactoryBean() {
        try {

            SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
            sessionFactoryBean.setDataSource(dataSource);

            // 读取配置
            sessionFactoryBean.setTypeAliasesPackage(typeAliasesPackage);

            //mapper文件目录
            /*Resource[] resources = new PathMatchingResourcePatternResolver()
                    .getResources(mapperLocations);
            sessionFactoryBean.setMapperLocations(resources);*/

            //读取mybatis配置文件,插件配置
            sessionFactoryBean.setConfigLocation(
                    new DefaultResourceLoader().getResource(configLocation));

            //添加插件  (改为使用配置文件加载了)
            sessionFactoryBean.setPlugins(new Interceptor[]{pageHelper()});

            return sessionFactoryBean.getObject();
        } catch (IOException e) {
            logger.warn("mybatis resolver mapper*xml is error");
            return null;
        } catch (Exception e) {
            logger.warn("mybatis sqlSessionFactoryBean create error");
            return null;
        }
    }
    @Bean
    @Override
    public PlatformTransactionManager annotationDrivenTransactionManager() {
        return new DataSourceTransactionManager(dataSource);
    }
}

注意:
  1.这里直接用的注解方式,所以没有xml文件,上面注释掉的代码使用会启动报错。
  2.分页的插件要使用4.X版本的,5.0版本以上的PageHelper没有实现Interceptor接口,会报错,5.0版本怎么用网上没找到。

二、 代码编写

1. 数据库建表

  这里使用mysql随便建一个数据库,一个用户表,字段就放个id和name就可以了。

2. 写业务代码

  只是为了测试框架是否搭建成功,没有写前端,直接调用接口,有返回内容就可以了。

3. dao层sql编写。

  这里使用mybatis注解方式
  参考地址:http://blog.csdn.net/ExcellentYuXiao/article/details/53262928
  基础:http://www.tuicool.com/articles/RVraiqM

public interface UserDao {

    @Select("select * from User where id = #{id}")
    User queryById(Long id);

}

4.入口类

@SpringBootApplication
@ComponentScan("controller,service,conf")
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class);
    }

    @Bean
    public EmbeddedServletContainerFactory servletContainer(){
        TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();
        factory.setPort(8033);
        factory.setContextPath("/sbmybatis");
        return factory;
    }


}

注意:扫描的包和注解的添加,不然不能注入类,配置文件的包也要扫描。

项目地址:https://gitee.com/yangqingh/springboot-mybatis.git

猜你喜欢

转载自blog.csdn.net/lvdou_lvdou/article/details/78415851
今日推荐