您的位置 首页 java

mybatis根据数据库表结构自动生成实体类,dao,mapper

首先, pom需要引入

<!-- mysql -->
 <dependency>
 <groupId>mysql</groupId>
 <artifactId>mysql-connector-java</artifactId>
 <version>5.1.39</version>
 </dependency>
<!-- mybatis-->
 <dependency>
 <groupId>org. mybatis .generator</groupId>
 <artifactId>mybatis-generator-core</artifactId>
 <version>1.3.3</version>
 </dependency>
 

然后是mybatis生成器

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 org.mybatis.generator.config.MergeConstants;
import org.mybatis.generator.config.PropertyRegistry;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
import static org.mybatis.generator.internal.util.StringUtility.isTrue;
/**
 * Mybatis 注释生成器
 */public class MyCommentGenerator implements CommentGenerator {
 private Properties properties;
 private Properties systemPro;
 private boolean suppressDate;
 private boolean suppressAllComments;
 private String currentDateStr;
 public MyCommentGenerator() {
 super();
 properties = new Properties();
 systemPro = System.getProperties();
 suppressDate =  false ;
 suppressAllComments = false;
 currentDateStr = (new SimpleDateFormat("yyyy-MM-dd")).format(new Date());
 }
 public void addJavaFileComment(CompilationUnit compilationUnit) {
 // add no file level comments by default
 return;
 }
 /**
 * Adds a suitable comment to warn users that the element was generated, and
 * when it was generated.
 */ public void addComment(XmlElement xmlElement) {
 return;
 }
 public void addRootComment(XmlElement rootElement) {
 // add no document level comments by default
 return;
 }
 public void addConfigurationProperties(Properties properties) {
 this.properties.putAll(properties);
 suppressDate = isTrue(properties.getProperty(PropertyRegistry.COMMENT_GENERATOR_SUPPRESS_DATE));
 suppressAllComments = isTrue(properties.getProperty(PropertyRegistry.COMMENT_GENERATOR_SUPPRESS_ALL_COMMENTS));
 }
 /**
 * This method adds the custom javadoc tag for. You may do nothing if you do
 * not wish to include the Javadoc tag - however, if you do not include the
 * Javadoc tag then the Java merge capability of the eclipse plugin will
 * break.
 *
 * @param javaElement the java element
 */ protected void addJavadocTag(JavaElement javaElement, boolean markAsDoNotDelete) {
 javaElement.addJavaDocLine(" *");
 StringBuilder sb = new StringBuilder();
 sb. append (" * ");
 sb.append(MergeConstants.NEW_ELEMENT_TAG);
 if (markAsDoNotDelete) {
 sb.append(" do_not_delete_during_merge");
 }
 String s = getDateString();
 if (s != null) {
 sb.append(' ');
 sb.append(s);
 }
 javaElement.addJavaDocLine(sb. toString ());
 }
 /**
 * This method returns a formated date string to include in the Javadoc tag
 * and XML comments. You may return null if you do not want the date in
 * these documentation elements.
 *
 * @return a string representing the current timestamp, or null
 */ protected String getDateString() {
 String result = null;
 if (!suppressDate) {
 result = currentDateStr;
 }
 return result;
 }
 public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable) {
 if (suppressAllComments) {
 return;
 }
 StringBuilder sb = new StringBuilder();
 innerClass.addJavaDocLine("/**");
 sb.append(" * ");
 sb.append(introspectedTable.getFullyQualifiedTable());
 sb.append(" ");
 sb.append(getDateString());
 innerClass.addJavaDocLine(sb.toString());
 innerClass.addJavaDocLine(" */");
 }
 public void addEnumComment(InnerEnum innerEnum, IntrospectedTable introspectedTable) {
 if (suppressAllComments) {
 return;
 }
 StringBuilder sb = new StringBuilder();
 innerEnum.addJavaDocLine("/**");
 
 sb.append(" * ");
 sb.append(introspectedTable.getFullyQualifiedTable());
 innerEnum.addJavaDocLine(sb.toString());
 innerEnum.addJavaDocLine(" */");
 }
 public void addFieldComment(Field field, IntrospectedTable introspectedTable,
 IntrospectedColumn introspectedColumn) {
 if (suppressAllComments) {
 return;
 }
 StringBuilder sb = new StringBuilder();
 field.addJavaDocLine("/**");
 sb.append(" * ");
 sb.append(introspectedColumn.getRemarks());
 field.addJavaDocLine(sb.toString());
 // addJavadocTag(field, false);
 field.addJavaDocLine(" */");
 }
 public void addFieldComment(Field field, IntrospectedTable introspectedTable) {
 if (suppressAllComments) {
 return;
 }
 StringBuilder sb = new StringBuilder();
 field.addJavaDocLine("/**");
 sb.append(" * ");
 sb.append(introspectedTable.getFullyQualifiedTable());
 field.addJavaDocLine(sb.toString());
 field.addJavaDocLine(" */");
 }
 public void addModelClassComment(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
 }
 public void addGeneralMethodComment(Method method, IntrospectedTable introspectedTable) {
 if (suppressAllComments) {
 return;
 }
 
 }
 public void addGetterComment(Method method, IntrospectedTable introspectedTable,
 IntrospectedColumn introspectedColumn) {
 if (suppressAllComments) {
 return;
 }
 method.addJavaDocLine("/**");
 StringBuilder sb = new StringBuilder();
 sb.append(" * ");
 sb.append(introspectedColumn.getRemarks());
 method.addJavaDocLine(sb.toString());
 sb.setLength(0);
 sb.append(" * @return ");
 sb.append(introspectedColumn.getActualColumnName());
 sb.append(" ");
 sb.append(introspectedColumn.getRemarks());
 method.addJavaDocLine(sb.toString());
 // addJavadocTag(method, false);
 method.addJavaDocLine(" */");
 }
 public void addSetterComment(Method method, IntrospectedTable introspectedTable,
 IntrospectedColumn introspectedColumn) {
 if (suppressAllComments) {
 return;
 }
 method.addJavaDocLine("/**");
 StringBuilder sb = new StringBuilder();
 sb.append(" * ");
 sb.append(introspectedColumn.getRemarks());
 method.addJavaDocLine(sb.toString());
 Parameter parm = method.getParameters().get(0);
 sb.setLength(0);
 sb.append(" * @param ");
 sb.append(parm.getName());
 sb.append(" ");
 sb.append(introspectedColumn.getRemarks());
 method.addJavaDocLine(sb.toString());
 // addJavadocTag(method, false);
 method.addJavaDocLine(" */");
 }
 public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable, boolean markAsDoNotDelete) {
 if (suppressAllComments) {
 return;
 }
 StringBuilder sb = new StringBuilder();
 innerClass.addJavaDocLine("/**");
 sb.append(" * ");
 sb.append(introspectedTable.getFullyQualifiedTable());
 innerClass.addJavaDocLine(sb.toString());
 sb.setLength(0);
 sb.append(" * @author ");
 sb.append(systemPro.getProperty("user.name"));
 sb.append(" ");
 sb.append(currentDateStr);
 // addJavadocTag(innerClass, markAsDoNotDelete);
 innerClass.addJavaDocLine(" */");
 }
}
 

然后是generator.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
 PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
 "">
<generatorConfiguration>
 <context id="my" targetRuntime="MyBatis3">
 <!-- 这里的type里写的是你的实现类的类全路径,即上面那个生成器所在的位置 -->
 <commentGenerator type="org.mybatis.generator.MyCommentGenerator">
 </commentGenerator>
 <!--连接数据库 -->
 <jdbcConnection driverClass="com.mysql.jdbc.Driver"
 connectionURL="jdbc:mysql://远程地址:3306/数据库名" userId="数据库用户名"
 password="密码"/> 
 <!-- 实体类的地址 targetProject + targetPackage == 生成文件所在位置 根据表结构生成的实体类就在项目的com.common.model中-->
 <javaModelGenerator targetPackage="com.common.model"
 targetProject="E:\common\src\main\java"> 
 <property name="enableSubPackages" value="true"/>
 <property name="trimStrings" value="true"/>
 </javaModelGenerator>
 <!-- mapper文件地址 targetProject + targetPackage == 生成文件所在物理位置 生成的.mapper文件就在mybatis文件夹下-->
 <sqlMapGenerator targetPackage="mybatis"
 targetProject="E:\src\main\resources">
 <property name="enableSubPackages" value="true"/> 
 </sqlMapGenerator>
 <!--  dao 生成的存放地址 targetProject + targetPackage == 生成文件所在位置 生成的dao接口就在项目的com.dao中-->
 <javaClientGenerator targetPackage="com.dao"
 targetProject="E:\src\main\java" type="XMLMAPPER">
 <property name="enableSubPackages" value="true"/> 
 </javaClientGenerator>
 <!-- tableName 数据库中表的名字 domainObjectName 生成的实体类名字以及加上Dao和Mapper组成的dao和mapper文件的名字 -->
 <table tableName="数据库表的名字" domainObjectName="生成实体类的名字"
 enableCountByExample="false" enableUpdateByExample="false"
 enableDeleteByExample="false" enableSelectByExample="false"
 selectByExampleQueryId="false">
 <property name="useActualColumnNames" value="true"/>
 </table>
 
 </context>
</generatorConfigurat io n>
 

最后是要执行的的类,执行这个类, 就能生成相应的文件了, 执行完可能需要更新下项目才能看出效果

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.File;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class MyBatisGeneratorTest {
 public static void main(String[] args) {
 try {
 List<String> warnings = new ArrayList<String>();
 boolean overwrite = true; 
 
 File configFile = new File("E:\\src\\main\\resource\\generatorConfig.xml");
 
 ConfigurationParser cp = new ConfigurationParser(warnings);
 Configuration config = cp.parseConfiguration(configFile);
 DefaultShellCallback callback = new DefaultShellCallback(overwrite);
 MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
 myBatisGenerator.generate(null);
 } catch (SQLException e) {
 e.printStackTrace();
 } catch (IOException e) {
 e.printStackTrace();
 } catch (InterruptedException e) {
 e.printStackTrace();
 } catch (InvalidConfigurationException e) {
 e.printStackTrace();
 } catch (XMLParserException e) {
 e.printStackTrace();
 }
 }
}
 

文章来源:智云一二三科技

文章标题:mybatis根据数据库表结构自动生成实体类,dao,mapper

文章地址:https://www.zhihuclub.com/177134.shtml

关于作者: 智云科技

热门文章

网站地图