本文介绍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=UTCspring.datasource.username=rootspring.datasource.password=123456spring.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.xml
中table
表
生成文件如下:
- 生成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@Slf4jpublic 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; }}