eclipse
一、导入jar包
<!--mysql 连接-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<!--自动生成mapper-->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
二、在src/main/resources下配置db.properties和generatorConfig.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>
<!-- 配置mysql 驱动jar包路径.用了绝对路径 -->
<properties resource="db.properties"/>
<context id="yihaomen_mysql_tables" targetRuntime="MyBatis3">
<!-- 生成的pojo将Implement Serializable -->
<plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
<!-- 为了防止生成的代码中有很多注释,比较难看,加入下面的配置控制 -->
<commentGenerator>
<property name="suppressAllComments" value="true" />
<property name="suppressDate" value="true" />
</commentGenerator>
<!-- 注释控制完毕 -->
<!-- 数据库连接 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="${db_url}"
userId="${db_username}"
password="${db_password}">
</jdbcConnection>
<!-- 类型映射 采用默认的可以 -->
<javaTypeResolver >
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- 数据表对应的model 层 -->
<javaModelGenerator targetPackage="com.shyb.bean" targetProject="src/main/java">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- mapper 映射配置文件 -->
<sqlMapGenerator targetPackage="mappers" targetProject="src/main/resources">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!-- mapper接口位置 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.shyb.mapper" targetProject="src/main/java">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!-- tableName:要生成bean、mapper、Mapper.xml的表名 domainObjectName是生成的
bean的类名,默认采用驼峰原则
-->
<table schema="mybatis" tableName="admin_user" domainObjectName="AdminUser"
></table>
<!-- 不需要example时要带上(使用example会生成AdminUserExample类,可以使用方法拼接sql语句) -->
<!--<table schema="mybatis" tableName="admin_user"enableCountByExample="false"
enableUpdateByExample="false" enableDeleteByExample="false"
enableSelectByExample="false" selectByExampleQueryId="false"></table> -->
</context>
</generatorConfiguration>
三、生成方法
方法一
建立java类,运行main方法即可生成
public class GeneratorSqlMap {
public void generator() throws Exception {
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
File file = new File("src/main/resources/generatorConfig.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(file);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
myBatisGenerator.generate(null);
}
// 执行main方法以生成代码
public static void main(String[] args) {
try {
GeneratorSqlMap generatorSqlmap = new GeneratorSqlMap();
generatorSqlmap.generator();
} catch (Exception e) {
e.printStackTrace();
}
}
}
方法二
1.将generatorConfig.xml的javaModelGenerator、sqlMapGenerator、javaClientGenerator的三个targetProject前面加上项目名/
2.安装mybatis generator插件mybatis generator插件与使用
3.然后就可以看见自己生成的代码了
IDEA
- 导入generator的jar包
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
- 配置generator.properties
tinyInt1isBit=false可以不把tiny(1)类型转为Boolean类型
jdbc.driverClass=com.mysql.cj.jdbc.Driver
jdbc.connectionURL=jdbc:mysql://localhost:3306/ecshop?characterEncoding=utf-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&useSSL=true&zeroDateTimeBehavior=convertToNull&autoReconnect = true&tinyInt1isBit=false
jdbc.userId=root
jdbc.password=yali
- 配置resolver类,修改类型转换(可配可不配,在java中byte和short跟Integer来回转换太麻烦)
package com.shyb.resolver;
import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
import org.mybatis.generator.internal.types.JavaTypeResolverDefaultImpl;
import java.sql.Types;
/**
* @author wzh
* @date 2019/4/2 - 10:27
*/
public class MyJavaTypeResolver extends JavaTypeResolverDefaultImpl {
public MyJavaTypeResolver() {
super();
super.typeMap.put(-6, new JavaTypeResolverDefaultImpl.JdbcTypeInformation("TINYINT", new FullyQualifiedJavaType(Integer.class.getName())));
typeMap.put(Types.SMALLINT, new JdbcTypeInformation("SMALLINT", //$NON-NLS-1$
new FullyQualifiedJavaType(Integer.class.getName())));
}
}
- generatorConfig.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>
<!-- 配置mysql 驱动jar包路径.用了绝对路径 -->
<properties resource="generator.properties"/>
<context id="yihaomen_mysql_tables" targetRuntime="MyBatis3">
<!-- 生成的pojo将Implement Serializable -->
<plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
<!-- 为了防止生成的代码中有很多注释,比较难看,加入下面的配置控制 -->
<commentGenerator>
<property name="suppressAllComments" value="true"/>
<property name="suppressDate" value="true"/>
</commentGenerator>
<!-- 注释控制完毕 -->
<!-- 数据库连接 -->
<jdbcConnection driverClass="${jdbc.driverClass}"
connectionURL="${jdbc.connectionURL}"
userId="${jdbc.userId}"
password="${jdbc.password}">
</jdbcConnection>
<!-- 类型映射 采用默认的 会将smallint映射为short 不用可以重写 -->
<javaTypeResolver type="com.shyb.resolver.MyJavaTypeResolver">
<property name="forceBigDecimals" value="false"/>
<!--使用jdk8时间特性-->
<property name="useJSR310Types" value="true"/>
</javaTypeResolver>
<!-- 数据表对应的model 层 -->
<javaModelGenerator targetPackage="com.shyb.entity" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- mapper 映射配置文件 -->
<sqlMapGenerator targetPackage="mappers" targetProject="src/main/resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!-- mapper接口位置 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.shyb.mapper" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!-- 要对那些数据表进行生成操作,必须要有一个.tableName="%"时默认所有表 -->
<!-- <table schema="mybatis" tableName="category" domainObjectName="Category"></table> -->
<table schema="mybatis" tableName="ecs_account_log"/>
<table schema="mybatis" tableName="ecs_goods"/>
<table schema="mybatis" tableName="ecs_order_action"/>
<table schema="mybatis" tableName="ecs_order_goods"/>
<table schema="mybatis" tableName="ecs_order_info"/>
<table schema="mybatis" tableName="ecs_region"/>
<table schema="mybatis" tableName="ecs_suppliers"/>
<!-- 不需要example时要带上 -->
<!-- enableCountByExample="false" enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="false"
selectByExampleQueryId="false" -->
</context>
</generatorConfiguration>
- 配置启动类并运行
package com.shyb;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
/**
* @author wzh
* @date 2019/3/27 - 17:58
*/
public class GeneratorSqlMap {
public void generator() throws Exception {
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
File file = new File("src/main/resources/generatorConfig.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(file);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
myBatisGenerator.generate(null);
}
// 执行main方法以生成代码
public static void main(String[] args) {
try {
GeneratorSqlMap generatorSqlmap = new GeneratorSqlMap();
generatorSqlmap.generator();
} catch (Exception e) {
e.printStackTrace();
}
}
}
扩展分页
- 建立AbstractExample,使其他example继承
public class AbstractExample {
protected Integer limitStart;
protected Integer limitEnd;
protected Pageable pageable;//分页
public AbstractExample() {
super();
}
public AbstractExample(Pageable pageable) {
super();
if(pageable!=null){
this.pageable = pageable;
this.limitStart = pageable.getPageSize() * pageable.getPageNumber();
this.limitEnd = pageable.getPageSize();
}
}
public void setLimitStart(Integer limitStart) {
this.limitStart=limitStart;
}
public Integer getLimitStart() {
return limitStart;
}
public void setLimitEnd(Integer limitEnd) {
this.limitEnd=limitEnd;
}
public Integer getLimitEnd() {
return limitEnd;
}
public Pageable getPageable() {
return pageable;
}
public void setPageable(Pageable pageable) {
this.pageable = pageable;
}
}
- 在需要分页查询的xml中添加判断
<if test="limitStart != null and limitStart>=0" >
limit #{limitStart} , #{limitEnd}
</if>
扩展主键返回
<insert id="insertSelective" useGeneratedKeys="true" keyProperty="id" parameterType="com.wzh.bean.User" >
tk.mybatis生成
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.wzh</groupId>
<artifactId>myshop-dependencies</artifactId>
<version>1.0.0-SNAPSHOT</version>
<relativePath>../myshop-dependencies/pom.xml</relativePath>
</parent>
<artifactId>myshop-mybatis-generator</artifactId>
<packaging>jar</packaging>
<name>myshop-mybatis-generator</name>
<dependencies>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>4.1.4</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
<configuration>
<configurationFile>${basedir}/src/main/resources/generatorConfig.xml</configurationFile>
<overwrite>true</overwrite>
<verbose>true</verbose>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>4.1.4</version>
</dependency>
<!-- maven插件执行时,添加自己jar执行 否则找不到MyJavaTypeResolver -->
<dependency>
<groupId>com.wzh</groupId>
<artifactId>myshop-mybatis-generator</artifactId>
<version>${project.parent.version}</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
generatorConfig.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"/>
<context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<!-- 配置 tk.mybatis 插件 -->
<plugin type="tk.mybatis.mapper.generator.MapperPlugin">
<property name="mappers" value="tk.mybatis.mapper.MyMapper"/>
<property name="lombok" value="Data,Accessors"/>
</plugin>
<!-- 为了防止生成的代码中有很多注释,比较难看,加入下面的配置控制 -->
<commentGenerator>
<property name="suppressAllComments" value="true"/>
<property name="suppressDate" value="true"/>
</commentGenerator>
<!-- 注释控制完毕 -->
<!-- 配置数据库连接 -->
<jdbcConnection
driverClass="${jdbc.driverClass}"
connectionURL="${jdbc.connectionURL}"
userId="${jdbc.username}"
password="${jdbc.password}">
</jdbcConnection>
<!-- 类型映射 采用默认的 会将smallint映射为short 不用可以重写 -->
<javaTypeResolver type="MyJavaTypeResolver">
<property name="forceBigDecimals" value="false"/>
<property name="useJSR310Types" value="true"/>
</javaTypeResolver>
<!-- 配置实体类存放路径 -->
<javaModelGenerator targetPackage="com.wzh.myshop.commons.domain" targetProject="../myshop-commons-domain/src/main/java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- 配置 XML 存放路径 -->
<sqlMapGenerator targetPackage="mapper" targetProject="../myshop-commons-mapper/src/main/resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!-- 配置 DAO 存放路径 -->
<javaClientGenerator
targetPackage="com.wzh.myshop.commons.mapper"
targetProject="../myshop-commons-mapper/src/main/java"
type="XMLMAPPER">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!-- 配置需要指定生成的数据库和表,% 代表所有表 -->
<table catalog="myshop" tableName="%"/>
</context>
</generatorConfiguration>
jdfc.properties和MyJavaTypeResolver和上面一样
MyMapper.java
import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.MySqlMapper;
/**
* 自己的 Mapper
* 特别注意,该接口不能被扫描到,否则会出错
* @author wzh
* @date 2019/10/22 - 10:11
*/
public interface MyMapper<T> extends Mapper<T>, MySqlMapper<T> {
}
启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import tk.mybatis.spring.annotation.MapperScan;
/**
* @author wzh
* @date 2019/10/22 - 14:42
*/
@SpringBootApplication
@EnableDiscoveryClient
@MapperScan("com.wzh.myshop.commons.mapper")
public class MyShopServiceRegApplication {
public static void main(String[] args) {
SpringApplication.run(MyShopServiceRegApplication.class,args);
}
}
分页查询案例
@Autowired
UserMapper userMapper;
public PageInfo reg(){
PageHelper.startPage(1,2);
PageInfo<User> pageInfo = new PageInfo<>(userMapper.selectAll());
return pageInfo;
}