MAVEN依赖:MybatisGenerator不支持PG的返回主键,写一个简单插件引入即可生成的时候自动生成返回主键
详细相关代码实现:https://github.com/fleapx/hui-mybatis-generator-plugins
pom.xml
<dependencies>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
</dependencies>
返回主键的SQL:
sql
SELECT currval('tablename_id_seq')
Mybatis的XML实现:
mybatis.xml
<selectKey keyProperty="id" resultType="java.lang.Integer" order="AFTER"> SELECT currval('tablename_id_seq') </selectKey>
插件实现:
java
/**
* <b><code>PostGreSQLReturnKeyPlugin</code></b>
* <p/>
* Description: PG返回主键插件
* <p/>
* <b>Creation Time:</b> 2018/12/7 0:00.
*
*/
public class PostGreSQLReturnKeyPlugin extends PluginAdapter {
@Override
public boolean validate(List<String> list) {
return true;
}
/**
* 新增SqlMapper.xml里面PostGreSql返回主键基础的insert方法
* @param element
* @param introspectedTable
* @return
*/
@Override
public boolean sqlMapInsertElementGenerated(XmlElement element, IntrospectedTable introspectedTable) {
XmlElement selectKey = addSelectKey(introspectedTable);
element.addElement(0, selectKey);
return super.sqlMapInsertElementGenerated(element, introspectedTable);
}
/**
* 新增SqlMapper.xml里面PostGreSql返回主键基础的insertSelective方法
* @param element
* @param introspectedTable
* @return
*/
@Override
public boolean sqlMapInsertSelectiveElementGenerated(XmlElement element, IntrospectedTable introspectedTable) {
XmlElement selectKey = addSelectKey(introspectedTable);
element.addElement(0, selectKey);
return super.sqlMapInsertSelectiveElementGenerated(element, introspectedTable);
}
/**
* 返回主键方法 ==> 一般sql如下面
* <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
* SELECT currval('t_hui_order_id_seq')
* </selectKey>
* @param introspectedTable
* @return
*/
private XmlElement addSelectKey(IntrospectedTable introspectedTable){
String resultType = introspectedTable.getPrimaryKeyColumns().get(0).getFullyQualifiedJavaType().getFullyQualifiedName();
String keyProperty = introspectedTable.getPrimaryKeyColumns().get(0).getActualColumnName();
String tableName = introspectedTable.getFullyQualifiedTableNameAtRuntime();
String sql = "SELECT currval('" + tableName + "_id_seq')";
XmlElement selectKey = new XmlElement("selectKey");
TextElement selectKeySQL = new TextElement(sql);
selectKey.addAttribute(new Attribute("keyProperty",keyProperty));
selectKey.addAttribute(new Attribute("order","AFTER"));
selectKey.addAttribute(new Attribute("resultType", resultType));
selectKey.addElement(selectKeySQL);
return selectKey;
}
}
使用方法:
generatorConfig.xml
<!--返回postgresql主键-->
<plugin type="com.hui.mybatis.plugins.PostGreSQLReturnKeyPlugin"/>
pom.xml
<build>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>${mybatis.generator}</version>
<configuration>
<!-- 配置文件 -->
<configurationFile>
${basedir}/src/main/resources/generator/generatorConfig.xml
</configurationFile>
<!-- 允许移动生成的文件 -->
<verbose>true</verbose>
<!-- 是否覆盖 -->
<overwrite>true</overwrite>
</configuration>
<dependencies>
<!-- mybatis-generator-core -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>${mybatis.generator}</version>
</dependency>
<!--插件导入-->
<dependency>
<groupId>com.hui.mybatis.plugins</groupId>
<artifactId>hui-mybatis-plugins</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!--Mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.44</version>
</dependency>
<!--ORACLE-->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.1.0.7.0</version>
</dependency>
<!--PG SQL-->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>${postgresql.version}</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>