mybatis-generator使用教程
mybatis-generator 介绍
它可以帮助我们简化开发,不用再手写 dao,mapper,model了。这三个写起来太耗时了,而且没啥营养。
使用教程
方法一
下载jar包
// 可以通过导入 maven 然后去仓库里找。哈哈
mybatis-generator-core-1.3.5.jar
mysql-connector-java-8.0.13.jar
编写generatorConfig.xml
这东西大致看着就能理解,真不太懂,可以去看看官方解释
官方文档,找右边的XML Configuration
<?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>
<!--数据库的jdbc驱动的jar包地址 可以是相对路劲,相对于 mybatis-generator-core 的位置-->
<classPathEntry location="./mysql-connector-java-8.0.13.jar"/>
<context id="tt">
<!--url 中的后缀是解决 Cannot obtain primary key information from the database, generated objects may be incomplete 问题-->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://127.0.0.1:3308/cook_food?nullCatalogMeansCurrent=true" userId="root"
password="123">
</jdbcConnection>
<javaModelGenerator targetPackage="com.yichen.cook.food.model"
targetProject="D:/personal/learn note/project/test-demo/mybatis-generator/src/main/java">
<property name="enableSubPackages" value="false"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<sqlMapGenerator targetPackage="com.yichen.cook.food.mapper"
targetProject="D:/personal/learn note/project/test-demo/mybatis-generator/src/main/java">
<property name="enableSubPackages" value="false"/>
</sqlMapGenerator>
<javaClientGenerator targetPackage="com.yichen.cook.food.mapper"
targetProject="D:/personal/learn note/project/test-demo/mybatis-generator/src/main/java"
type="XMLMAPPER">
<property name="enableSubPackages" value="false"/>
</javaClientGenerator>
<table tableName="t_food_cook_steps" domainObjectName="foodCookSteps" >
<!--设置自增主键-->
<generatedKey column="id" sqlStatement="Mysql"></generatedKey>
<!--用于配置不需要手动插入,即自动生成的,如修改时间-->
<ignoreColumn column="create_time"></ignoreColumn>
</table>
</context>
</generatorConfiguration>
创建文件目录
// 按我上面的配置文件我需要创建下面两个目录,默认springboot initial 目录
D:/personal/learn note/project/test-demo/mybatis-generator/src/main/java/com/yichen/cook/food/mapper
D:/personal/learn note/project/test-demo/mybatis-generator/src/main/java/com/yichen/cook/food/model
项目目录
运行jar包
// 先进入到目录,即D:\personal\learn note\project\test-demo\mybatis-generator\src\main\resources\lib
java -jar mybatis-generator-core-1.3.5.jar -configfile ..\generatorConfig.xml -overwrite
方法二
前面都相同,最后不用 jar 运行,而改为 java 代码运行
package com.yichen.mybatisgenerator;
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.InputStream;
import java.util.ArrayList;
import java.util.List;
/**
* @author
* @version 1.0
* @date 2021/5/20 11:30
* @describe 生成代码工具类
*/
public class Generator {
public static void main(String[] args)throws Exception {
//MBG 执行过程中的警告信息
List<String> warnings = new ArrayList<String>();
//当生成的代码重复时,覆盖原代码
boolean overwrite = true;
//读取我们的 MBG 配置文件
InputStream is = Generator.class.getResourceAsStream("/generatorConfig.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(is);
is.close();
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
//创建 MBG
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
//执行生成代码
myBatisGenerator.generate(null);
//输出警告信息
for (String warning : warnings) {
System.out.println(warning);
}
}
}
示例项目
问题记录
所有配置都没问题,启动报错数据库连不上
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64)
at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:835)
at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:455)
at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:240)
at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:207)
at org.mybatis.generator.internal.db.ConnectionFactory.getConnection(ConnectionFactory.java:68)
at org.mybatis.generator.config.Context.getConnection(Context.java:526)
at org.mybatis.generator.config.Context.introspectTables(Context.java:436)
at org.mybatis.generator.api.MyBatisGenerator.generate(MyBatisGenerator.java:222)
at org.mybatis.generator.api.MyBatisGenerator.generate(MyBatisGenerator.java:133)
at client.generate.Generator.main(Generator.java:34)
Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105)
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151)
at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:167)
at com.mysql.cj.protocol.a.NativeProtocol.negotiateSSLConnection(NativeProtocol.java:351)
at com.mysql.cj.protocol.a.NativeAuthenticationProvider.negotiateSSLConnection(NativeAuthenticationProvider.java:777)
at com.mysql.cj.protocol.a.NativeAuthenticationProvider.proceedHandshakeWithPluggableAuthentication(NativeAuthenticationProvider.java:486)
at com.mysql.cj.protocol.a.NativeAuthenticationProvider.connect(NativeAuthenticationProvider.java:202)
at com.mysql.cj.protocol.a.NativeProtocol.connect(NativeProtocol.java:1442)
at com.mysql.cj.NativeSession.connect(NativeSession.java:165)
at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:955)
at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:825)
... 9 more
Caused by: javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
at sun.security.ssl.HandshakeContext.<init>(HandshakeContext.java:171)
at sun.security.ssl.ClientHandshakeContext.<init>(ClientHandshakeContext.java:98)
at sun.security.ssl.TransportContext.kickstart(TransportContext.java:220)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:428)
at com.mysql.cj.protocol.ExportControlled.performTlsHandshake(ExportControlled.java:315)
at com.mysql.cj.protocol.StandardSocketFactory.performTlsHandshake(StandardSocketFactory.java:188)
at com.mysql.cj.protocol.a.NativeSocketConnection.performTlsHandshake(NativeSocketConnection.java:99)
at com.mysql.cj.protocol.a.NativeProtocol.negotiateSSLConnection(NativeProtocol.java:347)
... 16 more
Process finished with exit code 1
解决
idea 使用的jdk问题
,我这里使用的是openjdk
换成oracle jdk
就好了。