一、需要先创建工程
- 先在pom.xml文件里面把依赖添加上去
- 把配置文件复制过来
- 确定包路径(逆向工程的时候需要)
- 导入Mybatis工具类
- 创建dao层和bean类存放位置的包
二、设计数据库:
三、逆向工程配置:
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> <context id="mysql" defaultModelType="flat" targetRuntime="MyBatis3"> <property name="autoDelimitKeywords" value="false"/> <!-- 生成的Java文件的编码 --> <property name="javaFileEncoding" value="UTF-8"/> <!-- 格式化java代码 --> <property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/> <!-- 格式化XML代码 --> <property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/> <!-- beginningDelimiter和endingDelimiter:指明数据库的用于标记数据库对象名的符号,比如ORACLE就是双引号,MYSQL默认是`反引号; --> <property name="beginningDelimiter" value="`"/> <property name="endingDelimiter" value="`"/> <!-- 自定义lombok增强 --> <plugin type="plugins.LombokPlugin" > <property name="hasLombok" value="true"/> </plugin> <!--通过type属性改成自己注解解析器--> <commentGenerator type="plugins.MyCommentGenerator"> <property name="suppressDate" value="true"/> <!-- 是否去除自动生成的注释 true:是 : false:否 --> <!--<property name="suppressAllComments" value="true" />--> <property name="addRemarkComments" value="true" /> </commentGenerator> <!-- 数据库连接信息ps:需要手动更改 <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1:3306/mybatis?useUnicode=true&characterEncoding=UTF-8" userId="root" password="123456"> <!-- 这里面可以设置property属性,每一个property属性都设置到配置的Driver上 --> </jdbcConnection> <!-- java类型处理器--> <javaTypeResolver type="org.mybatis.generator.internal.types.JavaTypeResolverDefaultImpl"> <property name="forceBigDecimals" value="false"/> </javaTypeResolver> <!-- 需要手动更改 <!-- java模型创建器,是必须要的元素 --> <javaModelGenerator targetPackage="com.xxgc.mybatis.pojo" targetProject="src/main/java"> <property name="constructorBased" value="false"/> <property name="enableSubPackages" value="true"/> <property name="trimStrings" value="true"/> <property name="immutable" value="false"/> <property name="trimStrings" value="true"/> </javaModelGenerator> <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources"> <property name="enableSubPackages" value="true"/> </sqlMapGenerator> <javaClientGenerator targetPackage="com.xxgc.mybatis.dao" type="XMLMAPPER" targetProject="src/main/java"> <property name="enableSubPackages" value="true"/> </javaClientGenerator><!-- 要生成的表--> <table tableName="users"/> <table tableName="money"/> </context></generatorConfiguration>
3.1 判断数据库连接是否正确:
<jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1:3306/mybatis?useUnicode=true&characterEncoding=UTF-8" userId="root" password="123456"> <!-- 这里面可以设置property属性,每一个property属性都设置到配置的Driver上 --></jdbcConnection>
3.2 判断映射类包路径:
<!-- java模型创建器,是必须要的元素 --><javaModelGenerator targetPackage="com.xxgc.mybatis.entity" targetProject="src/main/java"> <property name="constructorBased" value="false"/> <property name="enableSubPackages" value="true"/> <property name="trimStrings" value="true"/> <property name="immutable" value="false"/> <property name="trimStrings" value="true"/></javaModelGenerator>
3.3 dao层包路径:
<javaClientGenerator targetPackage="com.xxgc.mybatis.dao" type="XMLMAPPER" targetProject="src/main/java"> <property name="enableSubPackages" value="true"/></javaClientGenerator>
3.4 查看要生成的表:
<!--要生成的表--><table tableName="users"/><table tableName="money"/>
LombokPlugin.java:
package plugins;import org.mybatis.generator.api.IntrospectedColumn;import org.mybatis.generator.api.IntrospectedTable;import org.mybatis.generator.api.PluginAdapter;import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;import org.mybatis.generator.api.dom.java.Interface;import org.mybatis.generator.api.dom.java.Method;import org.mybatis.generator.api.dom.java.TopLevelClass;import java.text.SimpleDateFormat;import java.util.Date;import java.util.List;/** * @ClassName LombokPlugin * @Description: TODO * @Author 唐哥 * @Date 2021/10/25 * @Version V1.0 **/@SuppressWarnings("unused")public class LombokPlugin extends PluginAdapter { @Override public boolean validate(List<String> list) { return true; } @Override public boolean modelBaseRecordClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) { //实体类的import topLevelClass.addImportedType("java.io.Serializable"); topLevelClass.addImportedType("lombok.Data"); topLevelClass.addImportedType("lombok.Builder"); topLevelClass.addImportedType("lombok.NoArgsConstructor"); topLevelClass.addImportedType("lombok.AllArgsConstructor"); //实体类的注解 topLevelClass.addAnnotation("@Data"); topLevelClass.addAnnotation("@Builder"); topLevelClass.addAnnotation("@NoArgsConstructor"); topLevelClass.addAnnotation("@AllArgsConstructor"); //实体类的注释 topLevelClass.addJavaDocLine("/**"); topLevelClass.addJavaDocLine(" * @唐哥"); topLevelClass.addJavaDocLine(" * @date " + new SimpleDateFormat("yyyy/MM/dd/hh:mm").format(new Date())); topLevelClass.addJavaDocLine(" */"); //接口 topLevelClass.addSuperInterface(new FullyQualifiedJavaType("java.io.Serializable")); return true; } @Override public boolean clientGenerated(Interface anInterface, TopLevelClass topLevelClass, IntrospectedTable introspectedTable) { //Mapper文件的注释 anInterface.addJavaDocLine("/**"); anInterface.addJavaDocLine(" * @唐哥"); anInterface.addJavaDocLine(" * @date " + new SimpleDateFormat("yyyy/MM/dd/hh:mm").format(new Date())); anInterface.addJavaDocLine(" */"); return true; } @Override public boolean modelSetterMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn, IntrospectedTable introspectedTable, ModelClassType modelClassType) { //不生成getter return false; } @Override public boolean modelGetterMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn, IntrospectedTable introspectedTable, ModelClassType modelClassType) { //不生成setter return false; }}
package plugins;import org.mybatis.generator.api.CommentGenerator;import org.mybatis.generator.api.IntrospectedColumn;import org.mybatis.generator.api.IntrospectedTable;import org.mybatis.generator.api.dom.java.*;import org.mybatis.generator.api.dom.xml.XmlElement;import java.util.Properties;/** * 注解解析器 * @ClassName MyCommentGenerator * @Description: TODO * @Author 唐哥 * @Date 2021/10/25 * @Version V1.0 **/public class MyCommentGenerator implements CommentGenerator { @Override public void addConfigurationProperties(Properties properties) { } @Override public void addFieldComment(Field field, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) { } @Override public void addFieldComment(Field field, IntrospectedTable introspectedTable) { } @Override public void addModelClassComment(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) { } @Override public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable) { } @Override public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable, boolean b) { } @Override public void addEnumComment(InnerEnum innerEnum, IntrospectedTable introspectedTable) { } @Override public void addGetterComment(Method method, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) { } @Override public void addSetterComment(Method method, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) { } @Override public void addGeneralMethodComment(Method method, IntrospectedTable introspectedTable) { } @Override public void addJavaFileComment(CompilationUnit compilationUnit) { } @Override public void addComment(XmlElement xmlElement) { } @Override public void addRootComment(XmlElement xmlElement) { }}
启动类 Generator.java:
package main;import org.mybatis.generator.api.MyBatisGenerator;import org.mybatis.generator.config.Configuration;import org.mybatis.generator.config.xml.ConfigurationParser;import org.mybatis.generator.exception.XMLParserException;import org.mybatis.generator.internal.DefaultShellCallback;import java.io.File;import java.util.ArrayList;/** * 用于生成逆向工程 * */public class Generator { //加载配置文件 public void mybatisGenerator() throws Exception { ArrayList<String> warnings = new ArrayList<>(); File file = new File("./src/main/resources/generatorConfig.xml"); ConfigurationParser parser = new ConfigurationParser(warnings); Configuration configuration = parser.parseConfiguration(file); DefaultShellCallback defaultShellCallback = new DefaultShellCallback(true); MyBatisGenerator myBatisGenerator = new MyBatisGenerator(configuration, defaultShellCallback, warnings); myBatisGenerator.generate(null); } public static void main(String[] args) throws Exception { System.out.println("开始逆向工程"); Generator generator = new Generator(); generator.mybatisGenerator(); System.out.println("结束逆向工程"); }}