在日常开发中,数据持久技术使用的架子使用频率最高的有3个,即spring-jdbc , spring-jpa, spring-mybatis.详情可以看我之前的一篇文章spring操作数据库的3个架子 .

spring-jdbc封装的比较少,需要在代码中拼接sql,不太适合大规模的企业级别的开发。
spring-jpa封装略多,适合开发后台管理类的系统,可以减少大量重复工作。

但是在当下的互联网大环境下,spring-mybatis既带来了开发的便捷性,也不失灵活性,特别适合性能要求高,可以灵活改变的场景。本篇文章大致回顾一下基于springboot的mybatis的配置开发要点以及基于maven插件的代码自动生成。

hello, springboot集成mybatis以及代码生成器!

springboot集成Mybatis


springboot集成Mybatis有大把的文章,不过如果撇开别人的观点,你觉得从0开始配置,应该有哪几个步骤呢?

我觉得大致分为如下几个要点:

  1. 引入依赖,数据库驱动,mybatis的starter;
  2. 配置数据库连接信息,连接池信息;
  3. 配置mybatis的核心配置信息;比如entity位置,执行器类型,xml的位置;
  4. 配置springboot的Mybatis注解,主要是开启支持,然后是mapper的地址;
  5. 测试启动成功:可以放到健康检查里面去做;

springboot集成Mybatis的关键步骤:

集成完毕之后,剩下的就是使用代码生成器,生成好常规的entity,xml,mapper, example 这些基础代码,然后结合业务逻辑,新增一些新的mapper的方法代码;

下面跟我一起来一步一步集成springboot:

1 依赖

使用spring initializr创建项目,引入如下依赖:

依赖说明如下:

2 数据源配置

数据源使用springboot默认自带的hikari数据源;
配置如下:

数据库连接信息

spring.datasource.url=jdbc:mysql://10.19.174.11:3306/demo_datasource
spring.datasource.username=lxdev
spring.datasource.password=db@LX4devtmp123
spring.datasource.type=com.zaxxer.hikari.HikariDataSource

数据连接池配置信息

spring.datasource.hikari.pool-name=demo_mybatis_and_plugin_pool
spring.datasource.hikari.maximum-pool-size=5
spring.datasource.hikari.allow-pool-suspension=false

3 mybatis的配置

mybatis主要是配置mapper-locations,type-alias-package,以及驼峰对应关系,执行器的类型等;

#mybatis配置
mybatis.mapper-locations=classpath:com/springbootpractice/demo/mybatis/plugin/dao/xml/*.xml
mybatis.type-aliases-package=com.springbootpractice.demo.mybatis.plugin.dao.entity
mybatis.executor-type=reuse
mybatis.configuration.map-underscore-to-camel-case=true
mybatis.configuration.cache-enabled=true
mybatis.lazy-initialization=true

4 入口@MapperScan配置

告诉应用程序mapper接口所在的包位置,以及标识注解。

package com.springbootpractice.demo.mybatis.plugin;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.stereotype.Repository; @SpringBootApplication
@MapperScan(annotationClass = Repository.class,
basePackages = "com.springbootpractice.demo.mybatis.plugin.dao.mapper")
public class DemoMybatisAndPluginApplication { public static void main(String[] args) {
SpringApplication.run(DemoMybatisAndPluginApplication.class, args);
} }

5 数据库的健康检查

首先配置好actuator,开放health端点;

#ops配置
management.endpoints.web.exposure.include=*
management.endpoints.enabled-by-default=false
management.endpoint.health.enabled=true
management.endpoint.health.show-details=always

6 检查数据库连接状态

启动程序, curl http://localhost:8080/actuator/health/db  可以检查数据库的连接状态,正常返回结果如下:

{
status: "UP",
details:- {
database: "MySQL",
result: 1,
validationQuery: "/* ping */ SELECT 1"
}
}

至此,springboot集成mybatis的步骤完成了。但是一些模板代码,需要记忆吗?记忆起来很痛苦应该。所以,我们还应该配置一下mybatis的代码生成插件,生成好一些常用的代码,然后在生成的代码的基础上添加一些自己的持久化的mapper方法,提供给业务层调用。

代码生成器


代码生成器,mybatis官网有介绍。配置分为插件配置和生成配置。本文主要通过maven的插件来进行常规的代码生成。

官网提供的代码生成插件介绍

插件配置

主要使用的是maven插件,配置如下:主要是需要配置生成代码配置文件的位置;

<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
<configuration>
<configurationFile>${project.basedir}/src/main/resources/generateConfig.xml</configurationFile>
<verbose>false</verbose>
<overwrite>true</overwrite>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.31</version>
</dependency>
<dependency>
<groupId>com.itfsw</groupId>
<artifactId>mybatis-generator-plugin</artifactId>
<version>1.3.8</version>
</dependency>
</dependencies>
</plugin>

配置要点如下:

生成代码配置

主要配置几个生成代码的位置,mapper,entity,example,xml,以及连接的数据库的信息。然后配置了几个我认为非常适用的增强插件。

配置代码如下

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<properties resource="jdbc.properties"></properties>
<context defaultModelType="flat" id="Mysql" targetRuntime="MyBatis3">
<property name="endingDelimiter" value="`"/>
<property name="beginningDelimiter" value="`"/>
<property name="javaFileEncoding" value="UTF-8"/>
<property name="autoDelimitKeywords" value="true"/>
<!-- 自定义注释插件 -->
<plugin type="com.itfsw.mybatis.generator.plugins.CommentPlugin">
<!-- 自定义模板路径 -->
<property name="template" value="src/main/resources/comment.ftl"/>
</plugin>
<plugin type="com.itfsw.mybatis.generator.plugins.LombokPlugin">
<!-- @Data 默认开启,同时插件会对子类自动附加@EqualsAndHashCode(callSuper = true),@ToString(callSuper = true) -->
<property name="@Data" value="true"/>
<!-- @Builder 必须在 Lombok 版本 >= 1.18.2 的情况下开启,对存在继承关系的类自动替换成@SuperBuilder -->
<property name="@Builder" value="true"/>
<!-- @NoArgsConstructor 和 @AllArgsConstructor 使用规则和Lombok一致 -->
<property name="@AllArgsConstructor" value="true"/>
<property name="@NoArgsConstructor" value="true"/>
<!-- @Getter、@Setter、@Accessors 等使用规则参见官方文档 -->
<property name="@Accessors(chain = true)" value="false"/>
<!-- 临时解决IDEA工具对@SuperBuilder的不支持问题,开启后(默认未开启)插件在遇到@SuperBuilder注解时会调用ModelBuilderPlugin来生成相应的builder代码 -->
<property name="supportSuperBuilderForIdea" value="false"/>
</plugin>
<!-- Mapper注解插件 -->
<plugin type="com.itfsw.mybatis.generator.plugins.MapperAnnotationPlugin">
<!-- @Mapper 默认开启 -->
<property name="@Mapper" value="false"/>
<!-- @Repository 默认关闭,开启后解决IDEA工具@Autowired报错 -->
<property name="@Repository" value="true"/>
</plugin>
<!-- MySQL分页插件 -->
<plugin type="com.itfsw.mybatis.generator.plugins.LimitPlugin">
<!-- 通过配置startPage影响Example中的page方法开始分页的页码,默认分页从0开始 -->
<property name="startPage" value="1"/>
</plugin>
<plugin type="com.itfsw.mybatis.generator.plugins.ExampleTargetPlugin">
<!-- 修改Example类生成到目标包下 -->
<property name="targetPackage" value="${code.base.package}.example"/>
</plugin>
<!-- 状态枚举生成插件 -->
<plugin type="com.itfsw.mybatis.generator.plugins.EnumTypeStatusPlugin">
<!-- 是否开启自动扫描根据约定注释格式生成枚举,默认true 注释[success(0):成功, fail(1):失败]-->
<property name="autoScan" value="true"/>
</plugin>
<!-- 逻辑删除插件 -->
<plugin type="com.itfsw.mybatis.generator.plugins.LogicalDeletePlugin">
<!-- 这里配置的是全局逻辑删除列和逻辑删除值,当然在table中配置的值会覆盖该全局配置 -->
<!-- 逻辑删除列类型只能为数字、字符串或者布尔类型 -->
<property name="logicalDeleteColumn" value="deleted"/>
<!-- 逻辑删除-已删除值 -->
<property name="logicalDeleteValue" value="1"/>
<!-- 逻辑删除-未删除值 -->
<property name="logicalUnDeleteValue" value="0"/>
<!-- 是否生成逻辑删除常量(只有开启时 logicalDeleteConstName、logicalUnDeleteConstName 才生效) -->
<property name="enableLogicalDeleteConst" value="true"/>
<!-- 逻辑删除常量名称,不配置默认为 IS_DELETED -->
<property name="logicalDeleteConstName" value="IS_DELETED"/>
<!-- 逻辑删除常量(未删除)名称,不配置默认为 NOT_DELETED -->
<property name="logicalUnDeleteConstName" value="NOT_DELETED"/>
</plugin>
<jdbcConnection connectionURL="${spring.datasource.url}" driverClass="${spring.datasource.driver-class-name}"
password="${spring.datasource.password}" userId="${spring.datasource.username}"/> <javaTypeResolver>
<property name="forceBigDecimals" value="true"/>
<property name="useJSR310Types" value="true"/>
</javaTypeResolver>
<javaModelGenerator targetPackage="${code.base.package}.entity"
targetProject="src/main/java">
<property name="trimStrings" value="true"/>
<property name="enableSubPackages" value="true"/>
</javaModelGenerator>
<sqlMapGenerator targetPackage="${code.base.package}.xml" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<javaClientGenerator targetPackage="${code.base.package}.mapper"
targetProject="src/main/java" type="XMLMAPPER">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator> <table domainObjectName="UserLoginExtEntity" tableName="user_login_ext"
enableDeleteByExample="false" enableDeleteByPrimaryKey="false">
<generatedKey column="id" identity="true" sqlStatement="MySql"/>
</table>
</context>
</generatorConfiguration>

此外,还把两个信息配置外部化了。
jdbc.properties : 主要配置数据连接信息,父包名;

spring.datasource.url=jdbc:mysql://10.19.174.11:3306/demo_datasource
spring.datasource.username=lxdev
spring.datasource.password=db@LX4devtmp123
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
code.base.package=com.springbootpractice.demo.mybatis.plugin.dao

comment.ftl 配置了注释生成的格式;

<?xml version="1.0" encoding="UTF-8"?>
<template>
<comment ID="addJavaFileComment"></comment>
<comment ID="addComment"></comment>
<comment ID="addRootComment"></comment>
<comment ID="addFieldComment"><![CDATA[
<#if introspectedColumn??>
/**
<#if introspectedColumn.remarks?? && introspectedColumn.remarks != ''>
<#list introspectedColumn.remarks?split("\n") as remark>
* ${remark} 对应数据库表字段: ${introspectedTable.fullyQualifiedTable}.${introspectedColumn.actualColumnName}
</#list>
</#if>
*/
<#else>
</#if>
]]></comment>
<comment ID="addModelClassComment"><![CDATA[
/**
* @author: carter
* 对应数据库表: ${introspectedTable.fullyQualifiedTable}
*/
]]></comment>
<comment ID="addClassComment"></comment>
<comment ID="addEnumComment"></comment>
<comment ID="addInterfaceComment"></comment>
<comment ID="addGetterComment"></comment>
<comment ID="addSetterComment"></comment>
<comment ID="addGeneralMethodComment"></comment>
</template>

**

小结


通过本篇文章你可以学到如下内容:

  1. 0基础为你的springboot应用集成mybatis;
  2. 配置mybatis的代码生成器插件,并用于生成代码,提高工作效率;

代码获取点我!

springboot集成mybatis,配置好代码生成插件之后,就可以有大把时间专注于业务逻辑的开发,快速的完成研发工作,有大把的时间下班回去陪娃了。该demo可以用于生产环境,经过产品试验。放心使用,拿走不谢!

不管你有没有收获,美女还是要送的,最近在追剧,猜猜看这个美女是谁?鸡腿仙女送给你。

原创不易,转载请注明出处。

0120 springboot集成Mybatis和代码生成器的更多相关文章

  1. springboot集成mybatis(二)

    上篇文章<springboot集成mybatis(一)>介绍了SpringBoot集成MyBatis注解版.本文还是使用上篇中的案例,咱们换个姿势来一遍^_^ 二.MyBatis配置版(X ...

  2. springboot集成mybatis(一)

    MyBatis简介 MyBatis本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation迁移到了google code,并且改名为MyB ...

  3. SpringBoot 集成Mybatis 连接Mysql数据库

    记录SpringBoot 集成Mybatis 连接数据库 防止后面忘记 1.添加Mybatis和Mysql依赖 <dependency> <groupId>org.mybati ...

  4. SpringBoot Mybatis整合(注解版),SpringBoot集成Mybatis(注解版)

    SpringBoot Mybatis整合(注解版),SpringBoot集成Mybatis(注解版) ================================ ©Copyright 蕃薯耀 2 ...

  5. SpringBoot集成Mybatis并具有分页功能PageHelper

    SpringBoot集成Mybatis并具有分页功能PageHelper   环境:IDEA编译工具   第一步:生成测试的数据库表和数据   SET FOREIGN_KEY_CHECKS=0;   ...

  6. Springboot集成mybatis(mysql),mail,mongodb,cassandra,scheduler,redis,kafka,shiro,websocket

    https://blog.csdn.net/a123demi/article/details/78234023  : Springboot集成mybatis(mysql),mail,mongodb,c ...

  7. BindingException: Invalid bound statement (not found)问题排查:SpringBoot集成Mybatis重点分析

    重构代码,方法抛出异常:BindingException: Invalid bound statement (not found) 提示信息很明显:mybatis没有提供某方法 先不解释问题原因和排查 ...

  8. SpringBoot集成Mybatis配置动态数据源

    很多人在项目里边都会用到多个数据源,下面记录一次SpringBoot集成Mybatis配置多数据源的过程. pom.xml <?xml version="1.0" encod ...

  9. SpringBoot集成Mybatis实现多表查询的两种方式(基于xml)

     下面将在用户和账户进行一对一查询的基础上进行介绍SpringBoot集成Mybatis实现多表查询的基于xml的两种方式.   首先我们先创建两个数据库表,分别是user用户表和account账户表 ...

随机推荐

  1. 剑指offer-字符的所有组合,复制复杂链表,二叉树中和为某一值的路径

    字符的所有组合 描述: 输入一个字符串,求这个字符串中的字符的所有组合.如:"abc",组合为"a" "b" c" "a ...

  2. CommonJs模块化(nodejs模块规范)

    1.概述: Node应用由模块组成,采用CommonJS模块规范. 根据这个规范,每个文件就是一个模块,有自己的作用域.在一个文件里面定义的变量.函数.类,都是私有的,对其他文件不可见. 如果想在多个 ...

  3. Golang模块之HTTP

    HTTP客户端和服务端 Go语言中内置net/http包提供了HTTP客户端和服务端的实现 HTTP服务端 package main import ( "encoding/json" ...

  4. 解决Python3下map函数的显示问题

    今天小编就为大家分享一篇解决Python3下map函数的显示问题,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧map函数是Python里面比较重要的函数,设计灵感来自于函数式编程.P ...

  5. 简单的leetcode题

    简单的leetcode题 环绕字符串中唯一的子字符串 把字符串 s 看作是\("abcdefghijklmnopqrstuvwxyz"\)的无限环绕字符串,所以 s 看起来是这样的 ...

  6. Redis入门-01

    目录 使用场景 支持的数据类型 主从复制 原理 配置 哨兵机制 持久化 RDB(Redis Database) AOF(Append Only File) redis(Remote DIctionar ...

  7. iptables (二) nat & tcp_wrapper

    一.nat 之前网络防火墙的示例中,如果内网是私网地址,那么内网主机如何与外网通信呢? 这时候,iptables要实现内网和外网通信,有两种方式: nat: Network Address Trans ...

  8. Open Live Writer(olw)博客写作软件

    前言 wlw似乎不再提供下载了,从微软的官网下载安装程序之后,无法联网下载olw组件,所以写博客改用olw. olw是wlw的开源版本,所以wlw上的操作是可以在olw上继续使用的. 关于wlw的知识 ...

  9. CF468A | 24 Game 找规律+打表

    (翻译版本来自 Luogu by lonelysir ) 题目描述 小X一直很喜欢一个纸牌游戏:"24点",但最近他发现这个游戏太简单了,所以他发明了一个新游戏. 你有一个整数序列 ...

  10. 正则表达式[\w]+,\w+,[\w+]

    正则表达式[\w]+,\w+,[\w+] 三者区别? [],[ABC]+,[\w./-]+ 表达什么? 正则表达式[\w]+,\w+,[\w+] 三者有何区别:[\w]+和\w+没有区别,都是匹配数字 ...