1、创建基类
在项目中,我们经常要把一些具有通用方法的实体类建立一个基类,提高代码复用程度。
假设每一个表中都有字段id和username,且每一个表都需要类似的CRUD方法(如根据主键查XX等)。
public class BaseModel implements Serializable {
private String id;
private String name;
private Date createDate;
private Date modifyDate;
private String creator;
private String modifier;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
public Date getModifyDate() {
return modifyDate;
}
public void setModifyDate(Date modifyDate) {
this.modifyDate = modifyDate;
}
public String getCreator() {
return creator;
}
public void setCreator(String creator) {
this.creator = creator;
}
public String getModifier() {
return modifier;
}
public void setModifier(String modifier) {
this.modifier = modifier;
}
}
public interface BaseDao<T extends BaseModel> {
List<T> selectAll();
int deleteByPrimaryKey(String id);
int insert(T entity);
int update(T entity, String id);
T selectByPrimaryKey(String id);
}
2、编写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="baseTables" targetRuntime="MyBatis3">
<!-- 自动生成toString方法 -->
<plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
<!-- 自动生成equals方法和hashcode方法 -->
<plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin"/>
<!-- 自定义方法 -->
<plugin type="com.charlin.erp.common.base.plugin.CustomerMapperPlugin">
<property name="targetProject" value="../erp/src/main/java"/>
<property name="targetPackage" value="com.charlin.erp.common.base.dao"/>
</plugin>
<!-- 自定义方法 -->
<plugin type="com.charlin.erp.common.base.plugin.SerializablePlugin"/>
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc://mysql://localhost:3306/erp?chararterEncoding=utf8"
userId="root" password="sasa"></jdbcConnection>
<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和
NUMERIC 类型解析为java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="true"></property>
</javaTypeResolver>
<!-- targetProject:生成PO类的位置 -->
<javaModelGenerator targetPackage="com.charlin.erp.common.base.model" targetProject=".\src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubpackages" value="true"/>
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true"/>
<!--横型-->
<property name="rootClass" value="com.charlin.erp.common.base.model.BaseModel">
</javaModelGenerator>
<!-- targetProject:mapper映射文件生成的位置 -->
<sqlMapGenerator targetPackage="com.charlin.erp.common.dao" targetProject=".\src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!-- targetPackage:mapper接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.charlin.erp.common.base.dao" targetProject=".\src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="true"/>
<property name="rootInterface" value="com.charlin.erp.common.base.dao.BaseDao"/>
</javaClientGenerator>
<!-- 指定数据库表 -->
<table tableName="items"></table>
<table tableName="orders"></table>
</context>
</generatorConfiguration>
3、创建CustomerMapperPlugin
public class CustomerMapperPlugin extends PluginAdapter{
private static final String DEFAULT_DAO_SUPER_CLASS = "com.charlin.erp.common.base.dao.BaseDao";
private static final String DEFAULT_EXPAND_DAO_SUPER_CLASS = "com.charlin.erp.common.base.dao.BaseExpandDao";
private String daoTargetDir;
private String daoTargetPackage;
private String daoSuperClass;
//扩展
private String expandDaoTargetPackage;
private String expandDaoSuperClass;
private ShellCallback shellCallback = null;
public CustomerMapperPlugin(){
this.shellCallback = new DefaultShellCallback(false);
}
@Override
public boolean validate(List<String> warnings) {
daoTargetDir = properties.getProperty("targetProject");
boolean isDir = stringHasValue(daoTargetDir);
daoTargetPackage = properties.getProperty("targetPackage");
boolean isPackage = stringHasValue(daoTargetPackage);
daoSuperClass = properties.getProperty("daoSuperClass");
if (!stringHasValue(daoSuperClass)) daoSuperClass = DEFAULT_DAO_SUPER_CLASS;
expandDaoTargetPackage = properties.getProperty("expandDaoTargetPackage");
expandDaoSuperClass = properties.getProperty("expandDaoSuperClass");
if (!stringHasValue(expandDaoSuperClass)) expandDaoSuperClass = DEFAULT_EXPAND_DAO_SUPER_CLASS;
return isDir && isPackage;
}
@Override
public boolean sqlMapDocumentGenerated(Document document, IntrospectedTable introspectedTable) {
XmlElement select = new XmlElement("select");
select.addAttribute(new Attribute("id", "selectAll"));
select.addAttribute(new Attribute("resultMap","baseResultMap"));
select.addAttribute(new Attribute("parameterType",introspectedTable.getBaseRecordType()));
select.addElement(new TextElement(" select * from " + introspectedTable.getFullyQualifiedTableNameAtRuntime()));
XmlElement parentElement = document.getRootElement();
parentElement.addElement(select);
return super.sqlMapDocumentGenerated(document, introspectedTable);
}
@Override
public List<GeneratedJavaFile> contextGenerateAdditionalJavaFiles(IntrospectedTable introspectedTable) {
JavaFormatter javaFormatter = context.getJavaFormatter();
List<GeneratedJavaFile> mapperJavaFiles = new ArrayList<GeneratedJavaFile>();
for (GeneratedJavaFile javaFile : introspectedTable.getGeneratedJavaFiles()){
CompilationUnit unit = javaFile.getCompilationUnit();
FullyQualifiedJavaType baseModelJavaType = unit.getType();
String shortName = baseModelJavaType.getShortName();
GeneratedJavaFile mapperJavafile = null;
if(shortName.endsWith("Mapper")){ // 扩展Mapper
if (stringHasValue(expandDaoTargetPackage)){
Interface mapperInterface = new Interface(expandDaoTargetPackage + "." + shortName.replace("Mapper", "ExpandMapper"));
mapperInterface.setVisibility(JavaVisibility.PUBLIC);
mapperInterface.addJavaDocLine("/**");
mapperInterface.addJavaDocLine(" * " + shortName + "扩展");
mapperInterface.addJavaDocLine(" */");
FullyQualifiedJavaType daoSuperType = new FullyQualifiedJavaType(expandDaoSuperClass);
mapperInterface.addImportedType(daoSuperType);
mapperInterface.addSuperInterface(daoSuperType);
mapperJavafile = new GeneratedJavaFile(mapperInterface, daoTargetDir, javaFormatter);
try {
File mapperDir = shellCallback.getDirectory(daoTargetDir, daoTargetPackage);
File mapperFile = new File(mapperDir, mapperJavafile .getFileName());
if (!mapperFile.exists()){
//mapperFile.mkdirs();
mapperJavaFiles.add(mapperJavafile );
}
} catch (Exception e) {
e.printStackTrace();
}
}
}else if(!shortName.endsWith("Example")){
Interface mapperInterface = new Interface(daoTargetPackage + "." + shortName + "Mapper");
mapperInterface.setVisibility(JavaVisibility.PUBLIC);
mapperInterface.addJavaDocLine("/**");
mapperInterface.addJavaDocLine(" * 由MyBatis Generator工具自动生成,请不要手动修改");
mapperInterface.addJavaDocLine(" */");
FullyQualifiedJavaType daoSuperType = new FullyQualifiedJavaType(daoSuperClass);
// 添加泛型支持
daoSuperType.addTypeArgument(baseModelJavaType);
mapperInterface.addImportedType(baseModelJavaType);
mapperInterface.addImportedType(daoSuperType);
mapperInterface.addSuperInterface(daoSuperType);
mapperJavafile = new GeneratedJavaFile(mapperInterface, daoTargetDir, javaFormatter);
mapperJavaFiles.add(mapperJavafile);
}
}
return mapperJavaFiles;
}
}
4、运行
public class TestGeneratorRun {
@Test
public void test() throws Exception{
}
public static void main(String[] args) throws Exception {
File configFile = new File("E:\\git\\erp\\common\\src\\main\\java\\com\\charlin\\erp\\common\\base\\generator\\generatorConfig.xml");
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
ConfigurationParser cp = new ConfigurationParser(warnings);
//String filePath = MyBatisGeneratorRun.class.getClassLoader().getResource("").getPath() + "generatorConfig.xml";
InputStream inputStream = new FileInputStream(configFile);
Configuration config = cp.parseConfiguration(inputStream);
DefaultShellCallback dsc = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, dsc, warnings);
myBatisGenerator.generate(null);
}
}
—————————————————————————————————————————————————–
java架构师项目实战,高并发集群分布式,大数据高可用视频教程,共760G
下载地址:
https://item.taobao.com/item.htm?id=555888526201
01.高级架构师四十二个阶段高
02.Java高级系统培训架构课程148课时
03.Java高级互联网架构师课程
04.Java互联网架构Netty、Nio、Mina等-视频教程
05.Java高级架构设计2016整理-视频教程
06.架构师基础、高级片
07.Java架构师必修linux运维系列课程
08.Java高级系统培训架构课程116课时
+
hadoop系列教程,java设计模式与数据结构, Spring Cloud微服务, SpringBoot入门
—————————————————————————————————————————————————–