SpringBoot集成MybatisPlus

2018-01-03  本文已影响424人  Jayden梅

1.MybatisPlus

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

2框架搭建

      <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus</artifactId>
            <version>2.1.6</version>
        </dependency>

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

#配置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的配置,那么我们要怎么样把这些配置加载进去呢

  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")
注解可以实现配置文件的映射,是不是方便又会计呢。

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框架的多种解决方案,可以帮助我们进行项目的敏捷开发和快速实现。这里只是做了一些简单的介绍,还有其它丰富多彩的功能等着我们去探索。

上一篇下一篇

猜你喜欢

热点阅读