
com.lindzh.mybatis.generator.utils.MybatisPojoGenerator Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of mybatis-generator Show documentation
Show all versions of mybatis-generator Show documentation
MybatisGenerator is a xml ,sql and dao generator from java beans.
The newest version!
package com.lindzh.mybatis.generator.utils;
import com.lindzh.mybatis.generator.GeneratorException;
import com.lindzh.mybatis.generator.annotation.Column;
import com.lindzh.mybatis.generator.annotation.Index;
import com.lindzh.mybatis.generator.annotation.PrimaryKey;
import com.lindzh.mybatis.generator.annotation.Table;
import com.lindzh.mybatis.generator.annotation.UniqueKey;
import com.lindzh.mybatis.generator.bean.ColumnBean;
import com.lindzh.mybatis.generator.bean.IndexBean;
import com.lindzh.mybatis.generator.bean.MybatisPojo;
import com.lindzh.mybatis.generator.bean.UniqueBean;
import java.lang.reflect.Field;
import java.text.SimpleDateFormat;
import java.util.*;
import org.apache.commons.lang.StringUtils;
/**
* 注解分析器
* @author lindezhi
* 2015年11月14日 下午5:13:14
*/
public class MybatisPojoGenerator {
private static String genName(String column,String property){
if(StringUtils.isBlank(column)){
return property;
}
return column;
}
private static String firstToUpperCase(String str){
String first = str.charAt(0)+"";
return first.toUpperCase()+str.substring(1);
}
@SuppressWarnings("unchecked")
public static MybatisPojo genPojo(Class clazz,String daoPackage){
MybatisPojo pojo = new MybatisPojo();
pojo.setClassSimpleName(clazz.getSimpleName());
String beanPackage = clazz.getPackage().getName();
if(StringUtils.isNotBlank(beanPackage)){
pojo.setBeanPackage(beanPackage);
}
if(StringUtils.isNotBlank(daoPackage)){
pojo.setDaoPackage(daoPackage);
pojo.setNamespace(daoPackage+"."+clazz.getSimpleName()+"Dao");
}else{
pojo.setNamespace(clazz.getSimpleName()+"Dao");
}
pojo.setDaoClassName(clazz.getSimpleName()+"Dao");
pojo.setClassName(clazz.getName());
pojo.setBeanMapper(clazz.getSimpleName()+"ResultMap");
//生成表定义
Table table = (Table)clazz.getAnnotation(Table.class);
if(table==null||StringUtils.isBlank(table.name())){
throw new GeneratorException(clazz.getName()+" require table name");
}
pojo.setTable(table.name());
pojo.setAutoGenerate(table.autoGeneratePrimaryKey());
//添加父类支持
ArrayList fields = new ArrayList();
Class cla = clazz;
while(cla!=Object.class){
Field[] fields1 = cla.getDeclaredFields();
if(fields1!=null&&fields1.length>0){
fields.addAll(Arrays.asList(fields1));
}
cla = cla.getSuperclass();
}
//cache for merge unique and index
Map uniqueCache = new HashMap();
Map indexCache = new HashMap();
for(Field field:fields){
PrimaryKey primary = (PrimaryKey)field.getAnnotation(PrimaryKey.class);
if(primary!=null){
//主键
String column = primary.column();
ColumnBean cp = new ColumnBean(field.getName(),genName(column,field.getName()),field.getType().getSimpleName());
if(pojo.getPrimary()!=null){
throw new GeneratorException(clazz.getName()+" can't define multi primary key");
}
pojo.setPrimary(cp);
//生成唯一索引
UniqueBean bean = genUniqueBean(firstToUpperCase(cp.getColumn()), true, true, true, cp);
pojo.getUniques().add(bean);
}else{
//非主键列
Column column = field.getAnnotation(Column.class);
if(column!=null){
//添加到列中
String tcolumn = column.column();
ColumnBean cp = new ColumnBean(field.getName(),genName(tcolumn,field.getName()),field.getType().getSimpleName());
pojo.getColumns().add(cp);
UniqueKey unique = (UniqueKey)field.getAnnotation(UniqueKey.class);
if(unique!=null){//唯一索引
UniqueBean bean = uniqueCache.get(unique.name());
if(bean!=null){
bean.getColumns().add(cp);
bean.setDelete(unique.delete()&&bean.isDelete());
bean.setSelect(unique.select()&&bean.isSelect());
bean.setUpdate(unique.update()&&bean.isUpdate());
}else{
UniqueBean uniqueBean = genUniqueBean(firstToUpperCase(unique.name()), unique.select(),unique.update(), unique.delete(), cp);
uniqueCache.put(unique.name(), uniqueBean);
pojo.getUniques().add(uniqueBean);
}
}
Index index = (Index)field.getAnnotation(Index.class);
if(index!=null){//一般索引
IndexBean bean = indexCache.get(index.name());
if(bean!=null){
bean.getColumns().add(cp);
bean.setCount(bean.isCount()&&index.count());
bean.setLimitOffset(bean.isLimitOffset()&&index.limitOffset());
bean.setSelectOne(bean.isSelectOne()&&index.selectOne());
}else{
bean = new IndexBean();
bean.getColumns().add(cp);
bean.setName(firstToUpperCase(index.name()));
bean.setCount(index.count());
bean.setLimitOffset(index.limitOffset());
bean.setSelectOne(index.selectOne());
indexCache.put(index.name(), bean);
pojo.getIndexes().add(bean);
}
}
}
}
}
setUpdateUniqueColumns(pojo);
pojo.setTime(genTime());
return pojo;
}
private static void setUpdateUniqueColumns(MybatisPojo pojo){
List columns = pojo.getColumns();
List uniques = pojo.getUniques();
for(UniqueBean bean:uniques){
HashMap columnCache = new HashMap();
List idxColumns = bean.getColumns();
for(ColumnBean idx:idxColumns){
columnCache.put(idx.getColumn(), idx);
}
for(ColumnBean c:columns){
if(!columnCache.containsKey(c.getColumn())){
bean.getUpdateColumns().add(c);
}
}
}
}
private static String genTime(){
SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日 HH:mm");
return format.format(new Date());
}
private static UniqueBean genUniqueBean(String name,boolean select,boolean update,boolean delete,ColumnBean ...beans){
UniqueBean bean = new UniqueBean();
bean.setDelete(delete);
bean.setName(name);
bean.setSelect(select);
bean.setUpdate(update);
for(ColumnBean b:beans){
bean.getColumns().add(b);
}
return bean;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy