資料庫逆向生成實體類和對映檔案
首先需要幾個jar包:freemarker-2.3.23.jar
log4j-1.2.16.jar
mybatis-3.2.3.jar
mybatis-generator-core-1.3.2.jar
mysql-connector-java-5.1.28-bin.jar
ojdbc14.jar
這些jar包網上都有下載的地方,小編是直接拿過來用的,連結就麻煩大家手動下載了~~~
xml配置檔案: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="testTables" targetRuntime="MyBatis3">
<commentGenerator>
<!-- 是否去除自動生成的註釋 true:是 : false:否 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!--資料庫連線的資訊:驅動類、連線地址、使用者名稱、密碼 oracle.jdbc.driver.OracleDriver com.mysql.jdbc.Driver-->
<jdbcConnection driverClass="oracle.jdbc.driver.OracleDriver"
connectionURL="jdbc:oracle:thin:@localhost
password="自己的密碼">
</jdbcConnection>
<!-- jdbc:mysql://localhost:MySQL埠號/資料庫名稱?characterEncoding=utf-8 -->連線MySQL
<!-- jdbc:oracle:thin:@localhost:ORACLE埠號:資料庫名稱-->連線Oracle
<!-- 預設false,把JDBC DECIMAL 和 NUMERIC 型別解析為 Integer,為 true時把JDBC DECIMAL 和
NUMERIC 型別解析為java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- targetProject:生成PO類的位置 -->
<javaModelGenerator targetPackage="XXX.pojo
targetProject=".\src">
<!-- enableSubPackages:是否讓schema作為包的字尾 -->
<property name="enableSubPackages" value="false" />
<!-- 從資料庫返回的值被清理前後的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- targetProject:mapper對映檔案生成的位置 -->
<sqlMapGenerator targetPackage="XXX.mapper"
targetProject=".\src">
<!-- enableSubPackages:是否讓schema作為包的字尾 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- targetPackage:mapper介面生成的位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="XXX.mapper"
targetProject=".\src">
<!-- enableSubPackages:是否讓schema作為包的字尾 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 指定資料庫表 -->
<table schema="" tableName="你的資料庫表名"></table>此地方可以寫多個表名,一起生成檔案
<!-- <table schema="" tableName="NDJFMXK"></table>
<table schema="" tableName="SYSB_ZM"></table> -->
</context>
</generatorConfiguration>
執行Java檔案,程式碼如下
一、FreemarkerUtil.java
public class FreemarkerUtil {
public static String ControllerPackage = "XXX.controller";
public static String ServicePackage = "XXX.service";
public static List<String> TableNames = new ArrayList<String>();
private static FreemarkerUtil fu = new FreemarkerUtil();
public static void main(String[] args) {
//新增表名
TableNames.add("你自己的表名");//lzcwbh
fu.CreateController();
fu.CreateService();
}
//生成Controller
public void CreateController(){
for (String tablename : TableNames) {
String[] split = tablename.toLowerCase().split("_");
tablename = "";
for (int i = 0; i < split.length; i++) {
tablename += split[i].substring(0, 1).toUpperCase() + split[i].substring(1);
}
//1、建立資料模型
Map<String,Object> root = new HashMap<String,Object>();
//2、為資料模型新增值
root.put("TableName", tablename);
root.put("Package",ControllerPackage);
root.put("ServicePackage", ServicePackage);
//3、將資料模型和模板組合的資料輸出到控制檯
//fu.print("controller.ftl", root);
//生成模板
fu.fprint("controller.ftl", root, tablename+"Controller.java");
}
}
//生成Controller
public void CreateService(){
for (String tablename : TableNames) {
String[] split = tablename.toLowerCase().split("_");
tablename = "";
for (int i = 0; i < split.length; i++) {
tablename += split[i].substring(0, 1).toUpperCase() + split[i].substring(1);
}
//1、建立資料模型
Map<String,Object> root = new HashMap<String,Object>();
//2、為資料模型新增值
root.put("TableName", tablename);
root.put("Package",ServicePackage);
//3、將資料模型和模板組合的資料輸出到控制檯
//fu.print("controller.ftl", root);
//生成模板
fu.fprint("service.ftl", root, tablename+"Service.java");
root.put("Package",ServicePackage+".Impl");
fu.fprint("serviceimpl.ftl", root, tablename+"ServiceImpl.java");
}
}
public Template getTemplate(String name) {
try {
// 通過Freemaker的Configuration讀取相應的ftl
Configuration cfg = new Configuration();
// 設定去哪裡讀取相應的ftl模板檔案
cfg.setClassForTemplateLoading(this.getClass(), "/ftl");
// 在模板檔案目錄中找到名稱為name的檔案
Template temp = cfg.getTemplate(name);
return temp;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
public void print(String name, Map<String, Object> root) {
try {
// 通過Template可以將模板檔案輸出到相應的流
Template temp = this.getTemplate(name);
temp.process(root, new PrintWriter(System.out));
} catch (TemplateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void fprint(String name, Map<String, Object> root, String outFile) {
FileWriter out = null;
try {
String replace = root.get("Package").toString().replace(".", "/");
String property = System.getProperty("user.dir").replace("\\", "/")+"/src/"+replace;
File file = new File(property);
if(!file.exists()){
file.mkdirs();
}
// 通過一個檔案輸出流,就可以寫到相應的檔案中
out = new FileWriter(new File(property, outFile));
Template temp = this.getTemplate(name);
temp.process(root, out);
} catch (IOException e) {
e.printStackTrace();
} catch (TemplateException e) {
e.printStackTrace();
} finally {
try {
if (out != null)
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
二、GeneratorSqlmap.java
public class GeneratorSqlmap {
public void generator() throws Exception{
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
//指定 逆向工程配置檔案
File configFile = new File("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);
}
public static void main(String[] args) throws Exception {
try {
GeneratorSqlmap generatorSqlmap = new GeneratorSqlmap();
generatorSqlmap.generator();
} catch (Exception e) {
e.printStackTrace();
}
}
}
基本上就XML檔案和第一個Java檔案需要簡單配置,都配置好後在eclipse上本地執行後兩個Java檔案,你想要的實體類和mapper對映檔案就會自動生成出來,工作效率大增