首先說一下錯誤原因,主要有兩種,
一.路徑錯誤找不到指定的文件,這種比較好解決,因爲比較明顯,但是如果是這種原因把路徑改成了絕對路徑的話,運行會成功,但是發現代碼沒有生成!
Exception in thread "main" java.io.FileNotFoundException: mbg.xml (系統找不到指定的文件。)
二.就是自己的配置文件出錯了,可能是生成的文件路徑錯誤,使用idea的前期經常出現的錯誤,或者就是某個配置文件出錯了。
我的錯誤原因:
註釋掉的是我開始的程序,錯誤的原因是第一種,無法找到文件,後來使用測試單元發現可以從當前路徑找到配置文件!
package com.bhlc.crud.test;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.jupiter.api.Test;
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.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
/*
設置的逆向工程的生成代碼
*/
//public class MBGTest {
// public static void main(String[] args) throws Exception {
// List<String> warnings = new ArrayList<String>();
// boolean overwrite = true;
// File configFile = new File("mbg.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);
// System.out.println("+============");
// }
//}
public class MBGTest {
public SqlSessionFactory getSqlSessionFactory() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
return new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void RunMbg() throws Exception {
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
//mbg.xml配置文件
File configFile = new File("mbg.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);
}
}
接下來看一下我的主要配置:
存放的路徑(我在數據庫裏面建立了tbl_emp和tbl_dept兩個表)
1.maven項目的逆向工程配置 pom.xml
<!--mybatis的逆向工程--> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.7</version> </dependency> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.7</version> </dependency>
2.mbg.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="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!--配置數據庫連接信息-->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/ssm_crud"
userId="root"
password="root">
</jdbcConnection>
<javaTypeResolver >
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!--指定javabean生成的位置-->
<javaModelGenerator targetPackage="com.bhlc.crud.bean" targetProject=".\src\main\java">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!--指定sql映射文件生成的位置-->
<sqlMapGenerator targetPackage="mapper" targetProject=".\src\main\resources">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!--指定dao接口生成的位置-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.bhlc.crud.dao" targetProject=".\src\main\java">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!--指定每個表的生成策略-->
<table tableName="tbl_emp" domainObjectName="Employee">
</table>
<table tableName="tbl_dept" domainObjectName="Department"></table>
</context>
</generatorConfiguration>
3.數據庫配置文件
dbconfig.properties
jdbc.jdbcUrl=jdbc:mysql://localhost:3306/ssm_crud jdbc.driverClass=com.mysql.jdbc.Driver jdbc.user=root jdbc.password=root
4.在test裏建立MBGTest的測試程序
package com.bhlc.crud.test;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.jupiter.api.Test;
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.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
public class MBGTest {
public SqlSessionFactory getSqlSessionFactory() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
return new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void RunMbg() throws Exception {
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
//mbg.xml配置文件
File configFile = new File("mbg.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);
}
}
運行後結果: