三个JAVA臭皮匠

SpringBoot+MybatisPlus+Druid极速搭建

2018-08-22  本文已影响83人  后厂村老司机

前言

听说你又有新需求了?
什么?又是对某些表的增删改查?
什么?还要从数据库一直写到dao层?还要配置mapper.xml文件?完事儿之后还要写service层、controller层?
什么?遇到条件查询还要写dao层和xml文件中的sql语句?
什么?有新需求了,要加分页?使用pageHelper文件?
搬砖的活儿怎么配得上你一代码神的气质?
少年,看你筋骨奇特,配上mybatis plus必能摆脱搬砖的苦恼。一扫以上所有问题!
废话不多说,项目git地址 https://github.com/KouLouYiMaSi/mybatis-plus.git

Mybatis Plus优势

SpringBoot整合实战

step1
配置maven依赖,最重要的是上面的第一个和第二个,第二个负责生成代码做模板

    <dependencies>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>2.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.16</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

step2
配置application.xml文件,有了这个配置就不用写druid的配置类了,这是新版Druid的糖

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true
    username: username
    password: password
    druid:
      # 初始化大小,最小,最大
      initial-size: 5
      min-idle: 5
      maxActive: 20
      # 配置获取连接等待超时的时间
      maxWait: 60000
      # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
      timeBetweenEvictionRunsMillis: 60000
      # 配置一个连接在池中最小生存的时间,单位是毫秒
      minEvictableIdleTimeMillis: 300000
      validationQuery: SELECT 1 FROM DUAL
      testWhileIdle: true
      testOnBorrow: false
      testOnReturn: false
      # 打开PSCache,并且指定每个连接上PSCache的大小
      poolPreparedStatements: true
      maxPoolPreparedStatementPerConnectionSize: 20
      # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
      filters: stat,wall
      # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
      connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
      # 配置DruidStatFilter
      web-stat-filter:
        enabled: true
        url-pattern: "/*"
        exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*"
      # 配置DruidStatViewServlet
      stat-view-servlet:
        url-pattern: "/druid/*"
        # IP白名单(没有配置或者为空,则允许所有访问)
        allow: 127.0.0.1,192.168.163.1
        # IP黑名单 (存在共同时,deny优先于allow)
        deny: 192.168.1.73
        #  禁用HTML页面上的“Reset All”功能
        reset-enable: false
        # 登录名
        login-username: admin
        # 登录密码
        login-password: 123456
mybatis-plus:
  mapper-locations: classpath:/com/example/demo/mapper/*/*.xml
  typeAliasesPackage: com.example.demo.entity
  global-config:
    id-type: 2
    field-strategy: 2
    db-column-underline: true
    refresh-mapper: true
  configuration:
    map-underscore-to-camel-case: true
    cache-enabled: false
server:
  port: 8082

step3
配置生成代码的类和分页插件配置类

package com.example.demo.config;

import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.DbType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

/**
 * 小混蛋
 */
public class CodeGenerator {

    public static final String DB_URL = "jdbc:mysql://localhost:3306/hawkeye?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true";
    public static final String USER_NAME = "用户名";
    public static final String PASSWORD = "密码";
    public static final String DRIVER = "com.mysql.jdbc.Driver";
    public static final String AUTHOR = "作者名称";
    //生成的文件输出到哪个目录
    public static final String OUTPUT_FILE = "D:\\codeGen";
    //包名,会按照com/example/demo这种形式生成类
    public static final String PACKAGE = "com.example.demo";
    //TODO 更多配置请参考http://mp.baomidou.com/#/generate-code

    public void generateByTables(boolean serviceNameStartWithI, String... tableNames) {
        GlobalConfig config = new GlobalConfig();
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        dataSourceConfig.setDbType(DbType.MYSQL)
                .setUrl(DB_URL)
                .setUsername(USER_NAME)
                .setPassword(PASSWORD)
                .setDriverName(DRIVER);
        StrategyConfig strategyConfig = new StrategyConfig();
        strategyConfig
                .setCapitalMode(true)
                .setEntityLombokModel(false)
                .setDbColumnUnderline(true)
                .setNaming(NamingStrategy.underline_to_camel)
                .setInclude(tableNames);//修改替换成你需要的表名,多个表名传数组
        config.setActiveRecord(false)
                .setAuthor(AUTHOR)
                .setOutputDir(OUTPUT_FILE)
                .setFileOverride(true);
        if (!serviceNameStartWithI) {
            config.setServiceName("%sService");
        }
        new AutoGenerator().setGlobalConfig(config)
                .setDataSource(dataSourceConfig)
                .setStrategy(strategyConfig)
                .setPackageInfo(
                        new PackageConfig()
                                .setParent(PACKAGE)
                                .setController("controller")
                                .setEntity("entity")
                ).execute();
    }
}
package com.example.demo.config;
import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@MapperScan("com.example.demo.mapper")
public class MybatisPlusConfig {
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
}

step4
写一个junit test类,用于生成代码

@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests {
    @Test
    public void contextLoads() {
        CodeGenerator gse = new CodeGenerator();
        //要给那些表生成
        gse.generateByTables(false,"tb_user", "tb_role","tb_permission","tb_user_role","tb_role_permission");
    }
}

step5
执行junit test类,生成代码之后就可以用了

mybatis-plus用法

@Controller
@RequestMapping("/tbUser")
public class TbUserController {
    @Autowired
    private TbUserService tbUserService;

    @RequestMapping("/all")
    @ResponseBody
    public List<TbUser> getAll(){
        return tbUserService.selectList(new EntityWrapper<TbUser>());
    }
    @RequestMapping("/allbypage")
    @ResponseBody
    public Page<TbUser> getAllByPage(Integer pageNum,Integer pageSize){
        return tbUserService.selectPage(new Page<TbUser>(pageNum,pageSize));
    }
    @RequestMapping("/insert")
    @ResponseBody
    public boolean insert(TbUser tbUser){
        return tbUserService.insert(tbUser);
    }
    @RequestMapping("/insert")
    @ResponseBody
    public boolean delete(Integer id){
        return tbUserService.deleteById(id);
    }

    @RequestMapping("/insert")
    @ResponseBody
    public List<TbUser> getUserById(Integer uid){
        return tbUserService.selectList(
                new EntityWrapper<TbUser>()
                .eq("uid",uid)
        );
    }
}

总结

以后再做管理系统建完表就直接生成,反正一般都是给内部人用,后期涉及到优化也就是加索引什么的。

上一篇 下一篇

猜你喜欢

热点阅读