SpringBoot整合Mybatis

一、简介

Mybatis是一个持久化框架,支持自定义sql、存储过程和高级映射。
Mybatis 3中文官方文档地址:https://mybatis.org/mybatis-3/zh/java-api.html

1.1 映射支持的jdbc类型
BIT   FLOAT   CHAR   TIMESTAMP   OTHER   UNDEFINED   TININT   REAL    VARCHAR   BINARY   BLOB   NVARCHAR   SMALLINT   DOUBLE   LONGVARCHAR   CLOB   NCHAR   INTEGER   NUMERIC   DATE   LONGVARBINARY   BOOLEAN   NCLOB   BIGINT   DECIMAL   TIME   NULL   CURSOR   ARRAY
二、SpringBoot整合Mybatis
2.1 添加依赖
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.3.0</version>
</dependency>
<dependency>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-core</artifactId>
    <version>1.3.3</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.10</version>
</dependency>
2.2 修改配置文件
spring:
  datasource:
    druid:
      username: 
      password: 
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/monster?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false
      max-active: 20 # 最大连接数
      initial-size: 5 # 初始化连接数
      min-idle: 5 # 最小连接数
      max-wait: 60000 # 连接等待超时时间
mybatis:
  ## 实体类
  type-aliases-package: mall.admin.mbg.entity
  ## mapper xml文件
  mapper-locations:
    - classpath*:mbg/mapper/*Mapper.xml
2.3 扫描mapper接口
package mall.admin.config;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@MapperScan(basePackages = {"mall.admin.mbg.mapper"})
public class MybatisConfig {
}
2.4 自动生成代码
GeneratorComment.java(构造实体类时添加上注释)
package mall.admin.mbg;

import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.dom.java.CompilationUnit;
import org.mybatis.generator.api.dom.java.Field;
import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
import org.mybatis.generator.internal.DefaultCommentGenerator;
import org.mybatis.generator.internal.util.StringUtility;

import java.util.Properties;

/**
 * @description
 * @author: hengDa.song
 * @date: 2021/4/20 15:31
 */
public class GeneratorComment extends DefaultCommentGenerator {

    private boolean addRemark=false;

    private static final String EXAMPLE_SUFFIX="Example";

    private static final String API_MODEL_PROPERTY_FULL_CLASS_NAME="io.swagger.annotations.ApiModelProperty";

    @Override
    public void addConfigurationProperties(Properties properties) {
        super.addConfigurationProperties(properties);
        this.addRemark= StringUtility.isTrue(properties.getProperty("addRemarkComments"));
    }

    @Override
    public void addFieldComment(Field field, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) {
        String remarks = introspectedColumn.getRemarks();
        if (addRemark&&StringUtility.stringHasValue(remarks)){
            if (remarks.contains("\"")){
                remarks.replace("\"","");
            }
            field.addJavaDocLine("@ApiModelProperty(value=\""+remarks+"\")");
        }
    }

    @Override
    public void addJavaFileComment(CompilationUnit compilationUnit) {
        super.addJavaFileComment(compilationUnit);
        if (!compilationUnit.isJavaInterface()&&!compilationUnit.getType().getFullyQualifiedName().contains(EXAMPLE_SUFFIX)){
            compilationUnit.addImportedType(new FullyQualifiedJavaType(API_MODEL_PROPERTY_FULL_CLASS_NAME));
        }
    }
}

generator.properties(构造代码数据库信息配置)
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/monster?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false
jdbc.userId=root
jdbc.password=Aaa#19930511
generator.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="generator\generator.properties"/>
    <context id="MySqlContext" targetRuntime="MyBatis3" defaultModelType="flat">
        <property name="beginningDelimiter" value="`"/>
        <property name="endingDelimiter" value="`"/>
        <property name="javaFileEncoding" value="UTF-8"/>
        <!-- 为模型生成序列化方法-->
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
        <!-- 为生成的Java模型创建一个toString方法 -->
        <plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
        <!--可以自定义生成model的代码注释-->
        <commentGenerator type="mall.admin.mbg.GeneratorComment">
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
            <property name="suppressAllComments" value="true"/>
            <property name="suppressDate" value="true"/>
            <property name="addRemarkComments" value="true"/>
        </commentGenerator>
        <!--配置数据库连接-->
        <jdbcConnection driverClass="${jdbc.driver}"
                        connectionURL="${jdbc.url}"
                        userId="${jdbc.userId}"
                        password="${jdbc.password}">
            <!--解决mysql驱动升级到8.0后不生成指定数据库代码的问题-->
            <property name="nullCatalogMeansCurrent" value="true"/>
        </jdbcConnection>
        <!--指定生成model的路径-->
        <javaModelGenerator targetPackage="mall.admin.mbg.entity" targetProject="mall-admin\src\main\java"/>
        <!--指定生成mapper.xml的路径-->
        <sqlMapGenerator targetPackage="mbg\mapper" targetProject="mall-admin\src\main\resources"/>
        <!--指定生成mapper接口的的路径-->
        <javaClientGenerator type="XMLMAPPER" targetPackage="mall.admin.mbg.mapper"
                             targetProject="mall-admin\src\main\java"/>
        <!--        生成全部表tableName设为%-->
        <table tableName="sys_admin">
            <generatedKey column="admin_id" sqlStatement="MySql" identity="true"/>
        </table>
        <table tableName="sys_role">
            <generatedKey column="role_id" sqlStatement="Mysql" identity="true"/>
        </table>
        <table tableName="sys_permission">
            <generatedKey column="permission_id" sqlStatement="Mysql" identity="true"/>
        </table>
        <table tableName="sys_org">
            <generatedKey column="org_id" sqlStatement="Mysql" identity="true"/>
        </table>
    </context>
</generatorConfiguration>
Generator.java(构造代码main)
package mall.admin.mbg;

import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.exception.InvalidConfigurationException;
import org.mybatis.generator.exception.XMLParserException;
import org.mybatis.generator.internal.DefaultShellCallback;

import java.io.IOException;
import java.io.InputStream;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 * @description
 * @author: hengDa.song
 * @date: 2021/4/20 15:32
 */
public class Generator {
    public static void main(String[] args) throws XMLParserException, IOException, InvalidConfigurationException, SQLException, InterruptedException {
        //mbg执行过程中的告警信息
        List<String> warning=new ArrayList<>();
        boolean overwrite=true;
        InputStream inputStream = Generator.class.getResourceAsStream("/generator/generator.xml");
        ConfigurationParser configurationParser = new ConfigurationParser(warning);
        Configuration configuration = configurationParser.parseConfiguration(inputStream);
        inputStream.close();
        DefaultShellCallback defaultShellCallback = new DefaultShellCallback(overwrite);
        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(configuration, defaultShellCallback, warning);
        myBatisGenerator.generate(null);
        for (String warn:warning){
            System.out.println(warn);
        }
    }
}

2.5 model、mapper接口、mapper xml
model
package mall.admin.mbg.entity;

import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.util.Date;

public class SysAdmin implements Serializable {
    @ApiModelProperty(value="主键")
    private String adminId;

    @ApiModelProperty(value="管理员账号")
    private String account;

    @ApiModelProperty(value="管理员密码")
    private String password;
	...
}
mapper接口
package mall.admin.mbg.mapper;

import java.util.List;
import mall.admin.mbg.entity.SysAdmin;
import mall.admin.mbg.entity.SysAdminExample;
import org.apache.ibatis.annotations.Param;

public interface SysAdminMapper {
    ....
}
mapper xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mall.admin.mbg.mapper.SysAdminMapper">
  <resultMap id="BaseResultMap" type="mall.admin.mbg.entity.SysAdmin">
    <id column="admin_id" jdbcType="VARCHAR" property="adminId" />
    <result column="account" jdbcType="VARCHAR" property="account" />
    <result column="password" jdbcType="VARCHAR" property="password" />
    <result column="head_pic" jdbcType="VARCHAR" property="headPic" />
    <result column="email" jdbcType="VARCHAR" property="email" />
    <result column="phone" jdbcType="CHAR" property="phone" />
    <result column="name" jdbcType="VARCHAR" property="name" />
    <result column="sex" jdbcType="INTEGER" property="sex" />
    <result column="status" jdbcType="INTEGER" property="status" />
    <result column="create_time" jdbcType="DATE" property="createTime" />
    <result column="update_time" jdbcType="DATE" property="updateTime" />
    <result column="login_time" jdbcType="DATE" property="loginTime" />
    <result column="last_login_time" jdbcType="DATE" property="lastLoginTime" />
    <result column="login_ip" jdbcType="VARCHAR" property="loginIp" />
    <result column="last_login_ip" jdbcType="VARCHAR" property="lastLoginIp" />
    <result column="salt" jdbcType="CHAR" property="salt" />
  </resultMap>
  ...
</mapper>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值