美文网首页
SpringBoot集成MybatisPlus

SpringBoot集成MybatisPlus

作者: Jayden梅 | 来源:发表于2018-01-03 20:08 被阅读424次

    1.MybatisPlus

    mybatisPlus是一款Mybatis高效工具,它的使用方便,上手快捷,可以帮助我们快速的搭建SSM框架,本次我们将通过SpringBoot,MybatisPlus实现SSM框架的快速搭建。我们可以在官方网站上获取详细的文档帮助。同时下面也将结合具体代码来做一个简单的介绍

    2框架搭建

    • 1 引入pom依赖
          <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus</artifactId>
                <version>2.1.6</version>
            </dependency>
    

    引入MyBatisPlus依赖将自动帮我们引入Mybatis框架的Pom.xml依赖

    • 2 application.properties配置
    #配置bei数据库#########################################################
    #设置驱动
    spring.datasource.bei.driverClass = com.microsoft.sqlserver.jdbc.SQLServerDriver
    #数据库地址
    spring.datasource.bei.url =jdbc:sqlserver://localhost:1433;databaseName=CH.BEI
    #用户名密码
    spring.datasource.bei.username = **
    spring.datasource.bei.password = **
    #mybatis配置
    #数据库方言
    spring.datasource.bei.dialectType = sqlserver2005
    #数据库类型
    spring.datasource.bei.dbType = sqlserver
    #主键生成类型
    spring.datasource.bei.idType = 3
    

    我们在配置文件里面创建一系列以spring.datasource.bei的配置,那么我们要怎么样把这些配置加载进去呢

    • 3 映射配置文件
    1. 首先创建一个父类对象,对象内包括了数据库链接的字段
    package com.rcsit.qyd.core.db;
    
    /**
     * DESC: S基础数据库配置,所有数据库配置需要继承此类
     * USER:hmily
     * DATE:2017/11/5
     * TIME:14:51
     */
    public class BaseDB {
        private String url;
        private String username;
        private String password;
        private String driverClass;
        private String dialectType = "mysql";
        private String dbType = "mysql";
    
        /**
         * AUTO->`0`("数据库ID自增")
         * INPUT->`1`(用户输入ID")
         * ID_WORKER->`2`("全局唯一ID")
         * UUID->`3`("全局唯一ID")
         */
        private Integer idType = 3;
    
    
        public String getDialectType() {
            return dialectType;
        }
    
        public void setDialectType(String dialectType) {
            this.dialectType = dialectType;
        }
    
        public String getDbType() {
            return dbType;
        }
    
        public void setDbType(String dbType) {
            this.dbType = dbType;
        }
    
        public Integer getIdType() {
            return idType;
        }
    
        public void setIdType(Integer idType) {
            this.idType = idType;
        }
    
        public String getDriverClass() {
            return driverClass;
        }
    
        public void setDriverClass(String driverClass) {
            this.driverClass = driverClass;
        }
    
        public String getUrl() {
            return url;
        }
    
        public void setUrl(String url) {
            this.url = url;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    }
    
    1. 创建一个BeiDb类,来映射配置文件中的数据
    package com.rcsit.qyd.core.db;
    
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Profile;
    
    /**
     *
     *  BEI数据库
     * Created by hmily on 2017/8/29.
     */
    @Profile("bei")
    @Configuration
    @ConfigurationProperties(prefix = "spring.datasource.bei")
    public class BeiDB extends BaseDB{
    
    }
    
    

    这样通过SpringBoot提供的
    @Configuration
    @ConfigurationProperties(prefix = "spring.datasource.bei")
    注解可以实现配置文件的映射,是不是方便又会计呢。

    • Mybatis配置
      配置我们的数据源,直接上代码
    package com.rcsit.qyd.core.db.mybatisConfig;
    
    
    import com.atomikos.jdbc.nonxa.AtomikosNonXADataSourceBean;
    import com.baomidou.mybatisplus.entity.GlobalConfiguration;
    import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
    import com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean;
    import com.rcsit.qyd.core.db.BeiDB;
    import com.rcsit.qyd.core.db.DevDB;
    import org.apache.ibatis.plugin.Interceptor;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.mybatis.spring.SqlSessionTemplate;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Primary;
    import org.springframework.context.annotation.Profile;
    import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
    
    import javax.sql.DataSource;
    import java.sql.SQLException;
    
    /**配置bei数据源
     * Created by hmily on 2017/8/29.
     */
    @Configuration
    @Profile("bei")
    @MapperScan(basePackages = "com.rcsit.qyd.dao.bei" ,sqlSessionTemplateRef = "beiSqlSessionTemplate")
    public class BeiDB2Mybatis {
    
        @Primary
        @Bean(name = "beiDataSource")
        public DataSource devDataSource(BeiDB dbConfig) throws SQLException {
            AtomikosNonXADataSourceBean nonXADataSourceBean = new AtomikosNonXADataSourceBean();
            nonXADataSourceBean.setUrl(dbConfig.getUrl());
            nonXADataSourceBean.setDriverClassName(dbConfig.getDriverClass());
            nonXADataSourceBean.setUser(dbConfig.getUsername());
            nonXADataSourceBean.setPassword(dbConfig.getPassword());
            nonXADataSourceBean.setUniqueResourceName("bei");
            return nonXADataSourceBean;
        }
    
        @Bean(name = "beiSqlSessionFactory")
        public SqlSessionFactory devSqlSessionFactory(@Qualifier("beiDataSource") DataSource dataSource, @Qualifier("beiGlobalConfiguration")GlobalConfiguration globalConfiguration, BeiDB dbConfig ) throws Exception {
            MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean();
            PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
            paginationInterceptor.setDialectType(dbConfig.getDialectType());
            factoryBean.setPlugins(new Interceptor[]{paginationInterceptor});
            factoryBean.setGlobalConfig(globalConfiguration);
            factoryBean.setDataSource(dataSource);
            factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:com/rcsit/qyd/dao/bei/xml/*.xml"));
            return factoryBean.getObject();
        }
    
    
        @Bean(name = "beiGlobalConfiguration")
        public GlobalConfiguration devGlobalConfiguration(BeiDB dbConfig ){
            GlobalConfiguration globalConfiguration =  new GlobalConfiguration();
            globalConfiguration.setDbType(dbConfig.getDbType());
            globalConfiguration.setIdType(dbConfig.getIdType());
    
            return globalConfiguration;
        }
    
        @Bean(name = "beiSqlSessionTemplate")
        public SqlSessionTemplate devSqlSessionTemplate(@Qualifier("beiSqlSessionFactory") SqlSessionFactory sqlSessionFactory){
            return new SqlSessionTemplate(sqlSessionFactory);
        }
    }
    
    

    从上面代码中可以看出,我们基于SpringBoot注解的配置,简单明了。
    其中
    @MapperScan(basePackages = "com.rcsit.qyd.dao.bei" ,sqlSessionTemplateRef = "beiSqlSessionTemplate")
    给我们指定了dao层对应的包名,Spring将对包中类进行Bean的初始化

    factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:com/rcsit/qyd/dao/bei/xml/.xml"));
    在这里,我们写明了我们的xml映射文件的具体配置位置,需要注意的是通过Maven进行的项目管理,我们需要写明打包时包含.xml文件,否则xml将会被抛弃。
    到了这里,我们大抵就搭建起了一个简单SSM框架。有兴趣的同学还可以引入JPA,JTA数据库连接池等,本文的代码是基于spring-boot-starter-jta-atomikos,JTA的一个实例框架

    3.实例代码

    创建实体

    @TableName("user")
    public class User extends Model<User> {
    
        /** 用户ID */
        private Long id;
    
        /** 用户名 */
        private String name;
    
        /** 用户年龄 */
        private Integer age;
    
        @TableField(exist = false)
        private String state;
    }
    

    创建数据访问层

    public interface UserMapper extends BaseMapper<User> {
        @Select("selectUserList")
        List<User> selectUserList(Pagination page,String state);
    }
    

    创建服务实现层

    @Service
    public class UserService extends ServiceImpl<UserMapper, User>{
        public Page<User> selectUserPage(Page<User> page, String state) {
            page.setRecords(baseMapper.selectUserList(page,state));
            return page;
        }
    }
    

    创建测试文件

          EntityWrapper ew=new EntityWrapper();
           ew.setEntity(new User());
           String name="wang";
           Integer age=16;
           ew.where("name = {0}",name).andNew("age > {0}",age).orderBy("age");
           List<User> list = userService.selectList(ew);
           Page page = userService.selectPage(page, ew);
    

    通过MybatisPlus给我们提供了多种多样的数据访问操作传统模式下,我们可以编写Mapper.xml进行SQL语句的编写,实现SQL统一管理。
    MybatisPlus还给我们提供了一些基础的操作,我们可以通过继承BaseMapper 实现快速的数据库CRUD等操作,通过EntityWrapper脱离Xml文件。

    4 总结

    MybatisPlus是一款非常优质的开源软件,它给我们提供了Mybatis框架的多种解决方案,可以帮助我们进行项目的敏捷开发和快速实现。这里只是做了一些简单的介绍,还有其它丰富多彩的功能等着我们去探索。

    相关文章

      网友评论

          本文标题:SpringBoot集成MybatisPlus

          本文链接:https://www.haomeiwen.com/subject/aorknxtx.html