博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpingBoot系列教程(一):整合Mybatis-plus+Druid
阅读量:3899 次
发布时间:2019-05-23

本文共 11515 字,大约阅读时间需要 38 分钟。

特别说明

  • MyBatis—PLus的3.0+版本对于LocalDateTime的支持有些差异,对于Druid的版本也有些要求。pom.xml文件里面的俩者的版本是我自己试验过的,可以正常使用,如果自己更换版本,出现LocalDateTime问题,请注意版本问题。
  • 代码生成工具使用的是mybatis-plus-generator,但没有完全按照官方文档来搞,本着能用就行的目的,一些地方与官方有点出入,生成代码之后,还需微调一下,请注意。
  • 数据库文件MySql,末尾我会提供,当然您也可以使用自己的数据库。

整合Mybatis_PLus

  1. 整体的项目结构。

在这里插入图片描述

  1. 修改pom.xml文件

    4.0.0
    org.springframework.boot
    spring-boot-starter-parent
    2.2.2.RELEASE
    com.mall
    mall
    0.0.1-SNAPSHOT
    mall
    Demo project for Spring Boot
    1.8
    1.8
    3.2.0
    1.1.21
    2.3.29
    log4j
    log4j
    1.2.16
    compile
    org.springframework.boot
    spring-boot-starter-web
    compile
    mysql
    mysql-connector-java
    runtime
    com.alibaba
    druid-spring-boot-starter
    ${druid.version}
    com.baomidou
    mybatis-plus-boot-starter
    ${mybatis-plus.version}
    com.baomidou
    mybatis-plus-generator
    ${mybatis-plus.version}
    org.freemarker
    freemarker
    ${freemarker.version}
    org.springframework.boot
    spring-boot-starter-aop
    org.projectlombok
    lombok
    true
    org.springframework.boot
    spring-boot-starter-test
    test
    org.junit.vintage
    junit-vintage-engine
    org.springframework.boot
    spring-boot-maven-plugin
    src/main/java
    false
    **/mapper/*.xml
  2. 创建代码生成类。一些配置会给出简单的注释,如果有需要的话,推荐您阅读官方文档。文件创建好之后,就可以运行main方法了,控制台会打印出创建了哪些文件的信息。

    package com.mall.utils;import com.baomidou.mybatisplus.annotation.DbType;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.NamingStrategy;import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;// 演示例子,执行 main 方法控制台输入模块表名回车自动生成对应项目目录中public class CodeGenerator {
    /** * * @Title: main * @Description: 生成 * @param args */ public static void main(String[] args) {
    AutoGenerator mpg = new AutoGenerator(); mpg.setTemplateEngine(new FreemarkerTemplateEngine()); // 全局配置 GlobalConfig gc = new GlobalConfig(); gc.setOutputDir("D:\\GitHubSpace\\Universal_Mall\\UniversalMall\\mall_integration\\src\\main\\java");//输出文件路径 gc.setFileOverride(true); gc.setActiveRecord(false);// 不需要ActiveRecord特性的请改为false gc.setEnableCache(false);// XML 二级缓存 gc.setBaseResultMap(true);// XML ResultMap gc.setBaseColumnList(false);// XML columList gc.setAuthor("gxp");// 作者 // 自定义文件命名,注意 %s 会自动填充表实体属性! gc.setControllerName("UserController"); gc.setServiceName("UserService"); gc.setServiceImplName("UserServiceImpl"); gc.setMapperName("UserMapper"); gc.setXmlName("UserMapper"); mpg.setGlobalConfig(gc); // 数据源配置 DataSourceConfig dsc = new DataSourceConfig(); dsc.setDbType(DbType.getDbType("com.alibaba.druid.pool.DruidDataSource")); dsc.setDriverName("com.mysql.cj.jdbc.Driver"); dsc.setUsername("root"); dsc.setPassword("myoa888"); dsc.setUrl("jdbc:mysql://localhost:3308/universal_mall?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&serverTimezone=UTC"); mpg.setDataSource(dsc); // 策略配置 StrategyConfig strategy = new StrategyConfig(); // strategy.setTablePrefix(new String[] { "sys_" });// 此处可以修改为您的表前缀 strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略 strategy.setInclude(new String[] {
    "tb_user" }); // 需要生成的表 strategy.setSuperServiceClass(null); strategy.setSuperServiceImplClass(null); strategy.setSuperMapperClass(null); mpg.setStrategy(strategy); // 包配置 PackageConfig pc = new PackageConfig(); pc.setParent("com.mall"); pc.setController("controller"); pc.setService("service"); pc.setServiceImpl("service.impl"); pc.setMapper("dao"); pc.setEntity("model"); pc.setXml("mapper"); mpg.setPackageInfo(pc); // 执行生成 mpg.execute(); }}
  3. 创建完成之后,会发现有个dao对于的xml文件,会现在java的目录下,请手动把他移到resources目录下。(其实可以完善下那个代码生成类的方法逻辑,比如生成俩个实例对象或者循环俩次一个JAVA目录,一个resources目录,但我比较懒还是喜欢复制下。)

在这里插入图片描述

  1. 打开UserController文件,修改里面的具体代码为
@RestController@RequestMapping("user")public class UserController {
@Autowired public UserService userService; @RequestMapping("getAllUser") public List
getAllUsers(){
List
userList = userService.list(); return userList; }}
  1. Service层的代码暂时不用调整。Mapper的修改如下,@Mapper注解的作用是注入到bean,当然可以在SpringBoot的入口类去添加@MapperScan来设置扫描范围。

    @Mapperpublic interface UserMapper extends BaseMapper
    {
    }
  2. 配置配置文件,我这里配置的YML格式的。

    # 配置mybatis-plusmybatis-plus:  mapper-locations: classpath:/mapper/*.xml # 配置扫描xml  type-aliases-package: com.mall.model      # 实体扫描,多个package用逗号或者分号分隔

整合Druid

  1. 配置配置文件,我这里配置的YML格式的。

    #数据库连接配置spring:  datasource:    url: jdbc:mysql://localhost:3308/universal_mall?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&serverTimezone=UTC    username: root    password: myoa888    driver-class-name: com.mysql.jdbc.Driver    type: com.alibaba.druid.pool.DruidDataSource    platform: mysql    # 下面为连接池的补充设置,应用到上面所有数据源中    # 初始化大小,最小,最大    initialSize: 5    minIdle: 3    maxActive: 20    # 配置获取连接等待超时的时间    maxWait: 60000    # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒    timeBetweenEvictionRunsMillis: 60000    # 配置一个连接在池中最小生存的时间,单位是毫秒    minEvictableIdleTimeMillis: 30000    validationQuery: select 'x'    testWhileIdle: true    testOnBorrow: false    testOnReturn: false    # 打开PSCache,并且指定每个连接上PSCache的大小    poolPreparedStatements: true    maxPoolPreparedStatementPerConnectionSize: 20    # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙    filters: stat,wall,slf4j    # 通过connectProperties属性来打开mergeSql功能;慢SQL记录    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000    # 合并多个DruidDataSource的监控数据    #useGlobalDataSourceStat: true
  2. 创建DruidStatFilter.java

    package com.mall.config;import com.alibaba.druid.support.http.WebStatFilter;import javax.servlet.annotation.WebFilter;import javax.servlet.annotation.WebInitParam;@WebFilter(filterName="druidWebStatFilter",urlPatterns="/*",        initParams={
    @WebInitParam(name="exclusions",value="*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*")//忽略资源 })public class DruidStatFilter extends WebStatFilter{
    }
  3. 创建DruidStatViewServlet.java

    package com.mall.config;import com.alibaba.druid.support.http.StatViewServlet;import javax.servlet.annotation.WebInitParam;import javax.servlet.annotation.WebServlet;@WebServlet(urlPatterns="/druid/*",  //启动项目后,访问监控页面的路径。        initParams={
    @WebInitParam(name="allow",value=""),// IP白名单(没有配置或者为空,则允许所有访问) /* @WebInitParam(name="deny",value="192.168.1.1"),*/// IP黑名单 (存在共同时,deny优先于allow) @WebInitParam(name="loginUsername",value="admin"),// 用户名 @WebInitParam(name="loginPassword",value="123456"),// 密码 @WebInitParam(name="resetEnable",value="false")// 禁用HTML页面上的“Reset All”功能 })public class DruidStatViewServlet extends StatViewServlet {
    private static final long serialVersionUID = -2688872071445249539L;}
  4. 启动类上面添加@ServletComponentScan 注解。自动注册Servlet、Filter、Listener

效果图

在这里插入图片描述在这里插入图片描述

登录Druid

在这里插入图片描述

数据库文件

  • 给出表的sql,库的话就自己根据需要创建吧。
/* Navicat Premium Data Transfer Source Server         : xoa Source Server Type    : MySQL Source Server Version : 50616 Source Host           : localhost:3308 Source Schema         : universal_mall Target Server Type    : MySQL Target Server Version : 50616 File Encoding         : 65001 Date: 19/02/2020 22:13:33*/SET NAMES utf8mb4;SET FOREIGN_KEY_CHECKS = 0;-- ------------------------------ Table structure for tb_user-- ----------------------------DROP TABLE IF EXISTS `tb_user`;CREATE TABLE `tb_user`  (  `id` bigint(20) NOT NULL AUTO_INCREMENT,  `username` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户名',  `password` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '密码,加密存储',  `phone` varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '注册手机号',  `created` datetime(0) NOT NULL COMMENT '创建时间',  `salt` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '密码加密的salt值',  PRIMARY KEY (`id`) USING BTREE,  UNIQUE INDEX `username`(`username`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 31 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用户表' ROW_FORMAT = Compact;-- ------------------------------ Records of tb_user-- ----------------------------INSERT INTO `tb_user` VALUES (28, 'zhangsan', 'e21d44f200365b57fab2641cd31226d4', '13600527634', '2018-05-25 17:52:03', '05b0f203987e49d2b72b20b95e0e57d9');INSERT INTO `tb_user` VALUES (30, 'leyou', '4de9a93b3f95d468874a3c1bf3b25a48', '15855410440', '2018-09-30 11:37:30', '4565613d4b0e434cb496d4eb87feb45f');SET FOREIGN_KEY_CHECKS = 1;

结尾

只是粗浅的一篇搭建博客,具体的配置,具体的使用请阅度官方文档

转载地址:http://pxden.baihongyu.com/

你可能感兴趣的文章
java解惑——易错知识点归纳总结
查看>>
Memcached 集群部署
查看>>
Memcached与Spring AOP构建数分布式据库前端缓存框架
查看>>
数据挖掘常用算法整理
查看>>
JNDI学习总结(一)——JNDI数据源的配置
查看>>
JNDI学习总结(二)——Tomcat下使用C3P0配置JNDI数据源
查看>>
JNDI学习总结(三)——Tomcat下使用Druid配置JNDI数据源
查看>>
JavaWeb学习总结(四十九)——简单模拟Sping MVC
查看>>
Struts1和Struts2的区别和对比(完整版)
查看>>
在Eclipse中初用lucene
查看>>
lucene在eclipse下运行
查看>>
eclipse 安装struts2 插件
查看>>
Liferay配置文件Tag标签参考
查看>>
JavaLiferay研究之十六:FCKeditor如何插入服务器上的资源?
查看>>
Liferay研究之十二:对Liferay框架的几点分析总结 收藏
查看>>
Eclipse快捷键大全(转载)
查看>>
Google爬虫如何抓取JavaScript的?
查看>>
SAP HANA SQL/MDX及TCP/IP端口介绍
查看>>
SAP HANA使用XS和HTTP创建proxy
查看>>
SAP HANA SLT在表中隐藏字段并传入HANA的方法
查看>>