乐趣区

关于springboot:springboot-mybatis-配置

本文介绍 mybatis、mybatis-generator 配置应用。

依赖装置

<!-- 增加 mysql 相干插件 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
    <version>8.0.17</version>
</dependency>
<!-- 增加 mybatis 相干插件 -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.0</version>
</dependency>
<dependency>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-core</artifactId>
    <version>1.3.5</version>
</dependency>
<!-- 增加 mybatis 分页插件反对 依据需要可要可不要 -->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.0.0</version>
</dependency>

增加数据源 &mybatis 配置

springboot 中 mybatis 配置文档:http://mybatis.org/spring-boo…

application.properties 增加如下内容:

#================== mysql 数据库 =====================#
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/maven-test?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

#================== mybatis =====================#
#映射文件门路
mybatis.mapper-locations=classpath:mybatis/mapper/*Mapper.xml
#指定 mybatis 生成包
mybatis.type-aliases-package=com.chenglulu.mybatis.entity.*
#指定 mybatis 配置文件门路
mybatis.config-location=classpath:mybatis/mybatis-config.xml

mybatis 配置文件 mybatis-config.xml 如下

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC
 "-//mybatis.org//DTD Config 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <settings>
        <!-- 全局的映射器启用或禁用缓存。-->
        <setting name="cacheEnabled" value="true"/>
        <!-- 全局启用或禁用提早加载 -->
        <setting name="lazyLoadingEnabled" value="true"/>
        <!-- 容许或不容许多种后果集从一个独自的语句中返回 -->
        <setting name="multipleResultSetsEnabled" value="true"/>
        <!-- 应用列标签代替列名 -->
        <setting name="useColumnLabel" value="true"/>
        <!-- 容许 JDBC 反对生成的键 -->
        <setting name="useGeneratedKeys" value="false"/>
        <!-- 配置默认的执行器 -->
        <setting name="defaultExecutorType" value="SIMPLE"/>
        <!-- 设置超时工夫 -->
        <setting name="defaultStatementTimeout" value="60"/>
        <!-- 设置驼峰标识 -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
    <plugins>
        <plugin interceptor="com.github.pagehelper.PageInterceptor" />
    </plugins>
<!--    <mappers>-->
<!--        <package name="classpath:mybatis/mapper/*Mapper.xml"></package>-->
<!--    </mappers>-->
</configuration>

mybatis-generator 配置

classpath:mybatis 门路下新建 mybatis-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>
    <!--classPathEntry: 数据库的 JDBC 驱动, 换成你本人的驱动地位 可选 -->
    <!--    <classPathEntry  location="/Users/chenglulu/Documents/mysql-connector-java-8.0.17.jar"/>-->
    <!-- 一个数据库一个 con≤text,defaultModelType="flat" 大数据字段,不分表 --> 
    <context id="MysqlTables" targetRuntime="MyBatis3" defaultModelType="flat">
        <!-- 自动识别数据库关键字,默认 false,如果设置为 true,依据 SqlReservedWords 中定义的关键字列表;个别保留默认值,遇到数据库关键字(Java 关键字),应用 columnOverride 笼罩 -->
        <property name="autoDelimitKeywords" value="true"/>
        <!-- 生成的 Java 文件的编码 -->
        <property name="javaFileEncoding" value="utf-8"/>
        <!-- beginningDelimiter 和 endingDelimiter:指明数据库的用于标记数据库对象名的符号,比方 ORACLE 就是双引号,MYSQL 默认是 ` 反引号;-->
        <property name="beginningDelimiter" value="`"/>
        <property name="endingDelimiter" value="`"/>
        <!-- 格式化 java 代码 -->
        <property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>
        <!-- 格式化 XML 代码 -->
        <property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/>
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
        <plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
        <!-- 正文 -->
        <commentGenerator>
            <property name="suppressAllComments" value="true"/>
            <!-- 是否勾销正文 -->
            <property name="suppressDate" value="false"/> <!-- 是否生成正文代工夫戳 -->
        </commentGenerator>
        <!-- jdbc 连贯 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
 connectionURL="jdbc:mysql://localhost:3306/maven-test?serverTimezone=UTC" userId="root"
 password="che021392">
            <property name="nullCatalogMeansCurrent" value="true" />
        </jdbcConnection>
        <!-- 类型转换 -->
        <javaTypeResolver>
            <!-- 是否应用 bigDecimal,false 可主动转化以下类型(Long, Integer, Short, etc.)-->
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>
        <!-- 生成实体类地址 -->
        <javaModelGenerator targetPackage="com.chenglulu.mybatis.entity" targetProject="src/main/java">
            <!-- 是否容许子包 是否让 schema 作为包的后缀 -->
            <property name="enableSubPackages" value="false"/>
            <!-- 是否对 modal 增加构造函数 -->
            <property name="constructorBased" value="true"/>
            <!-- 从数据库返回的值去掉前后空格 -->
            <property name="trimStrings" value="true"/>
            <!-- 建设 modal 对象是否不可扭转 即生成的 modal 对象不会有 setter 办法,只有构造方法 -->
            <property name="immutable" value="false"/>
        </javaModelGenerator>
        <!-- 生成 map.xml 文件寄存地址 -->
        <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources/mybatis">
            <property name="enableSubPackages" value="false"/>
        </sqlMapGenerator>
        <!-- 生成接口 dao -->
        <javaClientGenerator targetPackage="com.chenglulu.mybatis.dao" targetProject="src/main/java" type="XMLMAPPER">
            <property name="enableSubPackages" value="false"/>
        </javaClientGenerator>
        <!-- table 能够有多个, 每个数据库中的表都能够写一个 table,tableName 示意要匹配的数据库表, 也能够在 tableName 属性中通过应用 % 通配符来匹配所有数据库表, 只有匹配的表才会主动生成文件 enableSelectByPrimaryKey 相应的配置示意是否生成相应的接口 -->
        <table tableName="users"
                schema="root"
                domainObjectName="Users"
                enableCountByExample="true"
                enableUpdateByExample="true"
                enableDeleteByExample="true"
                enableSelectByExample="true"
                selectByExampleQueryId="true"
                enableSelectByPrimaryKey="true"
                enableUpdateByPrimaryKey="true"
                enableDeleteByPrimaryKey="true">
        </table>
    </context>
</generatorConfiguration>

pom.xml 增加资源打包配置

<resources>
    <resource>
        <directory>src/main/resources</directory>
        <includes>
            <include>**/*.properties</include>
            <include>**/*.yml</include>
            <include>**/*.xml</include>
        </includes>
        <filtering>true</filtering>
    </resource>
</resources>

启动类增加 mapper 接口扫描

@SpringBootApplication
@MapperScan(basePackages = {"com.chenglulu.mybatis.dao"})
public class MySpringBootApplication {public static void main(String[] args){SpringApplication.run(MySpringBootApplication.class, args);
    }
}

示例

maven-test 数据库

首先新建 maven-test 数据库,并新建 users 表,如下图:

users 表构造如下:

生成 mapper、dao 实体类

执行 mvn mybatis-generator:generate -e 命令:

  • 连贯数据库,数据库为 mybatis-generator.xml 中配置的数据库连贯
  • 生成实体类,对应 mybatis-generator.xmltable

生成文件如下:

  • 生成 UsersMapper.xml 文件

  • 生成 mapper、dao 实体类

Service 应用

package com.chenglulu.service.database;
import com.chenglulu.controller.users.domain.FindUsersParams;
import com.chenglulu.enums.UserDeleteEnum;
import com.chenglulu.enums.UserStatusEnum;
import com.chenglulu.mybatis.dao.UsersMapper;
import com.chenglulu.mybatis.entity.Users;
import com.chenglulu.mybatis.entity.UsersExample;
import com.chenglulu.utils.CommonUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
@Service
@Slf4j
public class UsersDatabase {@Autowired(required=false)
    private UsersMapper usersMapper;
    /**
    * 新建用户 * @param users Users
    * @return boolean 
    */ 
    public Users insertUser(Users users){Date date = new Date();
        users.setId(CommonUtils.getUuid());
        users.setCreateTime(date);
        users.setUpdateTime(date);
        users.setStatus(UserStatusEnum.OK.getCode());
        users.setDelete(UserDeleteEnum.NORMAL.getCode());
        int insertResult = usersMapper.insertSelective(users);
        log.info("insertUser insertResult = {}", insertResult);
        if(insertResult == 1){return users;}
        return null;
    }
    /**
    * 查问用户列表 * @param params FindUsersParams
    * @return List<Users>
    */
    public List<Users> findUsers(FindUsersParams params){UsersExample example = new UsersExample();
        UsersExample.Criteria criteria = example.createCriteria();
        // 依照创立工夫 降序排列, id 升序排列;ASC 升序,DESC 降序,多个条件用逗号分隔
        example.setOrderByClause("create_time desc, id asc");
        if(StringUtils.isNotBlank(params.getUserId())){criteria.andIdEqualTo(params.getUserId());
        }
        // 用户名含糊查问
        if(StringUtils.isNotBlank(params.getUsername())){criteria.andUserNameLike("%" + params.getUsername() + "%");
        }
        // 手机号查问
        if(StringUtils.isNotBlank(params.getPhone())){criteria.andPhoneEqualTo(params.getPhone());
        }
        // 邮箱含糊查问
        if(StringUtils.isNotBlank(params.getEmail())){criteria.andEmailEqualTo("%" + params.getEmail() + "%");
        }
        // 删除状态查问
        if(params.getDelete() != null){criteria.andDeleteEqualTo(params.getDelete());
        }
        // 多状态过滤
        if(CollectionUtils.isNotEmpty(params.getStatusList())){criteria.andStatusIn(params.getStatusList());
        }
        List<Users> usersList = usersMapper.selectByExample(example);
        log.info("findUsers usersList = {}", usersList);
        return usersList;
    }
}
退出移动版