zoukankan      html  css  js  c++  java
  • Springboot与Mybatis整合

    最近自己用springboot和mybatis做了整合,记录一下:

    1.先导入用到的jar包

         <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </dependency>
            
            <dependency>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-core</artifactId>
                <version>1.3.3</version>
            </dependency>
            
            <!-- 阿里数据源 -->
            <dependency>
              <groupId>com.alibaba</groupId>
              <artifactId>druid</artifactId>
              <version>${druid.version}</version>
            </dependency>
            
            <dependency>
              <groupId>org.mybatis</groupId>
              <artifactId>mybatis-spring</artifactId>
              <version>1.3.0</version>
            </dependency>
            
            <dependency>
              <groupId>org.mybatis</groupId>
              <artifactId>mybatis</artifactId>
              <version>3.4.0</version>
            </dependency>
            
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-tx</artifactId>
            </dependency>
            
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
            </dependency>

    2.配置配置文件(有些大家用不着的可以不配置)

    spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    spring.datasource.url=jdbc:mysql://localhost:3306/test
    spring.datasource.username=root
    spring.datasource.password=123456
    
    spring.datasource.initialSize=20
    spring.datasource.minIdle=50
    spring.datasource.maxActive=200
    
    spring.datasource.maxWait=60000
    
    spring.datasource.timeBetweenEvictionRunsMillis=60000
    
    spring.datasource.minEvictableIdleTimeMillis=300000
    spring.datasource.validationQuery=SELECT 1 FROM DUAL
    spring.datasource.testWhileIdle=true
    spring.datasource.testOnBorrow=false
    spring.datasource.testOnReturn=false
    
    spring.datasource.poolPreparedStatements=true
    spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
    
    spring.datasource.filters=stat,log4j
    
    spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000

    #mybatis
    mybatis.mapper-locations=classpath:/com/sxf/**/*Mapper.xml
    mybatis.type-aliases-package=com.sxf.**.entity

    3.解析数据源

    package com.sxf.config;
    
    import java.util.Properties;
    
    import javax.sql.DataSource;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.web.servlet.FilterRegistrationBean;
    import org.springframework.boot.web.servlet.ServletRegistrationBean;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.core.env.Environment;
    
    import com.alibaba.druid.pool.DruidDataSource;
    import com.alibaba.druid.support.http.StatViewServlet;
    import com.alibaba.druid.support.http.WebStatFilter;
    
    @Configuration
    public class DatasourceConfig {
    
        @Autowired
        private Environment env;
    
        @Bean
        public DataSource dataSource() {
            DruidDataSource druidDataSource = new DruidDataSource();
            druidDataSource.setDbType(env.getProperty("spring.datasource.type"));
            druidDataSource.setDriverClassName(env.getProperty("spring.datasource.driver-class-name"));
            druidDataSource.setUrl(env.getProperty("spring.datasource.url"));
            druidDataSource.setUsername(env.getProperty("spring.datasource.username"));
            druidDataSource.setPassword(env.getProperty("spring.datasource.password"));
    
            druidDataSource.setInitialSize(Integer.parseInt(env.getProperty("spring.datasource.initialSize")));
            druidDataSource.setMinIdle(Integer.parseInt(env.getProperty("spring.datasource.minIdle")));
            druidDataSource.setMaxActive(Integer.parseInt(env.getProperty("spring.datasource.maxActive")));
            druidDataSource.setMaxWait(Long.parseLong(env.getProperty("spring.datasource.maxWait")));
            // 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
            druidDataSource.setTimeBetweenEvictionRunsMillis(
                    Long.parseLong(env.getProperty("spring.datasource.timeBetweenEvictionRunsMillis")));
            // 配置一个连接在池中最小生存的时间,单位是毫秒
            druidDataSource.setMinEvictableIdleTimeMillis(
                    Long.parseLong(env.getProperty("spring.datasource.minEvictableIdleTimeMillis")));
            druidDataSource.setValidationQuery(env.getProperty("spring.datasource.validationQuery"));
            druidDataSource.setTestWhileIdle(Boolean.getBoolean(env.getProperty("spring.datasource.testWhileIdle")));
            druidDataSource.setTestOnBorrow(Boolean.getBoolean(env.getProperty("spring.datasource.testOnBorrow")));
            druidDataSource.setTestOnReturn(Boolean.getBoolean(env.getProperty("spring.datasource.testOnReturn")));
            // 打开PSCache,并且指定每个连接上PSCache的大小
            druidDataSource.setPoolPreparedStatements(
                    Boolean.getBoolean(env.getProperty("spring.datasource.poolPreparedStatements")));
            druidDataSource.setMaxPoolPreparedStatementPerConnectionSize(
                    Integer.parseInt(env.getProperty("spring.datasource.maxPoolPreparedStatementPerConnectionSize")));
            // 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
    
            // 通过connectProperties属性来打开mergeSql功能;慢SQL记录
            String cpStr = env.getProperty("spring.datasource.connectionProperties");
            if (null != cpStr) {
                Properties pro = new Properties();
                String[] kvArr = cpStr.split("\;");
                if (null != kvArr && kvArr.length > 0) {
                    for (String cp : kvArr) {
                        String[] arr = cp.split("\=");
                        if (null != arr && arr.length == 2) {
                            pro.put(arr[0], arr[1]);
                        }
                    }
                }
                druidDataSource.setConnectProperties(pro);
            }
    
            return druidDataSource;
        }
    
        @Bean
        public ServletRegistrationBean druidServlet() {
            return new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
        }
    
    }

    这里配置@MapperScan扫描mybatis接口, 不需要在每个接口里面配置@Mapper

    package com.sxf.config;
    
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.mybatis.spring.SqlSessionFactoryBean;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.core.env.Environment;
    import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
    import org.springframework.core.io.support.ResourcePatternResolver;
    import org.springframework.jdbc.datasource.DataSourceTransactionManager;
    import org.springframework.transaction.PlatformTransactionManager;
    import org.springframework.transaction.annotation.EnableTransactionManagement;
    
    @Configuration
    @EnableTransactionManagement
    @MapperScan(basePackages="com.sxf.**.mapper", sqlSessionFactoryRef = "sqlSessionFactory")
    public class MyBatisConfig{
    
        @Autowired
        private DatasourceConfig dataSource;
        
        @Autowired
        private Environment env;
    
        @Bean(name = "sqlSessionFactory")
        public SqlSessionFactory sqlSessionFactoryBean() {
            SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
            bean.setDataSource(dataSource.dataSource());
            bean.setTypeAliasesPackage(env.getProperty("type-aliases-package"));
           
    
            //添加XML目录
            ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
            try {
    //            bean.setConfigLocation(resolver.getResource(env.getProperty("mybatis.page-plugins-config")));
                bean.setMapperLocations(resolver.getResources(env.getProperty("mybatis.mapper-locations")));
                
                return bean.getObject();
            } catch(IllegalArgumentException e){
                e.printStackTrace();
                 throw new RuntimeException(e);
            }catch (Exception e) {
                e.printStackTrace();
                e.getMessage();
                throw new RuntimeException(e);
            }
        }
    
        @Bean
        public PlatformTransactionManager annotationDrivenTransactionManager() {
            return new DataSourceTransactionManager(dataSource.dataSource());
        }
    }

    mybatis接口,不需要添加@Mapper

    package com.sxf.profit.mapper;
    
    import com.sxf.profit.entity.InviteCode;
    
    public interface InviteCodeMapper {
        int deleteByPrimaryKey(Long id);
    
        int insert(InviteCode record);
    
        int insertSelective(InviteCode record);
    
        InviteCode selectByPrimaryKey(Long id);
    
        int updateByPrimaryKeySelective(InviteCode record);
    
        int updateByPrimaryKey(InviteCode record);
    }

    4.写个测试controller,测试成功

    package com.sxf.controller;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.sxf.profit.entity.InviteCode;
    import com.sxf.profit.mapper.InviteCodeMapper;
    
    @RestController
    public class InviteCodeController {
    
        @Autowired
        private InviteCodeMapper inviteCodeMapper;
        
        @GetMapping("/Hello/{id}")
        public InviteCode selectInviteCode(@PathVariable("id") Long id){
            return inviteCodeMapper.selectByPrimaryKey(id);
        }
    }

    成功!!!

  • 相关阅读:
    Linux性能优化之CPU优化(一)
    MongoDB CPU使用较高,如何排查?
    MongoDB 安全配置
    open-falcon v0.2 监控部署记录
    有关redis相关的性能优化及内存说明
    kafka 基础知识梳理
    Java 进程占用 VIRT 虚拟内存超高的问题研究
    【nodejs】文件上传demo实现
    translate和position的比较
    setAttribute()、getAttribute()与ele[attr]与自定义属性
  • 原文地址:https://www.cnblogs.com/sxf2017/p/7262990.html
Copyright © 2011-2022 走看看