mybatis通用功能代码生成工具

 

mybatis操作数据库的过程中,如果只考虑单表操作,mapper和dao层基本80%的都是固定的,故而可以使用工具进行生成代码,文末提供自己编写的工具(基于mysql存储过程)还有升级版的通用的 dao和mapper层java代码:

工具提供 mapper,dao层功能如下: 

  • 通用查询,返回对象
  • 通用查询,返回集合
  • 通用分页查询
  • 通用主键查询,返回集合
  • 通过条件和主键in查询,返回集合
  • 通过主键更新
  • 通过条件更新
  • 通过更新带强制字段校验(乐观锁)
  • 通过条件和主键in更新
  • 单条插入,id自增
  • 单条插入,id不自增
  • 批量插入
  • ........

(如需定制化生成代码,请翻阅前几篇文章,本文仅将通用性代码抽取出来:https://www.cnblogs.com/wanglifeng717/p/15839391.html)

  • 1.查询部分示例

因为查询根据不同条件sql不同,可以使用动态语句。使用对象拼接查询条件。此时mapper层只需要一个方法。(工具自动生成代码如下)

// 通用查询,返回对象
@Select({ 
"<script> ",
"select t.id as id,t.create_time as create_time,t.last_update_time as last_update_time,t.login_name as login_name,t.login_password as login_password,t.status as status,t.remark as remark,t.admin_user_id as admin_user_id ",
"from tbl_sapo_admin_account t ",
"<where> ",
"<if test='queryObj!=null'>",
"<if test = 'queryObj.id!=null'> and id=#{queryObj.id,jdbcType=INTEGER}  </if>" ,
"<if test = 'queryObj.create_time!=null'> and create_time=#{queryObj.createTime,jdbcType=TIMESTAMP}  </if>" ,
"<if test = 'queryObj.last_update_time!=null'> and last_update_time=#{queryObj.lastUpdateTime,jdbcType=TIMESTAMP}  </if>" ,
"<if test = 'queryObj.loginName !=null and queryObj.loginName !=&apos;&apos;'> and login_name=#{queryObj.loginName,jdbcType=VARCHAR}  </if>" ,
"<if test = 'queryObj.loginPassword !=null and queryObj.loginPassword !=&apos;&apos;'> and login_password=#{queryObj.loginPassword,jdbcType=VARCHAR}  </if>" ,
"<if test = 'queryObj.status!=null'> and status=#{queryObj.status,jdbcType=INTEGER}  </if>" ,
"<if test = 'queryObj.remark !=null and queryObj.remark !=&apos;&apos;'> and remark=#{queryObj.remark,jdbcType=VARCHAR}  </if>" ,
"<if test = 'queryObj.admin_user_id!=null'> and admin_user_id=#{queryObj.adminUserId,jdbcType=INTEGER}  </if>" ,
"</if>",
"</where> ",
"</script>" 
})
SapoAdminAccount getSapoAdminAccount(@Param("queryObj") SapoAdminAccount sapoAdminAccountForQuery);

 

  • 2.更新部分示例

更新的前提基本都是已经查出来该记录,直接根据主键更新即可。并没有很多花样。(工具自动生成代码如下)

// 通过主键更新
@Update({
    "update tbl_sapo_admin_account set ",
    "create_time=#{updateObj.createTime,jdbcType=TIMESTAMP} ,last_update_time=#{updateObj.lastUpdateTime,jdbcType=TIMESTAMP} ,login_name=#{updateObj.loginName,jdbcType=VARCHAR} ,login_password=#{updateObj.loginPassword,jdbcType=VARCHAR} ,status=#{updateObj.status,jdbcType=INTEGER} ,remark=#{updateObj.remark,jdbcType=VARCHAR} ,admin_user_id=#{updateObj.adminUserId,jdbcType=INTEGER}  ",
    "where id = #{updateObj.id,jdbcType=INTEGER} "
})
int updateSapoAdminAccountByPrimaryKey(@Param("updateObj") SapoAdminAccount sapoAdminAccountForUpdate);

如果更新的条件是不确定的,更新的内容也不确定,可以使用动态语句,基本一个更新语句包打天下(工具自动生成代码如下:)

// 通过条件更新
@Update({ 
"<script> ",
"update tbl_sapo_admin_account ",
"<set>",
"<if test='updateObj!=null'>",
"<if test = 'updateObj.create_time!=null'>  create_time=#{updateObj.createTime,jdbcType=TIMESTAMP} , </if>" ,
"<if test = 'updateObj.last_update_time!=null'>  last_update_time=#{updateObj.lastUpdateTime,jdbcType=TIMESTAMP} , </if>" ,
"<if test = 'updateObj.loginName !=null and updateObj.loginName !=&apos;&apos;'>  login_name=#{updateObj.loginName,jdbcType=VARCHAR} , </if>" ,
"<if test = 'updateObj.loginPassword !=null and updateObj.loginPassword !=&apos;&apos;'>  login_password=#{updateObj.loginPassword,jdbcType=VARCHAR} , </if>" ,
"<if test = 'updateObj.status!=null'>  status=#{updateObj.status,jdbcType=INTEGER} , </if>" ,
"<if test = 'updateObj.remark !=null and updateObj.remark !=&apos;&apos;'>  remark=#{updateObj.remark,jdbcType=VARCHAR} , </if>" ,
"<if test = 'updateObj.admin_user_id!=null'>  admin_user_id=#{updateObj.adminUserId,jdbcType=INTEGER} , </if>" ,
"</if>",
"</set>",
"<where>",
"<if test='queryObj!=null'>",
"<if test = 'queryObj.id!=null'> and id=#{queryObj.id,jdbcType=INTEGER}  </if>" ,
"<if test = 'queryObj.create_time!=null'> and create_time=#{queryObj.createTime,jdbcType=TIMESTAMP}  </if>" ,
"<if test = 'queryObj.last_update_time!=null'> and last_update_time=#{queryObj.lastUpdateTime,jdbcType=TIMESTAMP}  </if>" ,
"<if test = 'queryObj.loginName !=null and queryObj.loginName !=&apos;&apos;'> and login_name=#{queryObj.loginName,jdbcType=VARCHAR}  </if>" ,
"<if test = 'queryObj.loginPassword !=null and queryObj.loginPassword !=&apos;&apos;'> and login_password=#{queryObj.loginPassword,jdbcType=VARCHAR}  </if>" ,
"<if test = 'queryObj.status!=null'> and status=#{queryObj.status,jdbcType=INTEGER}  </if>" ,
"<if test = 'queryObj.remark !=null and queryObj.remark !=&apos;&apos;'> and remark=#{queryObj.remark,jdbcType=VARCHAR}  </if>" ,
"<if test = 'queryObj.admin_user_id!=null'> and admin_user_id=#{queryObj.adminUserId,jdbcType=INTEGER}  </if>" ,
"</if>",
"</where>",
"</script>" 
})
int updateSapoAdminAccount(@Param("updateObj") SapoAdminAccount sapoAdminAccountForUpdate,@Param("queryObj") SapoAdminAccount sapoAdminAccountForQuery);
  • 3.插入部分示例
// 单条插入:id自增
@Insert({ 
    "insert into tbl_sapo_admin_account ",
    "(id,create_time,last_update_time,login_name,login_password,status,remark,admin_user_id)",
    "values ",
    "(#{item.id,jdbcType=INTEGER} ,#{item.createTime,jdbcType=TIMESTAMP} ,#{item.lastUpdateTime,jdbcType=TIMESTAMP} ,#{item.loginName,jdbcType=VARCHAR} ,#{item.loginPassword,jdbcType=VARCHAR} ,#{item.status,jdbcType=INTEGER} ,#{item.remark,jdbcType=VARCHAR} ,#{item.adminUserId,jdbcType=INTEGER} ) "
})
@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
int insertSapoAdminAccount(@Param("item") SapoAdminAccount sapoAdminAccount);

 

// 批量插入
@Insert({
    "<script> ",
        "insert into tbl_sapo_admin_account ( id,create_time,last_update_time,login_name,login_password,status,remark,admin_user_id ) values",
        "<foreach collection='itemList' item='item' index='index' open='(' separator='),(' close=')'>",
            "#{item.id,jdbcType=INTEGER} ,#{item.createTime,jdbcType=TIMESTAMP} ,#{item.lastUpdateTime,jdbcType=TIMESTAMP} ,#{item.loginName,jdbcType=VARCHAR} ,#{item.loginPassword,jdbcType=VARCHAR} ,#{item.status,jdbcType=INTEGER} ,#{item.remark,jdbcType=VARCHAR} ,#{item.adminUserId,jdbcType=INTEGER}  ",
        "</foreach>",
    "</script>" 
})
int batchInsertSapoAdminAccount(@Param("itemList") List<SapoAdminAccount> sapoAdminAccountList);

 

工具生成dao层代码示例

@Repository
public class SapoActDao extends BaseLogger{
    @Autowired
    protected SapoActMapper mapper;

    // 通用查询,返回对象,对象不为空,否则报错
    public SapoAct getSapoAct(SapoAct sapoActForQuery){
        
        if(sapoActForQuery == null || checkSapoActAllFieldsIsNull(sapoActForQuery)){
            bizLogger.warn(" select tbl_sapo_act , but dao layer input sapoActForQuery is null ");
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    ResultInfo.SYS_INNER_ERROR.getDesc() + " dao layer sapoActForQuery is null , bizId=" + BizLogUtils.getValueOfBizId());
        }
        
        SapoAct sapoAct = mapper.getSapoAct(sapoActForQuery);
        
        if(sapoAct == null){
            bizLogger.warn(" select tbl_sapo_act  result is null ,sapoActForQuery : "
                    + sapoActForQuery.toString());
            throw new BusinessException(ResultInfo.NO_DATA.getCode(),ResultInfo.NO_DATA.getDesc() + " ,bizId="+BizLogUtils.getValueOfBizId());
        }
     
        return sapoAct;     
    }

    // 通用查询,返回对象,对象可为空
    public SapoAct getSapoActWithNull(SapoAct sapoActForQuery){
        
        if(sapoActForQuery == null || checkSapoActAllFieldsIsNull(sapoActForQuery)){
            bizLogger.warn(" select tbl_sapo_act , but dao layer input sapoActForQuery is null ");
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    ResultInfo.SYS_INNER_ERROR.getDesc() + " dao layer sapoActForQuery is null , bizId=" + BizLogUtils.getValueOfBizId());
        }
        
        SapoAct sapoAct = mapper.getSapoAct(sapoActForQuery);
     
        return sapoAct;     
    }

    // 通用查询,返回集合,集合不为空,否则报错
    public List<SapoAct> getSapoActList(SapoAct sapoActForQuery){
        
        if(sapoActForQuery == null || checkSapoActAllFieldsIsNull(sapoActForQuery)){
            bizLogger.warn(" select tbl_sapo_act , but dao layer input  sapoActForQuery is null ");
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    ResultInfo.SYS_INNER_ERROR.getDesc() + " dao layer sapoActForQuery is null  , bizId=" + BizLogUtils.getValueOfBizId());
        }
        
        List<SapoAct> sapoActList = mapper.getSapoActList(sapoActForQuery);
        
        if(sapoActList == null || sapoActList.size()==0){
            bizLogger.warn(" select tbl_sapo_act  List is null or size=0 ,sapoActForQuery : "
                    + sapoActForQuery.toString());
            throw new BusinessException(ResultInfo.NO_DATA.getCode(),ResultInfo.NO_DATA.getDesc() + " ,bizId="+BizLogUtils.getValueOfBizId());
        }
     

        // 默认按照createTime降序排列,即刚创建的在前面显示
        //Comparator<SapoAct> comparator = (first, second) -> second.getCreateTime().compareTo(first.getCreateTime());
        //sapoActList.sort(comparator);
        
        if(sapoActList !=null){
            sapoActList.sort(new Comparator<SapoAct>() {
                public int compare(SapoAct o1, SapoAct o2) {
                    return o2.getCreateTime().compareTo(o1.getCreateTime());
                }
            });
        }
        
        
        // sapoActList.forEach(System.out::println);
        
        /* 排序依据:当返回的参数名称与形参名顺序相同时,则为升序。反之为降序。
        public int compare(Integer t1, Integer t2) {
               return t1-t2;    //升序
        }
        public int compare(Integer t1, Integer t2) {
               return t2-t1;    //降序
        }
        t1- t2>0 会交换两个元素的位置。
        */   

     
        return sapoActList;     
    }
     

    // 通用查询,返回集合,集合可以为空
    public List<SapoAct> getSapoActListWithNull(SapoAct sapoActForQuery){
        
        if(sapoActForQuery == null || checkSapoActAllFieldsIsNull(sapoActForQuery)){
            bizLogger.warn(" select tbl_sapo_act , but dao layer input  sapoActForQuery is null ");
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    ResultInfo.SYS_INNER_ERROR.getDesc() + " dao layer sapoActForQuery is null  , bizId=" + BizLogUtils.getValueOfBizId());
        }
        
        List<SapoAct> sapoActList = mapper.getSapoActList(sapoActForQuery);
        
     

        // 默认按照createTime降序排列,即刚创建的在前面显示
        //Comparator<SapoAct> comparator = (first, second) -> second.getCreateTime().compareTo(first.getCreateTime());
        //sapoActList.sort(comparator);
        
        if(sapoActList !=null){
            sapoActList.sort(new Comparator<SapoAct>() {
                public int compare(SapoAct o1, SapoAct o2) {
                    return o2.getCreateTime().compareTo(o1.getCreateTime());
                }
            });
        }
        
        
        // sapoActList.forEach(System.out::println);
        
        /* 排序依据:当返回的参数名称与形参名顺序相同时,则为升序。反之为降序。
        public int compare(Integer t1, Integer t2) {
               return t1-t2;    //升序
        }
        public int compare(Integer t1, Integer t2) {
               return t2-t1;    //降序
        }
        t1- t2>0 会交换两个元素的位置。
        */   

     
        return sapoActList;     
    }
     

    // 通用分页查询,返回当前页集合,集合不能为空,否则报错
    public Page<SapoAct> getSapoActListByPage(Integer pageNum, Integer pageSize, SapoAct sapoActForQuery){
        
        if(sapoActForQuery == null || checkSapoActAllFieldsIsNull(sapoActForQuery)){
            bizLogger.warn(" select tbl_sapo_act , but dao layer getSapoActListByPage input  sapoActForQuery is null ");
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    ResultInfo.SYS_INNER_ERROR.getDesc() + " dao layer sapoActForQuery is null  , bizId=" + BizLogUtils.getValueOfBizId());
        }
        
        
        Page<SapoAct> pageList=null;
        
        // 默认按照create_time 降序排列。即刚创建的在前面显示
        try {
            PageHelper.startPage(pageNum, pageSize," create_time desc ");
            pageList = (Page<SapoAct>) getSapoActList(sapoActForQuery);
        } finally {
            PageHelper.clearPage();
        }
        
        if(pageList == null || pageList.size()==0 ){
            bizLogger.warn(" select tbl_sapo_act  List by page is null or size=0 ,[sapoActForQuery,pageNum,pageSize ]: "
                    + sapoActForQuery.toString()+" ; "+pageNum+" ; "+pageSize);
            throw new BusinessException(ResultInfo.NO_DATA.getCode(),ResultInfo.NO_DATA.getDesc() + " ,bizId="+BizLogUtils.getValueOfBizId());
        }
        // service层可以从Page中获取总条数
        return pageList;
    }

    // 通用分页查询,返回当前页集合,集合不能为空,否则报错
    public Page<SapoAct> getSapoActListByPageWithNull(Integer pageNum, Integer pageSize, SapoAct sapoActForQuery){
        
        if(sapoActForQuery == null || checkSapoActAllFieldsIsNull(sapoActForQuery)){
            bizLogger.warn(" select tbl_sapo_act , but dao layer getSapoActListByPage input  sapoActForQuery is null ");
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    ResultInfo.SYS_INNER_ERROR.getDesc() + " dao layer sapoActForQuery is null  , bizId=" + BizLogUtils.getValueOfBizId());
        }
        
        
        Page<SapoAct> pageList=null;
        
        // 默认按照create_time 降序排列。即刚创建的在前面显示
        try {
            PageHelper.startPage(pageNum, pageSize," create_time desc ");
            pageList = (Page<SapoAct>) getSapoActList(sapoActForQuery);
        } finally {
            PageHelper.clearPage();
        }
        
        // service层可以从Page中获取总条数
        return pageList;
    }

    // 通用分页模糊查询,返回当前页集合,集合不为空,否则报错
    public Page<SapoAct> getSapoActListByFuzzyByPage(Integer pageNum, Integer pageSize, SapoAct sapoActForQuery){
        
        if(sapoActForQuery == null || checkSapoActAllFieldsIsNull(sapoActForQuery)){
            bizLogger.warn(" select tbl_sapo_act , but dao layer getSapoActListByFuzzyByPage input  sapoActForQuery is null ");
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    ResultInfo.SYS_INNER_ERROR.getDesc() + " dao layer sapoActForQuery is null  , bizId=" + BizLogUtils.getValueOfBizId());
        }
        
        Page<SapoAct> pageList=null;
        
        // 默认按照create_time 降序排列。即刚创建的在前面显示
        try {
            PageHelper.startPage(pageNum, pageSize," create_time desc ");
            pageList = (Page<SapoAct>) getSapoActListByFuzzy(sapoActForQuery);
        } finally {
            PageHelper.clearPage();
        }
        
        if(pageList == null || pageList.size()==0 ){
            bizLogger.warn(" select tbl_sapo_act  List by fuzzy by page is null or size=0 ,[sapoActForQuery,pageNum,pageSize ]: "
                    + sapoActForQuery.toString()+" ; "+pageNum+" ; "+pageSize);
            throw new BusinessException(ResultInfo.NO_DATA.getCode(),ResultInfo.NO_DATA.getDesc() + " ,bizId="+BizLogUtils.getValueOfBizId());
        }
        // service层可以从Page中获取总条数
        return pageList;
    }

    // 通用分页模糊查询,返回当前页集合,集合可空
    public Page<SapoAct> getSapoActListByFuzzyByPageWithNull(Integer pageNum, Integer pageSize, SapoAct sapoActForQuery){
        
        if(sapoActForQuery == null || checkSapoActAllFieldsIsNull(sapoActForQuery)){
            bizLogger.warn(" select tbl_sapo_act , but dao layer getSapoActListByFuzzyByPage input  sapoActForQuery is null ");
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    ResultInfo.SYS_INNER_ERROR.getDesc() + " dao layer sapoActForQuery is null  , bizId=" + BizLogUtils.getValueOfBizId());
        }
        
        Page<SapoAct> pageList=null;
        
        // 默认按照create_time 降序排列。即刚创建的在前面显示
        try {
            PageHelper.startPage(pageNum, pageSize," create_time desc ");
            pageList = (Page<SapoAct>) getSapoActListByFuzzy(sapoActForQuery);
        } finally {
            PageHelper.clearPage();
        }
        
        
        // service层可以从Page中获取总条数
        return pageList;
    }

    // 分页形式获取表全部数据,放在一个集合中,集合不能为空,否则报错
    public List<SapoAct> getSapoActListAllPage( SapoAct sapoActForQuery){
        
        if(sapoActForQuery == null || checkSapoActAllFieldsIsNull(sapoActForQuery)){
            bizLogger.warn(" select tbl_sapo_act , but dao layer getSapoActListAllPage input  sapoActForQuery is null ");
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    ResultInfo.SYS_INNER_ERROR.getDesc() + " dao layer sapoActForQuery is null  , bizId=" + BizLogUtils.getValueOfBizId());
        }
        
        int pageNum = 1;
        
        // 分页默认每次拿500条
        int pageSize = 500;
        
        Page<SapoAct>  page = null;
        List<SapoAct>  sapoActList= new ArrayList<SapoAct>(500);
        
        // 循环分页获取每页数据放入集合中
        try {
            do {
                page = PageHelper.startPage(pageNum, pageSize);
                sapoActList.addAll(getSapoActList(sapoActForQuery));
                pageNum++;
            } while (page.getPages() >= pageNum);
        } finally {
            PageHelper.clearPage();
        }
        
        if( sapoActList.size()==0 ){
            bizLogger.warn(" select tbl_sapo_act  List  all page is null or size=0 ,[sapoActForQuery,pageNum,pageSize ]: "
                    + sapoActForQuery.toString()+" ; "+pageNum+" ; "+pageSize);
            throw new BusinessException(ResultInfo.NO_DATA.getCode(),ResultInfo.NO_DATA.getDesc() + " ,bizId="+BizLogUtils.getValueOfBizId());
        }
        
        return sapoActList;
        
    }
   

    // 分页形式获取表全部数据,放在一个集合中,集合可空
    public List<SapoAct> getSapoActListAllPageWithNull( SapoAct sapoActForQuery){
        
        if(sapoActForQuery == null || checkSapoActAllFieldsIsNull(sapoActForQuery)){
            bizLogger.warn(" select tbl_sapo_act , but dao layer getSapoActListAllPage input  sapoActForQuery is null ");
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    ResultInfo.SYS_INNER_ERROR.getDesc() + " dao layer sapoActForQuery is null  , bizId=" + BizLogUtils.getValueOfBizId());
        }
        
        int pageNum = 1;
        
        // 分页默认每次拿500条
        int pageSize = 500;
        
        Page<SapoAct>  page = null;
        List<SapoAct>  sapoActList= new ArrayList<SapoAct>(500);
        
        // 循环分页获取每页数据放入集合中
        try {
            do {
                page = PageHelper.startPage(pageNum, pageSize);
                sapoActList.addAll(getSapoActList(sapoActForQuery));
                pageNum++;
            } while (page.getPages() >= pageNum);
        } finally {
            PageHelper.clearPage();
        }
        
        
        
        return sapoActList;
        
    }
   

    // 通用模糊查询(所有varchar字段都模糊),返回集合,集合不为空,否则报错
    public List<SapoAct> getSapoActListByFuzzy(SapoAct sapoActForQuery){
        
        if(sapoActForQuery == null || checkSapoActAllFieldsIsNull(sapoActForQuery)){
            bizLogger.warn(" select tbl_sapo_act by fuzzy , but dao layer input  sapoActForQuery is null ");
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    ResultInfo.SYS_INNER_ERROR.getDesc() + " dao layer sapoActForQuery is null  , bizId=" + BizLogUtils.getValueOfBizId());
        }
        
        List<SapoAct> sapoActList = mapper.getSapoActListByFuzzy(sapoActForQuery);
        
        if(sapoActList == null || sapoActList.size()==0){
            bizLogger.warn(" select tbl_sapo_act by fuzzy but result List is null or size=0 ,sapoActForQuery : "
                    + sapoActForQuery.toString());
            throw new BusinessException(ResultInfo.NO_DATA.getCode(),ResultInfo.NO_DATA.getDesc() + " ,bizId="+BizLogUtils.getValueOfBizId());
        }
     

        // 默认按照createTime降序排列,即刚创建的在前面显示
        //Comparator<SapoAct> comparator = (first, second) -> second.getCreateTime().compareTo(first.getCreateTime());
        //sapoActList.sort(comparator);
        
        if(sapoActList !=null){
            sapoActList.sort(new Comparator<SapoAct>() {
                public int compare(SapoAct o1, SapoAct o2) {
                    return o2.getCreateTime().compareTo(o1.getCreateTime());
                }
            });
        }
        
        
        // sapoActList.forEach(System.out::println);
        
        /* 排序依据:当返回的参数名称与形参名顺序相同时,则为升序。反之为降序。
        public int compare(Integer t1, Integer t2) {
               return t1-t2;    //升序
        }
        public int compare(Integer t1, Integer t2) {
               return t2-t1;    //降序
        }
        t1- t2>0 会交换两个元素的位置。
        */   

     
        return sapoActList;    
        
        
    }

    // 通用模糊查询(所有varchar字段都模糊),返回集合,集合可空
    public List<SapoAct> getSapoActListByFuzzyWithNull(SapoAct sapoActForQuery){
        
        if(sapoActForQuery == null || checkSapoActAllFieldsIsNull(sapoActForQuery)){
            bizLogger.warn(" select tbl_sapo_act by fuzzy , but dao layer input  sapoActForQuery is null ");
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    ResultInfo.SYS_INNER_ERROR.getDesc() + " dao layer sapoActForQuery is null  , bizId=" + BizLogUtils.getValueOfBizId());
        }
        
        List<SapoAct> sapoActList = mapper.getSapoActListByFuzzy(sapoActForQuery);
        
        
     

        // 默认按照createTime降序排列,即刚创建的在前面显示
        //Comparator<SapoAct> comparator = (first, second) -> second.getCreateTime().compareTo(first.getCreateTime());
        //sapoActList.sort(comparator);
        
        if(sapoActList !=null){
            sapoActList.sort(new Comparator<SapoAct>() {
                public int compare(SapoAct o1, SapoAct o2) {
                    return o2.getCreateTime().compareTo(o1.getCreateTime());
                }
            });
        }
        
        
        // sapoActList.forEach(System.out::println);
        
        /* 排序依据:当返回的参数名称与形参名顺序相同时,则为升序。反之为降序。
        public int compare(Integer t1, Integer t2) {
               return t1-t2;    //升序
        }
        public int compare(Integer t1, Integer t2) {
               return t2-t1;    //降序
        }
        t1- t2>0 会交换两个元素的位置。
        */   

     
        return sapoActList;    
        
        
    }

    // 通用主键查询,返回对象
    public SapoAct getSapoActByPrimaryKey(Integer id){
        
        if(id == null){
            bizLogger.warn(" select tbl_sapo_act , but dao layer input id is null ");
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    ResultInfo.SYS_INNER_ERROR.getDesc() + " dao layer id is null , bizId=" + BizLogUtils.getValueOfBizId());
        }
        
        SapoAct sapoAct = mapper.getSapoActByPrimaryKey(id);
        
        if(sapoAct == null){
            bizLogger.warn(" select tbl_sapo_act  by primary key ,but find null ,id : "
                    + id.toString());
            throw new BusinessException(ResultInfo.NO_DATA.getCode(),ResultInfo.NO_DATA.getDesc() + " ,bizId="+BizLogUtils.getValueOfBizId());
        }
     
        return sapoAct;     
    }

    // 通过主键删除
    public void deleteSapoActByPrimaryKey(Integer id){
        
        if(id == null){
            bizLogger.warn(" delete tbl_sapo_act , but dao layer id input is null ");
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    ResultInfo.SYS_INNER_ERROR.getDesc() + " dao layer id is null , bizId=" + BizLogUtils.getValueOfBizId());
        }
        
        int deleteResult = mapper.deleteSapoActByPrimaryKey(id);
        
        if (deleteResult == 0) {
            bizLogger.warn("delete  tbl_sapo_act  result == 0 [deleteResult, id] : "+deleteResult+","+ id.toString());
            throw new BusinessException(ResultInfo.NO_DATA.getCode(),ResultInfo.NO_DATA.getDesc() + " ,bizId="+BizLogUtils.getValueOfBizId());
        }
        
    }

    // 通过条件和主键in查询,返回集合,集合不为空,否则报错
    public List<SapoAct> getSapoActList( List<Integer> idListForQuery, SapoAct sapoActForQuery){
        
        if((idListForQuery == null || idListForQuery.size()==0 ) 
        && (sapoActForQuery == null || checkSapoActAllFieldsIsNull(sapoActForQuery))){
            bizLogger.warn(" select tbl_sapo_act  idListForQuery  && sapoActForQuery  is null at same time");
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    ResultInfo.SYS_INNER_ERROR.getDesc() + " dao layer input idListForQuery and sapoActForQuery  is null at same time , bizId=" + BizLogUtils.getValueOfBizId());
        }
        
        List<SapoAct> sapoActList = mapper.getSapoActListByIdList(idListForQuery,sapoActForQuery);
        
        if(sapoActList == null || sapoActList.size()==0){
            bizLogger.warn(" select tbl_sapo_act  , but result list is null or size=0 ,sapoActForQuery : "
                    + sapoActForQuery.toString()+"; idListForQuery : "+idListForQuery.toString());
            throw new BusinessException(ResultInfo.NO_DATA.getCode(),ResultInfo.NO_DATA.getDesc() + " ,bizId="+BizLogUtils.getValueOfBizId());
        }
     

        // 默认按照createTime降序排列,即刚创建的在前面显示
        //Comparator<SapoAct> comparator = (first, second) -> second.getCreateTime().compareTo(first.getCreateTime());
        //sapoActList.sort(comparator);
        
        if(sapoActList !=null){
            sapoActList.sort(new Comparator<SapoAct>() {
                public int compare(SapoAct o1, SapoAct o2) {
                    return o2.getCreateTime().compareTo(o1.getCreateTime());
                }
            });
        }
        
        
        // sapoActList.forEach(System.out::println);
        
        /* 排序依据:当返回的参数名称与形参名顺序相同时,则为升序。反之为降序。
        public int compare(Integer t1, Integer t2) {
               return t1-t2;    //升序
        }
        public int compare(Integer t1, Integer t2) {
               return t2-t1;    //降序
        }
        t1- t2>0 会交换两个元素的位置。
        */   

     
        return sapoActList;    
              
    }

    // 通过条件和主键in查询,返回集合,集合不为空,否则报错
    public List<SapoAct> getSapoActListWithNull( List<Integer> idListForQuery, SapoAct sapoActForQuery){
        
        if((idListForQuery == null || idListForQuery.size()==0 ) 
            && (sapoActForQuery == null || checkSapoActAllFieldsIsNull(sapoActForQuery))){
            bizLogger.warn(" select tbl_sapo_act  idListForQuery  && sapoActForQuery  is null at same time");
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    ResultInfo.SYS_INNER_ERROR.getDesc() + " dao layer input idListForQuery and sapoActForQuery  is null at same time , bizId=" + BizLogUtils.getValueOfBizId());
        }
        
        List<SapoAct> sapoActList = mapper.getSapoActListByIdList(idListForQuery,sapoActForQuery);
        
        
     

        // 默认按照createTime降序排列,即刚创建的在前面显示
        //Comparator<SapoAct> comparator = (first, second) -> second.getCreateTime().compareTo(first.getCreateTime());
        //sapoActList.sort(comparator);
        
        if(sapoActList !=null){
            sapoActList.sort(new Comparator<SapoAct>() {
                public int compare(SapoAct o1, SapoAct o2) {
                    return o2.getCreateTime().compareTo(o1.getCreateTime());
                }
            });
        }
        
        
        // sapoActList.forEach(System.out::println);
        
        /* 排序依据:当返回的参数名称与形参名顺序相同时,则为升序。反之为降序。
        public int compare(Integer t1, Integer t2) {
               return t1-t2;    //升序
        }
        public int compare(Integer t1, Integer t2) {
               return t2-t1;    //降序
        }
        t1- t2>0 会交换两个元素的位置。
        */   

     
        return sapoActList;    
              
    }

    // 通过主键更新
    public void updateSapoActByPrimaryKey(SapoAct sapoActForUpdate){
    
        if(sapoActForUpdate == null || checkSapoActAllFieldsIsNull(sapoActForUpdate)){
            bizLogger.warn(" update tbl_sapo_act  dao layer input sapoActForUpdate is null ");
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    ResultInfo.SYS_INNER_ERROR.getDesc() + " dao layer sapoActForUpdate is null , bizId=" + BizLogUtils.getValueOfBizId());
        }
        
        sapoActForUpdate.setLastUpdateTime(LocalDateTime.now());
        
         int updateResult = 0;
        
        try {
            updateResult =  mapper.updateSapoActByPrimaryKey(sapoActForUpdate);
        } catch (DuplicateKeyException e) {
            bizLogger.warn(" update tbl_sapo_act duplicateKeyException ,sapoActForUpdate : "
                    + sapoActForUpdate.toString());
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    ResultInfo.SYS_INNER_ERROR.getDesc() + " duplicate exception ,bizId=" + BizLogUtils.getValueOfBizId(),e);
        }
        
        
        if (updateResult == 0) {
            bizLogger.warn("update  tbl_sapo_act  result == 0 [updateResult, sapoActForUpdate] : "+updateResult+","+ sapoActForUpdate.toString());
            throw new BusinessException(ResultInfo.NO_DATA.getCode(),ResultInfo.NO_DATA.getDesc() + " ,bizId="+BizLogUtils.getValueOfBizId());
        }
        
    }

    // 通过条件更新,如实更新,且查询条件有null,就code is null
    public void updateSapoActByNull(SapoAct sapoActForUpdate,SapoAct sapoActForQuery){
        
        if(sapoActForUpdate == null || checkSapoActAllFieldsIsNull(sapoActForUpdate) 
           || sapoActForQuery==null || checkSapoActAllFieldsIsNull(sapoActForQuery)){
            bizLogger.warn(" update tbl_sapo_act dao layer input , but sapoActForUpdate or sapoActForQuery is null ");
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    ResultInfo.SYS_INNER_ERROR.getDesc() + " sapoActForUpdate or sapoActForQuery is null , bizId=" + BizLogUtils.getValueOfBizId());
        }
        
        sapoActForUpdate.setLastUpdateTime(LocalDateTime.now());
        
        int updateResult = 0;
        
        try {
            updateResult =  mapper.updateSapoActByNull(sapoActForUpdate,sapoActForQuery);
        } catch (DuplicateKeyException e) {
            bizLogger.error(" update tbl_sapo_act duplicateKeyException ,sapoActForQuery : "
                    + sapoActForQuery.toString());
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    ResultInfo.SYS_INNER_ERROR.getDesc() + " duplicate exception ,bizId=" + BizLogUtils.getValueOfBizId(),e);
        }
        
        if (updateResult == 0) {
            bizLogger.warn("update  tbl_sapo_act  result == 0 [updateResult, sapoActForQuery] : "+updateResult+","+ sapoActForQuery.toString());
            throw new BusinessException(ResultInfo.NO_DATA.getCode(),ResultInfo.NO_DATA.getDesc() + " ,bizId="+BizLogUtils.getValueOfBizId());
        }
        
    }

    // 通过条件更新
    public void updateSapoAct(SapoAct sapoActForUpdate,SapoAct sapoActForQuery){
        
        if(sapoActForUpdate == null || checkSapoActAllFieldsIsNull(sapoActForUpdate) 
           || sapoActForQuery==null || checkSapoActAllFieldsIsNull(sapoActForQuery)){
            bizLogger.warn(" update tbl_sapo_act dao layer input , but sapoActForUpdate or sapoActForQuery is null ");
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    ResultInfo.SYS_INNER_ERROR.getDesc() + " sapoActForUpdate or sapoActForQuery is null , bizId=" + BizLogUtils.getValueOfBizId());
        }
        
        sapoActForUpdate.setLastUpdateTime(LocalDateTime.now());
        
        int updateResult = 0;
        
        try {
            updateResult =  mapper.updateSapoAct(sapoActForUpdate,sapoActForQuery);
        } catch (DuplicateKeyException e) {
            bizLogger.error(" update tbl_sapo_act duplicateKeyException ,sapoActForQuery : "
                    + sapoActForQuery.toString());
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    ResultInfo.SYS_INNER_ERROR.getDesc() + " duplicate exception ,bizId=" + BizLogUtils.getValueOfBizId(),e);
        }
        
        if (updateResult == 0) {
            bizLogger.warn("update  tbl_sapo_act  result == 0 [updateResult, sapoActForQuery] : "+updateResult+","+ sapoActForQuery.toString());
            throw new BusinessException(ResultInfo.NO_DATA.getCode(),ResultInfo.NO_DATA.getDesc() + " ,bizId="+BizLogUtils.getValueOfBizId());
        }
        
    }

    // 通过条件和主键in更新
    public void updateSapoAct(List<Integer> idListForQuery,SapoAct sapoActForQuery,SapoAct sapoActForUpdate){
        
        if((idListForQuery == null || idListForQuery.size()==0 ) 
            && (sapoActForQuery == null || checkSapoActAllFieldsIsNull(sapoActForQuery))){
            bizLogger.warn(" update tbl_sapo_act dao layer input , but idListForQuery and sapoActForQuery is null at same time");
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    ResultInfo.SYS_INNER_ERROR.getDesc() + " idListForQuery and sapoActForQuery is null at same time , bizId=" + BizLogUtils.getValueOfBizId());
        }
        
        if(sapoActForUpdate == null  ){
            bizLogger.warn(" update tbl_sapo_act dao layer input , but sapoActForUpdate is null ");
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    ResultInfo.SYS_INNER_ERROR.getDesc() + " sapoActForUpdatey is null  , bizId=" + BizLogUtils.getValueOfBizId());
        }
        
        sapoActForUpdate.setLastUpdateTime(LocalDateTime.now());
        
        int updateResult = 0;
        
        try {
            updateResult =  mapper.updateSapoActByIdList(idListForQuery,sapoActForQuery,sapoActForUpdate);
        } catch (DuplicateKeyException e) {
            bizLogger.error(" update tbl_sapo_act duplicateKeyException ,sapoActForQuery : "
                    + sapoActForQuery.toString()+" ; idListForQuery: "+idListForQuery);
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    ResultInfo.SYS_INNER_ERROR.getDesc() + " duplicate exception ,bizId=" + BizLogUtils.getValueOfBizId(),e);
        }
        
        if (updateResult == 0) {
            bizLogger.warn("update  tbl_sapo_act result  == 0 [updateResult, sapoActForQuery,idListForQuery] : "+updateResult+","+ sapoActForQuery.toString()+","+idListForQuery);
            throw new BusinessException(ResultInfo.NO_DATA.getCode(),ResultInfo.NO_DATA.getDesc() + " ,bizId="+BizLogUtils.getValueOfBizId());
        }
        
    }

    // 单条插入:id自增
    public void insertSapoAct(SapoAct sapoAct){
    
        if(sapoAct == null || checkSapoActAllFieldsIsNull(sapoAct) ){
            bizLogger.warn(" insert tbl_sapo_act  dao layer input , but sapoAct is null ");
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    ResultInfo.SYS_INNER_ERROR.getDesc() + " sapoAct is null  , bizId=" + BizLogUtils.getValueOfBizId());
        }
    
        sapoAct.setCreateTime(LocalDateTime.now());
        sapoAct.setLastUpdateTime(LocalDateTime.now());

        Integer insertResult = null;
        
        try {
            insertResult =  mapper.insertSapoAct(sapoAct);
        } catch (DuplicateKeyException e) {
            bizLogger.error(" insert tbl_sapo_act duplicateKeyException ,sapoAct : "
                    + sapoAct.toString());
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    ResultInfo.SYS_INNER_ERROR.getDesc() + " duplicate exception ,bizId=" + BizLogUtils.getValueOfBizId(),e);
        }
        
        if (insertResult==null || insertResult==0) {
            bizLogger.warn("insert  tbl_sapo_act result is null or result == 0 , sapoAct: "+sapoAct.toString());
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),ResultInfo.SYS_INNER_ERROR.getDesc() + " ,bizId="+BizLogUtils.getValueOfBizId());
        }   
    
    }

    // 单条插入:id不自增
    public void insertSapoActNoIncr(SapoAct sapoAct){
    
        if(sapoAct == null || checkSapoActAllFieldsIsNull(sapoAct) ){
            bizLogger.warn(" insert tbl_sapo_act  sapoAct is null ");
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    ResultInfo.SYS_INNER_ERROR.getDesc() + " sapoAct is null  , bizId=" + BizLogUtils.getValueOfBizId());
        }

        sapoAct.setCreateTime(LocalDateTime.now());
        sapoAct.setLastUpdateTime(LocalDateTime.now());

        int insertResult = 0;
        try {
            insertResult =  mapper.insertSapoAct(sapoAct);
        } catch (DuplicateKeyException e) {
            bizLogger.error(" insert tbl_sapo_act duplicateKeyException ,sapoAct : "
                    + sapoAct.toString());
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    ResultInfo.SYS_INNER_ERROR.getDesc() + " duplicate exception ,bizId=" + BizLogUtils.getValueOfBizId(),e);
        }
        
        if ( insertResult==0) {
            bizLogger.warn("insert  tbl_sapo_act result is null or result == 0 , sapoAct: "+sapoAct.toString());
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),ResultInfo.SYS_INNER_ERROR.getDesc() + " ,bizId="+BizLogUtils.getValueOfBizId());
        }    
        
    }

    // 批量插入
    @SuppressWarnings("unchecked")
    public int batchInsertSapoAct(Object object) {
        // 类型转换,支持单个对象或者集合形式作为入参
        List<SapoAct> list = null;
        if (object instanceof SapoAct) {
            list = new ArrayList<SapoAct>();
            list.add((SapoAct) object);
        } else if (object instanceof List) {
            for (Object o : (List<?>) object) {
                if (!(o instanceof SapoAct)) {
                    throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),ResultInfo.SYS_INNER_ERROR.getDesc() + ",error element: " + o.toString() + ",object type is error for batch insert" + BizLogUtils.getValueOfBizId());
                }
            }
            list = (List<SapoAct>) object;
        } else {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),ResultInfo.SYS_INNER_ERROR.getDesc() + ",object type is error for batch insert"  + BizLogUtils.getValueOfBizId());
        }

        // 如果集合为空则报异常
        if (list == null || list.size() == 0) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),ResultInfo.SYS_INNER_ERROR.getDesc() + ",batch insert empty ,bizId="  + BizLogUtils.getValueOfBizId());
        }

        //设置创建时间

        for(SapoAct sapoAct:list){
             sapoAct.setCreateTime(LocalDateTime.now());
             sapoAct.setLastUpdateTime(LocalDateTime.now());
        }


        // 插入阈值, 每多少条commit一次,默认是200条做一次。
        int threshold = 200;

        int result = 0;
        int sum = list.size();
        int end = 0;
        for (int i = 0; i < sum; i = i + threshold) {
            end = i + threshold > sum ? sum : i + threshold;
            try {
                result += mapper.batchInsertSapoAct(list.subList(i, end));
            } catch (Exception e) {
                //  根据业务做补偿机制,例如通过end值,将之前插入的值全部删除或者状态翻转为无效
                batchInsertSapoActFailOffset(list.subList(0, end));
                throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),ResultInfo.SYS_INNER_ERROR.getDesc()+ ",end value: " + end + ",batch insert has error,offset [batch insert error] success ,bizId=" + BizLogUtils.getValueOfBizId(),  e);
            }
        }
        return result;
    }

    // 批量插入失败后,进行相关补偿操作
    private void batchInsertSapoActFailOffset(List<SapoAct> list) {

        //  补偿操作,可以比插入操作的阈值大一点, 每多少条commit一次,默认是400条做一次。
        int threshold = 400;
        int sum = list.size();
        int end = 0;
        for (int i = 0; i < sum; i = i + threshold) {
            end = i + threshold > sum ? sum : i + threshold;
            try {
                // TODO 批量插入失败后,需要进行补偿的操作,例如:将之前插入的值全部删除或者状态翻转为无效
                //List<Integer> idList = list.subList(i, end).stream().map(SapoAct::getId).collect(Collectors.toList());
                //SapoAct sapoActForUpdate = new SapoAct();
                //sapoActForUpdate.setId(list.get(i).getId());
                //sapoActForUpdate.setStatus(SapoAct.STATUS_INVALID);
                //deleteSapoActByPrimaryKey(list.get(i).getId());
                //updateSapoAct(idList,null,sapoActForUpdate);
            } catch (Exception e) {
                // 如果做业务补偿的时候也失败了,只能将重要信息打印在日志里面,运维干预进行恢复了
                throw new BusinessException( ResultInfo.SYS_INNER_ERROR.getCode(),ResultInfo.SYS_INNER_ERROR.getDesc() + ", [offset batch insert error]  failed ,"+ ",bizId: " + BizLogUtils.getValueOfBizId(), e);
            }
        }

    }

    // 通用外键查询,返回对象,对象不为空,否则报错
    public SapoAct getSapoActByCode(String code){
        
        if(code == null){
            bizLogger.warn(" select tbl_sapo_act , but dao layer input code is null ");
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    ResultInfo.SYS_INNER_ERROR.getDesc() + " code is null , bizId=" + BizLogUtils.getValueOfBizId());
        }
        
        SapoAct sapoAct = mapper.getSapoActByCode(code);
        
        if(sapoAct == null){
            bizLogger.warn(" select tbl_sapo_act  by code ,but find null ,code : "
                    + code.toString());
            throw new BusinessException(ResultInfo.NO_DATA.getCode(),ResultInfo.NO_DATA.getDesc() + " ,bizId="+BizLogUtils.getValueOfBizId());
        }
     
        return sapoAct;     
    }

    // 通用外键查询,返回对象,对象可为空
    public SapoAct getSapoActByCodeWithNull(String code){
        
        if(code == null){
            bizLogger.warn(" select tbl_sapo_act , but dao layer input code is null ");
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    ResultInfo.SYS_INNER_ERROR.getDesc() + " code is null , bizId=" + BizLogUtils.getValueOfBizId());
        }
        
        SapoAct sapoAct = mapper.getSapoActByCode(code);
     
        return sapoAct;     
    }

    // 判断每个字段是否为空
    private  boolean checkSapoActAllFieldsIsNull(SapoAct object) {
        if (null == object) {
            return true;
        }
        try {
            for (java.lang.reflect.Field f : object.getClass().getDeclaredFields()) {
                f.setAccessible(true);
                if (f.get(object) != null
                        && org.apache.commons.lang3.StringUtils.isNotBlank(f.get(object).toString())) {
                    return false;
                }
            }
        } catch (Exception e) {
           throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    ResultInfo.SYS_INNER_ERROR.getDesc() + " checkSapoActAllFieldsIsNull error , bizId=" + BizLogUtils.getValueOfBizId(),e);
        }
        return true;
    }

}
View Code

工具生成mapper层代码示例:

@Mapper
public interface SapoActMapper{

    // 通用查询,返回对象,对象不为空,否则报错
    @Select({ 
    "<script> ",
        "select  t.`id` as 'id' , t.`code` as 'code' , t.`create_time` as 'create_time' , t.`last_update_time` as 'last_update_time' , t.`name` as 'name' , t.`detail` as 'detail' , t.`resource` as 'resource' , t.`act_form` as 'act_form' , t.`status` as 'status' , t.`begin_time` as 'begin_time' , t.`end_time` as 'end_time'  ",
        "from tbl_sapo_act t ",
        "<where> ",
            "<if test ='queryObj !=null and queryObj.id != null' > and id=#{queryObj.id,jdbcType=INTEGER} </if>",
            "<if test ='queryObj !=null and queryObj.code != null and queryObj.code != &apos;&apos;' > and code=#{queryObj.code,jdbcType=VARCHAR} </if>",
            "<if test ='queryObj !=null and queryObj.createTime != null' > and create_time=#{queryObj.createTime,jdbcType=TIMESTAMP} </if>",
            "<if test ='queryObj !=null and queryObj.lastUpdateTime != null' > and last_update_time=#{queryObj.lastUpdateTime,jdbcType=TIMESTAMP} </if>",
            "<if test ='queryObj !=null and queryObj.name != null and queryObj.name != &apos;&apos;' > and name=#{queryObj.name,jdbcType=VARCHAR} </if>",
            "<if test ='queryObj !=null and queryObj.detail != null and queryObj.detail != &apos;&apos;' > and detail=#{queryObj.detail,jdbcType=VARCHAR} </if>",
            "<if test ='queryObj !=null and queryObj.resource != null and queryObj.resource != &apos;&apos;' > and resource=#{queryObj.resource,jdbcType=VARCHAR} </if>",
            "<if test ='queryObj !=null and queryObj.actForm != null' > and act_form=#{queryObj.actForm,jdbcType=INTEGER} </if>",
            "<if test ='queryObj !=null and queryObj.status != null' > and status=#{queryObj.status,jdbcType=INTEGER} </if>",
            "<if test ='queryObj !=null and queryObj.beginTime != null and queryObj.beginTime != &apos;&apos;' > and begin_time=#{queryObj.beginTime,jdbcType=VARCHAR} </if>",
            "<if test ='queryObj !=null and queryObj.endTime != null and queryObj.endTime != &apos;&apos;' > and end_time=#{queryObj.endTime,jdbcType=VARCHAR} </if>",
        "</where> ",
    "</script>" 
    })
    SapoAct getSapoAct(@Param("queryObj") SapoAct sapoActForQuery);

    // 通用查询,返回集合
    @Select({ 
    "<script> ",
        "select  t.`id` as 'id' , t.`code` as 'code' , t.`create_time` as 'create_time' , t.`last_update_time` as 'last_update_time' , t.`name` as 'name' , t.`detail` as 'detail' , t.`resource` as 'resource' , t.`act_form` as 'act_form' , t.`status` as 'status' , t.`begin_time` as 'begin_time' , t.`end_time` as 'end_time'  ",
        "from tbl_sapo_act t ",
        "<where> ",
            "<if test ='queryObj !=null and queryObj.id != null' > and id=#{queryObj.id,jdbcType=INTEGER} </if>",
            "<if test ='queryObj !=null and queryObj.code != null and queryObj.code != &apos;&apos;' > and code=#{queryObj.code,jdbcType=VARCHAR} </if>",
            "<if test ='queryObj !=null and queryObj.createTime != null' > and create_time=#{queryObj.createTime,jdbcType=TIMESTAMP} </if>",
            "<if test ='queryObj !=null and queryObj.lastUpdateTime != null' > and last_update_time=#{queryObj.lastUpdateTime,jdbcType=TIMESTAMP} </if>",
            "<if test ='queryObj !=null and queryObj.name != null and queryObj.name != &apos;&apos;' > and name=#{queryObj.name,jdbcType=VARCHAR} </if>",
            "<if test ='queryObj !=null and queryObj.detail != null and queryObj.detail != &apos;&apos;' > and detail=#{queryObj.detail,jdbcType=VARCHAR} </if>",
            "<if test ='queryObj !=null and queryObj.resource != null and queryObj.resource != &apos;&apos;' > and resource=#{queryObj.resource,jdbcType=VARCHAR} </if>",
            "<if test ='queryObj !=null and queryObj.actForm != null' > and act_form=#{queryObj.actForm,jdbcType=INTEGER} </if>",
            "<if test ='queryObj !=null and queryObj.status != null' > and status=#{queryObj.status,jdbcType=INTEGER} </if>",
            "<if test ='queryObj !=null and queryObj.beginTime != null and queryObj.beginTime != &apos;&apos;' > and begin_time=#{queryObj.beginTime,jdbcType=VARCHAR} </if>",
            "<if test ='queryObj !=null and queryObj.endTime != null and queryObj.endTime != &apos;&apos;' > and end_time=#{queryObj.endTime,jdbcType=VARCHAR} </if>",
        "</where> ",
    "</script>" 
    })
    List<SapoAct> getSapoActList(@Param("queryObj") SapoAct sapoActForQuery);

    // 通用模糊查询(所有varchar字段都模糊),返回集合
    @Select({ 
    "<script> ",
        "select  t.`id` as 'id' , t.`code` as 'code' , t.`create_time` as 'create_time' , t.`last_update_time` as 'last_update_time' , t.`name` as 'name' , t.`detail` as 'detail' , t.`resource` as 'resource' , t.`act_form` as 'act_form' , t.`status` as 'status' , t.`begin_time` as 'begin_time' , t.`end_time` as 'end_time'  ",
        "from tbl_sapo_act t ",
        "<where> ",
            "<if test ='queryObj !=null and queryObj.id != null' > and id=#{queryObj.id,jdbcType=INTEGER} </if>",
            "<if test ='queryObj !=null and queryObj.code != null and queryObj.code != &apos;&apos;' > and code like concat('%',#{queryObj.code,jdbcType=VARCHAR},'%') </if>",
            "<if test ='queryObj !=null and queryObj.createTime != null' > and create_time=#{queryObj.createTime,jdbcType=TIMESTAMP} </if>",
            "<if test ='queryObj !=null and queryObj.lastUpdateTime != null' > and last_update_time=#{queryObj.lastUpdateTime,jdbcType=TIMESTAMP} </if>",
            "<if test ='queryObj !=null and queryObj.name != null and queryObj.name != &apos;&apos;' > and name like concat('%',#{queryObj.name,jdbcType=VARCHAR},'%') </if>",
            "<if test ='queryObj !=null and queryObj.detail != null and queryObj.detail != &apos;&apos;' > and detail like concat('%',#{queryObj.detail,jdbcType=VARCHAR},'%') </if>",
            "<if test ='queryObj !=null and queryObj.resource != null and queryObj.resource != &apos;&apos;' > and resource like concat('%',#{queryObj.resource,jdbcType=VARCHAR},'%') </if>",
            "<if test ='queryObj !=null and queryObj.actForm != null' > and act_form=#{queryObj.actForm,jdbcType=INTEGER} </if>",
            "<if test ='queryObj !=null and queryObj.status != null' > and status=#{queryObj.status,jdbcType=INTEGER} </if>",
            "<if test ='queryObj !=null and queryObj.beginTime != null and queryObj.beginTime != &apos;&apos;' > and begin_time like concat('%',#{queryObj.beginTime,jdbcType=VARCHAR},'%') </if>",
            "<if test ='queryObj !=null and queryObj.endTime != null and queryObj.endTime != &apos;&apos;' > and end_time like concat('%',#{queryObj.endTime,jdbcType=VARCHAR},'%') </if>",
        "</where> ",
    "</script>" 
    })
    List<SapoAct> getSapoActListByFuzzy(@Param("queryObj") SapoAct sapoActForQuery);

    // 通过主键查询,返回对象
    @Select({
        "select  t.`id` as 'id' , t.`code` as 'code' , t.`create_time` as 'create_time' , t.`last_update_time` as 'last_update_time' , t.`name` as 'name' , t.`detail` as 'detail' , t.`resource` as 'resource' , t.`act_form` as 'act_form' , t.`status` as 'status' , t.`begin_time` as 'begin_time' , t.`end_time` as 'end_time'  ",
        "from tbl_sapo_act t ",
        "where id = #{id,jdbcType=INTEGER}"
    })
    SapoAct getSapoActByPrimaryKey(Integer id);

    // 通过主键删除
    @Select({
        "delete ",
        "from tbl_sapo_act  ",
        "where id = #{id,jdbcType=INTEGER}"
    })
    int deleteSapoActByPrimaryKey(Integer id);

    // 通过条件和主键in查询,返回集合
    @Select({ 
    "<script> ",
        "select  t.`id` as 'id' , t.`code` as 'code' , t.`create_time` as 'create_time' , t.`last_update_time` as 'last_update_time' , t.`name` as 'name' , t.`detail` as 'detail' , t.`resource` as 'resource' , t.`act_form` as 'act_form' , t.`status` as 'status' , t.`begin_time` as 'begin_time' , t.`end_time` as 'end_time'  ",
        "from tbl_sapo_act t ",
        "<where> ",
            "<if test ='queryObj !=null and queryObj.id != null' > and id=#{queryObj.id,jdbcType=INTEGER} </if>",
            "<if test ='queryObj !=null and queryObj.code != null and queryObj.code != &apos;&apos;' > and code=#{queryObj.code,jdbcType=VARCHAR} </if>",
            "<if test ='queryObj !=null and queryObj.createTime != null' > and create_time=#{queryObj.createTime,jdbcType=TIMESTAMP} </if>",
            "<if test ='queryObj !=null and queryObj.lastUpdateTime != null' > and last_update_time=#{queryObj.lastUpdateTime,jdbcType=TIMESTAMP} </if>",
            "<if test ='queryObj !=null and queryObj.name != null and queryObj.name != &apos;&apos;' > and name=#{queryObj.name,jdbcType=VARCHAR} </if>",
            "<if test ='queryObj !=null and queryObj.detail != null and queryObj.detail != &apos;&apos;' > and detail=#{queryObj.detail,jdbcType=VARCHAR} </if>",
            "<if test ='queryObj !=null and queryObj.resource != null and queryObj.resource != &apos;&apos;' > and resource=#{queryObj.resource,jdbcType=VARCHAR} </if>",
            "<if test ='queryObj !=null and queryObj.actForm != null' > and act_form=#{queryObj.actForm,jdbcType=INTEGER} </if>",
            "<if test ='queryObj !=null and queryObj.status != null' > and status=#{queryObj.status,jdbcType=INTEGER} </if>",
            "<if test ='queryObj !=null and queryObj.beginTime != null and queryObj.beginTime != &apos;&apos;' > and begin_time=#{queryObj.beginTime,jdbcType=VARCHAR} </if>",
            "<if test ='queryObj !=null and queryObj.endTime != null and queryObj.endTime != &apos;&apos;' > and end_time=#{queryObj.endTime,jdbcType=VARCHAR} </if>",
            "<if test = 'itemList != null and itemList.size() > 0'> AND id IN " ,
            "    <foreach collection='itemList' item='item' index='index' open='(' separator=',' close=')'> " ,
            "        #{item,jdbcType=INTEGER}   " ,
            "    </foreach> " ,
            "</if>" ,
        "</where> ",
    "</script>" 
    })
    List<SapoAct> getSapoActListByIdList(@Param("itemList") List<Integer> idListForQuery,@Param("queryObj") SapoAct sapoActForQuery);

    // 通过主键更新
    @Update({
        "update tbl_sapo_act set ",
        "code=#{updateObj.code,jdbcType=VARCHAR},create_time=#{updateObj.createTime,jdbcType=TIMESTAMP},last_update_time=#{updateObj.lastUpdateTime,jdbcType=TIMESTAMP},name=#{updateObj.name,jdbcType=VARCHAR},detail=#{updateObj.detail,jdbcType=VARCHAR},resource=#{updateObj.resource,jdbcType=VARCHAR},act_form=#{updateObj.actForm,jdbcType=INTEGER},status=#{updateObj.status,jdbcType=INTEGER},begin_time=#{updateObj.beginTime,jdbcType=VARCHAR},end_time=#{updateObj.endTime,jdbcType=VARCHAR} ",
        "where id = #{updateObj.id,jdbcType=INTEGER} "
    })
    int updateSapoActByPrimaryKey(@Param("updateObj") SapoAct sapoActForUpdate);

    // 通过条件更新
    @Update({ 
    "<script> ",
        "update tbl_sapo_act  set ",
        "code=#{updateObj.code,jdbcType=VARCHAR},create_time=#{updateObj.createTime,jdbcType=TIMESTAMP},last_update_time=#{updateObj.lastUpdateTime,jdbcType=TIMESTAMP},name=#{updateObj.name,jdbcType=VARCHAR},detail=#{updateObj.detail,jdbcType=VARCHAR},resource=#{updateObj.resource,jdbcType=VARCHAR},act_form=#{updateObj.actForm,jdbcType=INTEGER},status=#{updateObj.status,jdbcType=INTEGER},begin_time=#{updateObj.beginTime,jdbcType=VARCHAR},end_time=#{updateObj.endTime,jdbcType=VARCHAR} ",
        "<where>",
            "<choose><when test ='queryObj !=null and queryObj.id != null' > and id=#{queryObj.id,jdbcType=INTEGER}  </when><otherwise> and id is null </otherwise></choose>",
            "<choose><when test ='queryObj !=null and queryObj.code != null and queryObj.code != &apos;&apos;' > and code=#{queryObj.code,jdbcType=VARCHAR}  </when><otherwise> and code is null </otherwise></choose>",
            "<choose><when test ='queryObj !=null and queryObj.createTime != null' > and create_time=#{queryObj.createTime,jdbcType=TIMESTAMP}  </when><otherwise> and create_time is null </otherwise></choose>",
            "<choose><when test ='queryObj !=null and queryObj.lastUpdateTime != null' > and last_update_time=#{queryObj.lastUpdateTime,jdbcType=TIMESTAMP}  </when><otherwise> and last_update_time is null </otherwise></choose>",
            "<choose><when test ='queryObj !=null and queryObj.name != null and queryObj.name != &apos;&apos;' > and name=#{queryObj.name,jdbcType=VARCHAR}  </when><otherwise> and name is null </otherwise></choose>",
            "<choose><when test ='queryObj !=null and queryObj.detail != null and queryObj.detail != &apos;&apos;' > and detail=#{queryObj.detail,jdbcType=VARCHAR}  </when><otherwise> and detail is null </otherwise></choose>",
            "<choose><when test ='queryObj !=null and queryObj.resource != null and queryObj.resource != &apos;&apos;' > and resource=#{queryObj.resource,jdbcType=VARCHAR}  </when><otherwise> and resource is null </otherwise></choose>",
            "<choose><when test ='queryObj !=null and queryObj.actForm != null' > and act_form=#{queryObj.actForm,jdbcType=INTEGER}  </when><otherwise> and act_form is null </otherwise></choose>",
            "<choose><when test ='queryObj !=null and queryObj.status != null' > and status=#{queryObj.status,jdbcType=INTEGER}  </when><otherwise> and status is null </otherwise></choose>",
            "<choose><when test ='queryObj !=null and queryObj.beginTime != null and queryObj.beginTime != &apos;&apos;' > and begin_time=#{queryObj.beginTime,jdbcType=VARCHAR}  </when><otherwise> and begin_time is null </otherwise></choose>",
            "<choose><when test ='queryObj !=null and queryObj.endTime != null and queryObj.endTime != &apos;&apos;' > and end_time=#{queryObj.endTime,jdbcType=VARCHAR}  </when><otherwise> and end_time is null </otherwise></choose>",
        "</where>",
    "</script>" 
    })
    int updateSapoActByNull(@Param("updateObj") SapoAct sapoActForUpdate,@Param("queryObj") SapoAct sapoActForQuery);

    // 通过条件更新
    @Update({ 
    "<script> ",
        "update tbl_sapo_act ",
        "<set>",
            "<if test ='updateObj !=null and updateObj.code != null and updateObj.code != &apos;&apos;' >  code=#{updateObj.code,jdbcType=VARCHAR} , </if>",
            "<if test ='updateObj !=null and updateObj.createTime != null' >  create_time=#{updateObj.createTime,jdbcType=TIMESTAMP} , </if>",
            "<if test ='updateObj !=null and updateObj.lastUpdateTime != null' >  last_update_time=#{updateObj.lastUpdateTime,jdbcType=TIMESTAMP} , </if>",
            "<if test ='updateObj !=null and updateObj.name != null and updateObj.name != &apos;&apos;' >  name=#{updateObj.name,jdbcType=VARCHAR} , </if>",
            "<if test ='updateObj !=null and updateObj.detail != null and updateObj.detail != &apos;&apos;' >  detail=#{updateObj.detail,jdbcType=VARCHAR} , </if>",
            "<if test ='updateObj !=null and updateObj.resource != null and updateObj.resource != &apos;&apos;' >  resource=#{updateObj.resource,jdbcType=VARCHAR} , </if>",
            "<if test ='updateObj !=null and updateObj.actForm != null' >  act_form=#{updateObj.actForm,jdbcType=INTEGER} , </if>",
            "<if test ='updateObj !=null and updateObj.status != null' >  status=#{updateObj.status,jdbcType=INTEGER} , </if>",
            "<if test ='updateObj !=null and updateObj.beginTime != null and updateObj.beginTime != &apos;&apos;' >  begin_time=#{updateObj.beginTime,jdbcType=VARCHAR} , </if>",
            "<if test ='updateObj !=null and updateObj.endTime != null and updateObj.endTime != &apos;&apos;' >  end_time=#{updateObj.endTime,jdbcType=VARCHAR} , </if>",
        "</set>",
        "<where>",
            "<if test ='queryObj !=null and queryObj.id != null' > and id=#{queryObj.id,jdbcType=INTEGER} </if>",
            "<if test ='queryObj !=null and queryObj.code != null and queryObj.code != &apos;&apos;' > and code=#{queryObj.code,jdbcType=VARCHAR} </if>",
            "<if test ='queryObj !=null and queryObj.createTime != null' > and create_time=#{queryObj.createTime,jdbcType=TIMESTAMP} </if>",
            "<if test ='queryObj !=null and queryObj.lastUpdateTime != null' > and last_update_time=#{queryObj.lastUpdateTime,jdbcType=TIMESTAMP} </if>",
            "<if test ='queryObj !=null and queryObj.name != null and queryObj.name != &apos;&apos;' > and name=#{queryObj.name,jdbcType=VARCHAR} </if>",
            "<if test ='queryObj !=null and queryObj.detail != null and queryObj.detail != &apos;&apos;' > and detail=#{queryObj.detail,jdbcType=VARCHAR} </if>",
            "<if test ='queryObj !=null and queryObj.resource != null and queryObj.resource != &apos;&apos;' > and resource=#{queryObj.resource,jdbcType=VARCHAR} </if>",
            "<if test ='queryObj !=null and queryObj.actForm != null' > and act_form=#{queryObj.actForm,jdbcType=INTEGER} </if>",
            "<if test ='queryObj !=null and queryObj.status != null' > and status=#{queryObj.status,jdbcType=INTEGER} </if>",
            "<if test ='queryObj !=null and queryObj.beginTime != null and queryObj.beginTime != &apos;&apos;' > and begin_time=#{queryObj.beginTime,jdbcType=VARCHAR} </if>",
            "<if test ='queryObj !=null and queryObj.endTime != null and queryObj.endTime != &apos;&apos;' > and end_time=#{queryObj.endTime,jdbcType=VARCHAR} </if>",
        "</where>",
    "</script>" 
    })
    int updateSapoAct(@Param("updateObj") SapoAct sapoActForUpdate,@Param("queryObj") SapoAct sapoActForQuery);

    // 通过条件和主键in更新
    @Update({ 
    "<script> ",
        "update tbl_sapo_act ",
        "<set>",
            "<if test ='updateObj !=null and updateObj.code != null and updateObj.code != &apos;&apos;' >  code=#{updateObj.code,jdbcType=VARCHAR} , </if>",
            "<if test ='updateObj !=null and updateObj.createTime != null' >  create_time=#{updateObj.createTime,jdbcType=TIMESTAMP} , </if>",
            "<if test ='updateObj !=null and updateObj.lastUpdateTime != null' >  last_update_time=#{updateObj.lastUpdateTime,jdbcType=TIMESTAMP} , </if>",
            "<if test ='updateObj !=null and updateObj.name != null and updateObj.name != &apos;&apos;' >  name=#{updateObj.name,jdbcType=VARCHAR} , </if>",
            "<if test ='updateObj !=null and updateObj.detail != null and updateObj.detail != &apos;&apos;' >  detail=#{updateObj.detail,jdbcType=VARCHAR} , </if>",
            "<if test ='updateObj !=null and updateObj.resource != null and updateObj.resource != &apos;&apos;' >  resource=#{updateObj.resource,jdbcType=VARCHAR} , </if>",
            "<if test ='updateObj !=null and updateObj.actForm != null' >  act_form=#{updateObj.actForm,jdbcType=INTEGER} , </if>",
            "<if test ='updateObj !=null and updateObj.status != null' >  status=#{updateObj.status,jdbcType=INTEGER} , </if>",
            "<if test ='updateObj !=null and updateObj.beginTime != null and updateObj.beginTime != &apos;&apos;' >  begin_time=#{updateObj.beginTime,jdbcType=VARCHAR} , </if>",
            "<if test ='updateObj !=null and updateObj.endTime != null and updateObj.endTime != &apos;&apos;' >  end_time=#{updateObj.endTime,jdbcType=VARCHAR} , </if>",
        "</set>",
        "<where>",
            "<if test ='queryObj !=null and queryObj.id != null' > and id=#{queryObj.id,jdbcType=INTEGER} </if>",
            "<if test ='queryObj !=null and queryObj.code != null and queryObj.code != &apos;&apos;' > and code=#{queryObj.code,jdbcType=VARCHAR} </if>",
            "<if test ='queryObj !=null and queryObj.createTime != null' > and create_time=#{queryObj.createTime,jdbcType=TIMESTAMP} </if>",
            "<if test ='queryObj !=null and queryObj.lastUpdateTime != null' > and last_update_time=#{queryObj.lastUpdateTime,jdbcType=TIMESTAMP} </if>",
            "<if test ='queryObj !=null and queryObj.name != null and queryObj.name != &apos;&apos;' > and name=#{queryObj.name,jdbcType=VARCHAR} </if>",
            "<if test ='queryObj !=null and queryObj.detail != null and queryObj.detail != &apos;&apos;' > and detail=#{queryObj.detail,jdbcType=VARCHAR} </if>",
            "<if test ='queryObj !=null and queryObj.resource != null and queryObj.resource != &apos;&apos;' > and resource=#{queryObj.resource,jdbcType=VARCHAR} </if>",
            "<if test ='queryObj !=null and queryObj.actForm != null' > and act_form=#{queryObj.actForm,jdbcType=INTEGER} </if>",
            "<if test ='queryObj !=null and queryObj.status != null' > and status=#{queryObj.status,jdbcType=INTEGER} </if>",
            "<if test ='queryObj !=null and queryObj.beginTime != null and queryObj.beginTime != &apos;&apos;' > and begin_time=#{queryObj.beginTime,jdbcType=VARCHAR} </if>",
            "<if test ='queryObj !=null and queryObj.endTime != null and queryObj.endTime != &apos;&apos;' > and end_time=#{queryObj.endTime,jdbcType=VARCHAR} </if>",
            "<if test = 'itemList != null and itemList.size() > 0'> AND id IN " ,
            "    <foreach collection='itemList' item='item' index='index' open='(' separator=',' close=')'> " ,
            "        #{item,jdbcType=INTEGER}   " ,
            "    </foreach> " ,
            "</if>" ,
        "</where>",
    "</script>" 
    })
    int updateSapoActByIdList(@Param("itemList") List<Integer> idListForQuery,@Param("queryObj") SapoAct sapoActForQuery,@Param("updateObj") SapoAct sapoActForUpdate);

    // 单条插入:id自增
    @Insert({ 
        "insert into tbl_sapo_act ",
        "( `id` , `code` , `create_time` , `last_update_time` , `name` , `detail` , `resource` , `act_form` , `status` , `begin_time` , `end_time` )",
        "values ",
        "(#{item.id,jdbcType=INTEGER},#{item.code,jdbcType=VARCHAR},#{item.createTime,jdbcType=TIMESTAMP},#{item.lastUpdateTime,jdbcType=TIMESTAMP},#{item.name,jdbcType=VARCHAR},#{item.detail,jdbcType=VARCHAR},#{item.resource,jdbcType=VARCHAR},#{item.actForm,jdbcType=INTEGER},#{item.status,jdbcType=INTEGER},#{item.beginTime,jdbcType=VARCHAR},#{item.endTime,jdbcType=VARCHAR}) "
    })
    @Options(useGeneratedKeys = true, keyProperty = "item.id", keyColumn = "id")
    int insertSapoAct(@Param("item") SapoAct sapoAct);

    // 单条插入:id不自增
    @Insert({ 
        "insert into tbl_sapo_act ",
        "( `id` , `code` , `create_time` , `last_update_time` , `name` , `detail` , `resource` , `act_form` , `status` , `begin_time` , `end_time` )",
        "values ",
        "(#{item.id,jdbcType=INTEGER},#{item.code,jdbcType=VARCHAR},#{item.createTime,jdbcType=TIMESTAMP},#{item.lastUpdateTime,jdbcType=TIMESTAMP},#{item.name,jdbcType=VARCHAR},#{item.detail,jdbcType=VARCHAR},#{item.resource,jdbcType=VARCHAR},#{item.actForm,jdbcType=INTEGER},#{item.status,jdbcType=INTEGER},#{item.beginTime,jdbcType=VARCHAR},#{item.endTime,jdbcType=VARCHAR}) "
    })
    int insertSapoActNoIncr(@Param("item") SapoAct sapoAct);

    // 批量插入
    @Insert({
        "<script> ",
            "insert into tbl_sapo_act (  `id` , `code` , `create_time` , `last_update_time` , `name` , `detail` , `resource` , `act_form` , `status` , `begin_time` , `end_time`  ) values",
            "<foreach collection='itemList' item='item' index='index' open='(' separator='),(' close=')'>",
                "#{item.id,jdbcType=INTEGER},#{item.code,jdbcType=VARCHAR},#{item.createTime,jdbcType=TIMESTAMP},#{item.lastUpdateTime,jdbcType=TIMESTAMP},#{item.name,jdbcType=VARCHAR},#{item.detail,jdbcType=VARCHAR},#{item.resource,jdbcType=VARCHAR},#{item.actForm,jdbcType=INTEGER},#{item.status,jdbcType=INTEGER},#{item.beginTime,jdbcType=VARCHAR},#{item.endTime,jdbcType=VARCHAR} ",
            "</foreach>",
        "</script>" 
    })
    int batchInsertSapoAct(@Param("itemList") List<SapoAct> sapoActList);

    // 通过外键查询,返回对象
    @Select({
        "select  t.`id` as 'id' , t.`code` as 'code' , t.`create_time` as 'create_time' , t.`last_update_time` as 'last_update_time' , t.`name` as 'name' , t.`detail` as 'detail' , t.`resource` as 'resource' , t.`act_form` as 'act_form' , t.`status` as 'status' , t.`begin_time` as 'begin_time' , t.`end_time` as 'end_time'  ",
        "from tbl_sapo_act t ",
        "where code = #{code,jdbcType=VARCHAR}"
    })
    SapoAct getSapoActByCode(String code);

}
View Code

 

自动生成代码存储过程:

   1 DROP PROCEDURE IF EXISTS `print_code`;
   2 DELIMITER $
   3 CREATE  PROCEDURE `print_code`()
   4 BEGIN
   5 
   6 SET  group_concat_max_len = 4294967295;
   7 
   8 
   9 -- SET @noStrInTbl='tbl_ams';
  10  SET @noStrInTbl='tbl';
  11 
  12 
  13 
  14 -- 保存所有表及表的所有字段
  15 DROP TABLE if EXISTS all_col_table;
  16 CREATE table if not exists all_col_table(
  17 `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
  18 tbl_name VARCHAR(256)    COMMENT '表名:tbl_sapo_admin_account',
  19 tbl_name_comment  VARCHAR(256)   COMMENT '表注释',
  20 
  21 tbl_name_upper_camel VARCHAR(1024) COMMENT '表名大写驼峰:SapoAdminAccount',
  22 tbl_name_lower_camel VARCHAR(1024) COMMENT '表名小写驼峰:sapoAdminAccount',
  23 
  24 col VARCHAR(256)   COMMENT '字段名:create_time',
  25 col_comment VARCHAR(512) COMMENT '字段注释',
  26 col_type VARCHAR(256) COMMENT '字段类型,datetime',
  27 
  28 col_upper_camel VARCHAR(256)   COMMENT '字段大写:create_time',
  29 col_lower_camel VARCHAR(256) COMMENT '字段驼峰形式:createTime',
  30 
  31 col_setter VARCHAR(256)   COMMENT 'setter模式:setCreateTime',
  32 col_getter VARCHAR(256)   COMMENT 'getter模式:getCreateTime',
  33 
  34 java_type VARCHAR(256) COMMENT 'java类型,datetime',
  35 jdbc_type VARCHAR(256) COMMENT 'jdbc类型:datetime->TIMESTAMP',
  36 PRIMARY KEY (`id`) ,
  37 INDEX idx1(tbl_name,col)
  38 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  39 
  40 
  41 DROP TABLE if EXISTS all_col_code;
  42 CREATE table if not exists all_col_code(
  43 `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
  44 tbl_name VARCHAR(256)    COMMENT '表名:tbl_sapo_admin_account',
  45 col VARCHAR(256)   COMMENT '字段名:create_time',
  46 col_type VARCHAR(256) COMMENT '字段类型,datetime',
  47 
  48 query_if_test text COMMENT 'queryObj.create_time!=null',
  49 update_if_test text COMMENT 'updateObj.create_time!=null',
  50 col_for_query_jdbc text COMMENT 'create_time=#{queryObj.createTime,jdbcType=TIMESTAMP} ',
  51 fuzzy_col_for_query_jdbc text COMMENT 'create_time=#{queryObj.createTime,jdbcType=TIMESTAMP} ',
  52 col_for_update_jdbc text COMMENT 'create_time=#{updateObj.createTime,jdbcType=TIMESTAMP} ',
  53 col_for_insert_jdbc text COMMENT '#{item.createTime,jdbcType=TIMESTAMP} ',
  54 PRIMARY KEY (`id`) ,
  55 INDEX idx1(tbl_name,col)
  56 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  57 
  58 -- select * from all_col_table;
  59 
  60 -- 外键临时表
  61 DROP TABLE if exists fk_def;
  62 CREATE TABLE if not exists fk_def as
  63     SELECT
  64         t.TABLE_NAME AS tbl_name,
  65         k.column_name AS col_name,
  66         k.REFERENCED_TABLE_NAME AS rf_name,
  67         k.REFERENCED_COLUMN_NAME AS rf_col 
  68     FROM
  69         information_schema.TABLE_CONSTRAINTS t
  70         JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE k 
  71         ON t.CONSTRAINT_NAME = k.CONSTRAINT_NAME 
  72         AND t.TABLE_NAME = k.TABLE_NAME 
  73         AND t.CONSTRAINT_SCHEMA = k.CONSTRAINT_SCHEMA 
  74     WHERE
  75         t.CONSTRAINT_TYPE = 'FOREIGN KEY' 
  76         AND t.table_schema = DATABASE();
  77         
  78 ALTER TABLE `fk_def`
  79     ADD INDEX `idx1` (tbl_name,col_name);
  80 ALTER TABLE `fk_def`
  81     ADD INDEX `idx2` (rf_name,rf_col);
  82         
  83 -- 将本库中所有表及所有字段插入表中: tbl_name,tbl_name_comment,col,col_comment,col_type
  84 INSERT INTO all_col_table(tbl_name,tbl_name_comment,col,col_comment,col_type) 
  85 SELECT 
  86     t1.table_name, t2.TABLE_COMMENT,t1.column_name ,t1.COLUMN_COMMENT,t1.DATA_TYPE
  87 FROM
  88     information_schema.COLUMNS t1 JOIN information_schema.tables t2 ON t1.TABLE_NAME=t2.TABLE_NAME     
  89 WHERE
  90       t1.table_schema= DATABASE() AND t1.TABLE_NAME LIKE 'tbl_%' ORDER BY t1.table_name,t1.ORDINAL_POSITION;
  91 
  92 INSERT INTO all_col_code(tbl_name,col,col_type)
  93 SELECT tbl_name,col,col_type FROM all_col_table ORDER BY tbl_name,id;
  94 
  95  
  96 -- java类型转换
  97 UPDATE all_col_table SET java_type=
  98 case  col_type 
  99     when 'datetime' then 'LocalDateTime' 
 100     when 'tinyint'  then 'Byte' 
 101     when 'bigint'   then 'Long' 
 102     when 'int'      then 'Integer' 
 103     when 'varchar'  then 'String' 
 104 END;
 105 
 106 -- 转换成jdbc类型
 107 UPDATE all_col_table SET jdbc_type=
 108 case  col_type
 109     when 'datetime' then 'TIMESTAMP' 
 110     when 'tinyint'  then 'TINYINT' 
 111     when 'bigint'   then 'BIGINT' 
 112     when 'int'      then 'INTEGER'
 113     when 'float'      then 'REAL' 
 114     when 'varchar'  then 'VARCHAR' 
 115 END;
 116 
 117 -- 字段转驼峰
 118 UPDATE all_col_table SET col_lower_camel =CONCAT_WS('',REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(col, '_z', 'Z'), '_y', 'Y'), '_x', 'X'), '_w', 'W'), '_v', 'V'), '_u', 'U'), '_t', 'T'), '_s', 'S'), '_r', 'R'), '_q', 'Q'), '_p', 'P'), '_o', 'O'), '_n', 'N'), '_m', 'M'), '_l', 'L'), '_k', 'K'), '_j', 'J'), '_i', 'I'), '_h', 'H'), '_g', 'G'), '_f', 'F'), '_e', 'E'), '_d', 'D'), '_c', 'C'), '_b', 'B'), '_a', 'A'),'_','') 
 119 ,'');
 120 UPDATE all_col_table SET col_upper_camel =CONCAT_WS('',REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(CONCAT_WS('','_',col), '_z', 'Z'), '_y', 'Y'), '_x', 'X'), '_w', 'W'), '_v', 'V'), '_u', 'U'), '_t', 'T'), '_s', 'S'), '_r', 'R'), '_q', 'Q'), '_p', 'P'), '_o', 'O'), '_n', 'N'), '_m', 'M'), '_l', 'L'), '_k', 'K'), '_j', 'J'), '_i', 'I'), '_h', 'H'), '_g', 'G'), '_f', 'F'), '_e', 'E'), '_d', 'D'), '_c', 'C'), '_b', 'B'), '_a', 'A'),'_','') 
 121 ,'');
 122 -- getter,setter
 123 UPDATE all_col_table SET col_setter=CONCAT_WS('','set',col_upper_camel);
 124 UPDATE all_col_table SET col_getter=CONCAT_WS('','get',col_upper_camel);
 125 
 126 -- 表名转驼峰
 127 UPDATE all_col_table SET tbl_name_upper_camel =REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(tbl_name, @noStrInTbl, ''), '_z', 'Z'), '_y', 'Y'), '_x', 'X'), '_w', 'W'), '_v', 'V'), '_u', 'U'), '_t', 'T'), '_s', 'S'), '_r', 'R'), '_q', 'Q'), '_p', 'P'), '_o', 'O'), '_n', 'N'), '_m', 'M'), '_l', 'L'), '_k', 'K'), '_j', 'J'), '_i', 'I'), '_h', 'H'), '_g', 'G'), '_f', 'F'), '_e', 'E'), '_d', 'D'), '_c', 'C'), '_b', 'B'), '_a', 'A'),'_','') ;
 128 UPDATE all_col_table SET tbl_name_lower_camel =REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(tbl_name, CONCAT(@noStrInTbl,'_'), ''), '_z', 'Z'), '_y', 'Y'), '_x', 'X'), '_w', 'W'), '_v', 'V'), '_u', 'U'), '_t', 'T'), '_s', 'S'), '_r', 'R'), '_q', 'Q'), '_p', 'P'), '_o', 'O'), '_n', 'N'), '_m', 'M'), '_l', 'L'), '_k', 'K'), '_j', 'J'), '_i', 'I'), '_h', 'H'), '_g', 'G'), '_f', 'F'), '_e', 'E'), '_d', 'D'), '_c', 'C'), '_b', 'B'), '_a', 'A'),'_','') ;
 129 
 130 
 131 -- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 132 
 133 --  配置每个字段代码
 134 
 135 -- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 136 
 137 -- query_if_test
 138 
 139 SET @temp="'queryObj !=null and queryObj.%col_lower_camel% != null' ";
 140 
 141 UPDATE all_col_code SET query_if_test=@temp WHERE col_type != 'varchar';
 142 
 143 SET @temp="'queryObj !=null and queryObj.%col_lower_camel% != null and queryObj.%col_lower_camel% != &apos;&apos;' ";
 144 
 145 UPDATE all_col_code SET query_if_test=@temp WHERE col_type = 'varchar';
 146 
 147 -- update_if_test
 148 
 149 SET @temp="'updateObj !=null and updateObj.%col_lower_camel% != null' ";
 150 
 151 UPDATE all_col_code SET update_if_test=@temp WHERE col_type != 'varchar';
 152 
 153 SET @temp="'updateObj !=null and updateObj.%col_lower_camel% != null and updateObj.%col_lower_camel% != &apos;&apos;' ";
 154 
 155 UPDATE all_col_code SET update_if_test=@temp WHERE col_type = 'varchar';
 156 
 157 -- col_for_query_jdbc
 158 
 159 SET @temp='%col%=#{queryObj.%col_lower_camel%,jdbcType=%jdbc_type%}';
 160 
 161 UPDATE all_col_code SET col_for_query_jdbc=@temp ;
 162 
 163 -- fuzzy_col_for_query_jdbc
 164 
 165 SET @temp='%col%=#{queryObj.%col_lower_camel%,jdbcType=%jdbc_type%}';
 166 
 167 UPDATE all_col_code SET fuzzy_col_for_query_jdbc=@temp WHERE col_type!='varchar';
 168 
 169 SET @temp='%col% like concat(\'%\',#{queryObj.%col_lower_camel%,jdbcType=%jdbc_type%},\'%\')';
 170 
 171 UPDATE all_col_code SET fuzzy_col_for_query_jdbc=@temp WHERE col_type ='varchar';
 172 
 173 
 174 
 175 -- col_for_update_jdbc
 176 
 177 SET @temp='%col%=#{updateObj.%col_lower_camel%,jdbcType=%jdbc_type%}';
 178 
 179 UPDATE all_col_code SET col_for_update_jdbc=@temp ;
 180 
 181 -- col_for_insert_jdbc
 182 
 183 SET @temp='#{item.%col_lower_camel%,jdbcType=%jdbc_type%}';
 184 
 185 UPDATE all_col_code SET col_for_insert_jdbc=@temp ;
 186 
 187 -- 统一替换
 188 
 189 
 190 
 191 UPDATE all_col_code c SET
 192 c.query_if_test=(select replace(replace(REPLACE(c.query_if_test,'%col_lower_camel%',a.col_lower_camel),'%jdbc_type%',a.jdbc_type),'%col%',a.col) FROM all_col_table a WHERE a.tbl_name=c.tbl_name AND a.col=c.col),
 193 c.update_if_test=(select replace(replace(REPLACE(c.update_if_test,'%col_lower_camel%',a.col_lower_camel),'%jdbc_type%',a.jdbc_type),'%col%',a.col) FROM all_col_table a WHERE a.tbl_name=c.tbl_name AND a.col=c.col),
 194 c.col_for_query_jdbc=(select replace(replace(REPLACE(c.col_for_query_jdbc,'%col_lower_camel%',a.col_lower_camel),'%jdbc_type%',a.jdbc_type),'%col%',a.col) FROM all_col_table a WHERE a.tbl_name=c.tbl_name AND a.col=c.col),
 195 c.fuzzy_col_for_query_jdbc=(select replace(replace(REPLACE(c.fuzzy_col_for_query_jdbc,'%col_lower_camel%',a.col_lower_camel),'%jdbc_type%',a.jdbc_type),'%col%',a.col) FROM all_col_table a WHERE a.tbl_name=c.tbl_name AND a.col=c.col),
 196 c.col_for_update_jdbc=(select replace(replace(REPLACE(c.col_for_update_jdbc,'%col_lower_camel%',a.col_lower_camel),'%jdbc_type%',a.jdbc_type),'%col%',a.col) FROM all_col_table a WHERE a.tbl_name=c.tbl_name AND a.col=c.col),
 197 c.col_for_insert_jdbc=(select replace(replace(REPLACE(c.col_for_insert_jdbc,'%col_lower_camel%',a.col_lower_camel),'%jdbc_type%',a.jdbc_type),'%col%',a.col) FROM all_col_table a WHERE a.tbl_name=c.tbl_name AND a.col=c.col)
 198 ;
 199 
 200 -- SELECT * FROM all_col_code;
 201 -- SELECT * FROM all_col_table;
 202 
 203 -- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 204 
 205 --  配置每个表代码
 206 
 207 -- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 208 
 209 
 210 -- 表相关数据
 211 DROP TABLE if EXISTS all_table;
 212 CREATE table if not exists all_table(
 213 `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
 214 tbl_name VARCHAR(256)  NOT NULL  COMMENT '表名:tbl_sapo_admin_account',
 215 tbl_name_upper_camel VARCHAR(1024) COMMENT '表名驼峰:SapoAdminAccount',
 216 tbl_name_lower_camel VARCHAR(1024) COMMENT '表名引用驼峰:sapoAdminAccount',
 217 pk VARCHAR(255) COMMENT '主键',
 218 pk_upper_camel VARCHAR(255) COMMENT '主键',
 219 pk_lower_camel VARCHAR(255) COMMENT '主键',
 220 pk_java_type VARCHAR(255) COMMENT '主键',
 221 pk_jdbc_type VARCHAR(255) COMMENT '主键',
 222 insert_set_time  LONGTEXT COMMENT '',
 223 update_set_time LONGTEXT COMMENT '',
 224 batch_insert_set_time LONGTEXT COMMENT '',
 225 col_list LONGTEXT COMMENT '字段列表',
 226 col_list_alias LONGTEXT COMMENT '字段别名列表',
 227 insert_if_test LONGTEXT COMMENT 'insert语句',
 228 query_if_test LONGTEXT COMMENT 'queryTest语句',
 229 query_if_test_with_null LONGTEXT COMMENT 'queryTest语句',
 230 fuzzy_query_if_test LONGTEXT COMMENT '模糊queryTest语句',
 231 update_chase LONGTEXT COMMENT 'update固定语句',
 232 update_if_test LONGTEXT COMMENT 'updateTest语句',
 233 PRIMARY KEY (`id`) ,
 234 INDEX idx1(tbl_name)
 235 ) ENGINE=InnoDB ;
 236 
 237 
 238 -- 把所有表入库
 239 
 240 INSERT INTO all_table(tbl_name,tbl_name_upper_camel,tbl_name_lower_camel)
 241 SELECT distinct tbl_name,tbl_name_upper_camel,tbl_name_lower_camel FROM all_col_table ;
 242  
 243  
 244 -- 更新主键
 245 
 246 UPDATE all_table a SET  a.pk=
 247 (SELECT 
 248 column_name
 249 FROM information_schema.columns t1
 250 WHERE 
 251  t1.table_schema= DATABASE() AND t1.COLUMN_KEY='PRI' AND a.tbl_name=table_name 
 252  );
 253  
 254 UPDATE all_table a SET a.pk_upper_camel = (SELECT col_upper_camel FROM all_col_table c WHERE c.tbl_name =a.tbl_name AND c.col=a.pk);
 255 UPDATE all_table a SET a.pk_lower_camel = (SELECT col_lower_camel FROM all_col_table c WHERE c.tbl_name =a.tbl_name AND c.col=a.pk);
 256 UPDATE all_table a SET a.pk_java_type = (SELECT java_type FROM all_col_table c WHERE c.tbl_name =a.tbl_name AND c.col=a.pk);
 257 UPDATE all_table a SET a.pk_jdbc_type = (SELECT jdbc_type FROM all_col_table c WHERE c.tbl_name =a.tbl_name AND c.col=a.pk);
 258  
 259  -- col_list
 260  
 261 UPDATE all_table a SET a.col_list=
 262 (
 263 SELECT GROUP_CONCAT( CONCAT_WS('',' `',col,'` ') ORDER BY id ) FROM all_col_code WHERE tbl_name = a.tbl_name
 264 );
 265 
 266 -- col_list_alias
 267 
 268 UPDATE all_table a SET a.col_list_alias=
 269 (
 270 SELECT GROUP_CONCAT(
 271     CONCAT_WS('',' t.`',col,'` as ',"'",col,"' ") ORDER BY id
 272 ) FROM all_col_code WHERE tbl_name = a.tbl_name
 273 );
 274 
 275 -- insert_if_test
 276 
 277 UPDATE all_table a SET a.insert_if_test=
 278 (
 279 SELECT   
 280         GROUP_CONCAT(col_for_insert_jdbc ORDER BY id) 
 281     FROM all_col_code WHERE tbl_name = a.tbl_name
 282 );
 283 
 284 -- query_if_test
 285 
 286 SET @temp='            "<if test =%query_if_test%> and %col_for_query_jdbc% </if>",';
 287 
 288 UPDATE all_table a SET a.query_if_test=
 289 (
 290 SELECT 
 291         GROUP_CONCAT(
 292            replace(
 293            REPLACE(@temp,'%query_if_test%',query_if_test)
 294            ,'%col_for_query_jdbc%',col_for_query_jdbc)
 295         ORDER BY id SEPARATOR '\r\n') 
 296     FROM all_col_code WHERE tbl_name = a.tbl_name
 297 );
 298 
 299 -- query_if_test_with_null
 300 
 301 SET @temp='            "<choose><when test =%query_if_test%> and %col_for_query_jdbc%  </when><otherwise> and %col% is null </otherwise></choose>",';
 302 
 303 UPDATE all_table a SET a.query_if_test_with_null=
 304 (
 305 SELECT 
 306         GROUP_CONCAT(
 307            replace(
 308            replace(
 309            REPLACE(@temp,'%query_if_test%',query_if_test)
 310            ,'%col_for_query_jdbc%',col_for_query_jdbc)
 311            ,'%col%',col)
 312         ORDER BY id SEPARATOR '\r\n') 
 313     FROM all_col_code WHERE tbl_name = a.tbl_name
 314 );
 315 
 316 
 317 -- fuzzy_query_if_test
 318 
 319 SET @temp='            "<if test =%query_if_test%> and %fuzzy_col_for_query_jdbc% </if>",';
 320 
 321 UPDATE all_table a SET a.fuzzy_query_if_test=
 322 (
 323 SELECT 
 324         GROUP_CONCAT(
 325            replace(
 326            REPLACE(@temp,'%query_if_test%',query_if_test)
 327            ,'%fuzzy_col_for_query_jdbc%',fuzzy_col_for_query_jdbc)
 328         ORDER BY id SEPARATOR '\r\n') 
 329     FROM all_col_code WHERE tbl_name = a.tbl_name
 330 );
 331 
 332 -- select * from all_table;
 333 
 334 -- update_if_test 
 335 
 336 SET @temp='            "<if test =%update_if_test%>  %col_for_update_jdbc% , </if>",';
 337 
 338 
 339 UPDATE all_table a SET a.update_if_test=
 340 (
 341 SELECT 
 342         GROUP_CONCAT(
 343            replace(
 344            REPLACE(@temp,'%update_if_test%',update_if_test)
 345            ,'%col_for_update_jdbc%',col_for_update_jdbc)
 346         ORDER BY id SEPARATOR '\r\n') 
 347     FROM all_col_code WHERE tbl_name = a.tbl_name AND a.pk!=col
 348 );
 349 
 350 
 351 -- update_chase : release_code=#{updateObj.releaseCode,jdbcType=VARCHAR} ,act_code=#{updateObj.actCode,jdbcType=VARCHAR} ,
 352 
 353 UPDATE all_table a SET a.update_chase=
 354 (
 355 SELECT 
 356         GROUP_CONCAT( col_for_update_jdbc ORDER BY id) 
 357     FROM all_col_code WHERE tbl_name = a.tbl_name AND a.pk !=col
 358 );
 359  
 360 -- SELECT * FROM all_table;
 361 -- SELECT * FROM all_col_code;
 362 
 363 
 364 -- #################################################################################
 365 -- #################################开始组建语句####################################
 366 -- #################################################################################
 367 -- ############################## mapper select ####################################
 368 -- #################################################################################
 369 -- #################################################################################
 370 
 371 -- 保存所有表及表的所有字段
 372 DROP TABLE if EXISTS java_code;
 373 CREATE table if not exists java_code(
 374 tbl_name VARCHAR(256)  NOT NULL  COMMENT '表名:tbl_sapo_admin_account',
 375 code_type VARCHAR(255) COMMENT '代码类似,inert,update,select',
 376 code_layer VARCHAR(255) COMMENT '代码层级 ,mapper,dao,domain',
 377 func_desc VARCHAR(255) COMMENT '功能描述',
 378 java_code TEXT COMMENT 'java代码',
 379 versions VARCHAR(255) COMMENT '版本',
 380 versions_desc VARCHAR(255) COMMENT '版本描述',
 381 INDEX idx1(tbl_name)
 382 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 383 
 384 
 385 
 386 -- ######################################################################################################
 387 -- 通用查询,返回对象
 388 -- ######################################################################################################
 389 
 390 
 391 SET @query_template1=
 392 '
 393     // 通用查询,返回对象,对象不为空,否则报错
 394     @Select({ 
 395     "<script> ",
 396         "select %col_list_alias% ",
 397         "from %tbl_name% t ",
 398         "<where> ",
 399 %query_if_test%
 400         "</where> ",
 401     "</script>" 
 402     })
 403     %tbl_name_upper_camel% get%tbl_name_upper_camel%(@Param("queryObj") %tbl_name_upper_camel% %tbl_name_lower_camel%ForQuery);
 404 ';
 405 
 406 INSERT INTO java_code
 407 SELECT tbl_name,'select','mapper','通用查询,返回对象,对象不为空,否则报错',@query_template1,'1','' FROM all_table;
 408 
 409 -- dao层语句
 410 SET @query_template1=
 411 '
 412     // 通用查询,返回对象,对象不为空,否则报错
 413     public %tbl_name_upper_camel% get%tbl_name_upper_camel%(%tbl_name_upper_camel% %tbl_name_lower_camel%ForQuery){
 414         
 415         if(%tbl_name_lower_camel%ForQuery == null || check%tbl_name_upper_camel%AllFieldsIsNull(%tbl_name_lower_camel%ForQuery)){
 416             bizLogger.warn(" select %tbl_name% , but dao layer input %tbl_name_lower_camel%ForQuery is null ");
 417             throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
 418                     ResultInfo.SYS_INNER_ERROR.getDesc() + " dao layer %tbl_name_lower_camel%ForQuery is null , bizId=" + BizLogUtils.getValueOfBizId());
 419         }
 420         
 421         %tbl_name_upper_camel% %tbl_name_lower_camel% = mapper.get%tbl_name_upper_camel%(%tbl_name_lower_camel%ForQuery);
 422         
 423         if(%tbl_name_lower_camel% == null){
 424             bizLogger.warn(" select %tbl_name%  result is null ,%tbl_name_lower_camel%ForQuery : "
 425                     + %tbl_name_lower_camel%ForQuery.toString());
 426             throw new BusinessException(ResultInfo.NO_DATA.getCode(),ResultInfo.NO_DATA.getDesc() + " ,bizId="+BizLogUtils.getValueOfBizId());
 427         }
 428      
 429         return %tbl_name_lower_camel%;     
 430     }
 431 ';
 432 
 433 INSERT INTO java_code
 434 SELECT tbl_name,'select','dao','通用查询,返回对象,对象不为空,否则报错',@query_template1,'1','' FROM all_table;
 435 
 436 SET @query_template1=
 437 '
 438     // 通用查询,返回对象,对象可为空
 439     public %tbl_name_upper_camel% get%tbl_name_upper_camel%WithNull(%tbl_name_upper_camel% %tbl_name_lower_camel%ForQuery){
 440         
 441         if(%tbl_name_lower_camel%ForQuery == null || check%tbl_name_upper_camel%AllFieldsIsNull(%tbl_name_lower_camel%ForQuery)){
 442             bizLogger.warn(" select %tbl_name% , but dao layer input %tbl_name_lower_camel%ForQuery is null ");
 443             throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
 444                     ResultInfo.SYS_INNER_ERROR.getDesc() + " dao layer %tbl_name_lower_camel%ForQuery is null , bizId=" + BizLogUtils.getValueOfBizId());
 445         }
 446         
 447         %tbl_name_upper_camel% %tbl_name_lower_camel% = mapper.get%tbl_name_upper_camel%(%tbl_name_lower_camel%ForQuery);
 448      
 449         return %tbl_name_lower_camel%;     
 450     }
 451 ';
 452 
 453 INSERT INTO java_code
 454 SELECT tbl_name,'select','dao','通用查询,返回对象,对象可为空',@query_template1,'1','' FROM all_table;
 455 
 456 -- ######################################################################################################
 457 -- 通用查询,返回集合
 458 -- ######################################################################################################
 459 
 460 SET @query_template1=
 461 '
 462     // 通用查询,返回集合
 463     @Select({ 
 464     "<script> ",
 465         "select %col_list_alias% ",
 466         "from %tbl_name% t ",
 467         "<where> ",
 468 %query_if_test%
 469         "</where> ",
 470     "</script>" 
 471     })
 472     List<%tbl_name_upper_camel%> get%tbl_name_upper_camel%List(@Param("queryObj") %tbl_name_upper_camel% %tbl_name_lower_camel%ForQuery);
 473 ';
 474 
 475 INSERT INTO java_code
 476 SELECT tbl_name,'select','mapper','通用查询,返回集合',@query_template1,'1','' FROM all_table;
 477 
 478 -- dao层
 479 SET @query_template1=
 480 '
 481     // 通用查询,返回集合,集合不为空,否则报错
 482     public List<%tbl_name_upper_camel%> get%tbl_name_upper_camel%List(%tbl_name_upper_camel% %tbl_name_lower_camel%ForQuery){
 483         
 484         if(%tbl_name_lower_camel%ForQuery == null || check%tbl_name_upper_camel%AllFieldsIsNull(%tbl_name_lower_camel%ForQuery)){
 485             bizLogger.warn(" select %tbl_name% , but dao layer input  %tbl_name_lower_camel%ForQuery is null ");
 486             throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
 487                     ResultInfo.SYS_INNER_ERROR.getDesc() + " dao layer %tbl_name_lower_camel%ForQuery is null  , bizId=" + BizLogUtils.getValueOfBizId());
 488         }
 489         
 490         List<%tbl_name_upper_camel%> %tbl_name_lower_camel%List = mapper.get%tbl_name_upper_camel%List(%tbl_name_lower_camel%ForQuery);
 491         
 492         if(%tbl_name_lower_camel%List == null || %tbl_name_lower_camel%List.size()==0){
 493             bizLogger.warn(" select %tbl_name%  List is null or size=0 ,%tbl_name_lower_camel%ForQuery : "
 494                     + %tbl_name_lower_camel%ForQuery.toString());
 495             throw new BusinessException(ResultInfo.NO_DATA.getCode(),ResultInfo.NO_DATA.getDesc() + " ,bizId="+BizLogUtils.getValueOfBizId());
 496         }
 497      
 498 %order_by_create_time%
 499      
 500         return %tbl_name_lower_camel%List;     
 501     }
 502      
 503 ';
 504 
 505 INSERT INTO java_code
 506 SELECT tbl_name,'select','dao','通用查询,返回集合,集合不为空,否则报错',@query_template1,'1','' FROM all_table;
 507 
 508 
 509 -- dao层
 510 SET @query_template1=
 511 '
 512     // 通用查询,返回集合,集合可以为空
 513     public List<%tbl_name_upper_camel%> get%tbl_name_upper_camel%ListWithNull(%tbl_name_upper_camel% %tbl_name_lower_camel%ForQuery){
 514         
 515         if(%tbl_name_lower_camel%ForQuery == null || check%tbl_name_upper_camel%AllFieldsIsNull(%tbl_name_lower_camel%ForQuery)){
 516             bizLogger.warn(" select %tbl_name% , but dao layer input  %tbl_name_lower_camel%ForQuery is null ");
 517             throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
 518                     ResultInfo.SYS_INNER_ERROR.getDesc() + " dao layer %tbl_name_lower_camel%ForQuery is null  , bizId=" + BizLogUtils.getValueOfBizId());
 519         }
 520         
 521         List<%tbl_name_upper_camel%> %tbl_name_lower_camel%List = mapper.get%tbl_name_upper_camel%List(%tbl_name_lower_camel%ForQuery);
 522         
 523      
 524 %order_by_create_time%
 525      
 526         return %tbl_name_lower_camel%List;     
 527     }
 528      
 529 ';
 530 
 531 INSERT INTO java_code
 532 SELECT tbl_name,'select','dao','通用查询,返回集合,集合可以为空',@query_template1,'1','' FROM all_table;
 533 
 534 
 535 
 536 
 537 SET @query_template1=
 538 '
 539     // 通用分页查询,返回当前页集合,集合不能为空,否则报错
 540     public Page<%tbl_name_upper_camel%> get%tbl_name_upper_camel%ListByPage(Integer pageNum, Integer pageSize, %tbl_name_upper_camel% %tbl_name_lower_camel%ForQuery){
 541         
 542         if(%tbl_name_lower_camel%ForQuery == null || check%tbl_name_upper_camel%AllFieldsIsNull(%tbl_name_lower_camel%ForQuery)){
 543             bizLogger.warn(" select %tbl_name% , but dao layer get%tbl_name_upper_camel%ListByPage input  %tbl_name_lower_camel%ForQuery is null ");
 544             throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
 545                     ResultInfo.SYS_INNER_ERROR.getDesc() + " dao layer %tbl_name_lower_camel%ForQuery is null  , bizId=" + BizLogUtils.getValueOfBizId());
 546         }
 547         
 548         
 549         Page<%tbl_name_upper_camel%> pageList=null;
 550         
 551         // 默认按照create_time 降序排列。即刚创建的在前面显示
 552         try {
 553             PageHelper.startPage(pageNum, pageSize," create_time desc ");
 554             pageList = (Page<%tbl_name_upper_camel%>) get%tbl_name_upper_camel%List(%tbl_name_lower_camel%ForQuery);
 555         } finally {
 556             PageHelper.clearPage();
 557         }
 558         
 559         if(pageList == null || pageList.size()==0 ){
 560             bizLogger.warn(" select %tbl_name%  List by page is null or size=0 ,[%tbl_name_lower_camel%ForQuery,pageNum,pageSize ]: "
 561                     + %tbl_name_lower_camel%ForQuery.toString()+" ; "+pageNum+" ; "+pageSize);
 562             throw new BusinessException(ResultInfo.NO_DATA.getCode(),ResultInfo.NO_DATA.getDesc() + " ,bizId="+BizLogUtils.getValueOfBizId());
 563         }
 564         // service层可以从Page中获取总条数
 565         return pageList;
 566     }
 567 ';
 568 
 569 INSERT INTO java_code
 570 SELECT tbl_name,'select','dao','通用分页查询,返回当前页集合,集合可以为空',@query_template1,'1','' FROM all_table;
 571 
 572 SET @query_template1=
 573 '
 574     // 通用分页查询,返回当前页集合,集合不能为空,否则报错
 575     public Page<%tbl_name_upper_camel%> get%tbl_name_upper_camel%ListByPageWithNull(Integer pageNum, Integer pageSize, %tbl_name_upper_camel% %tbl_name_lower_camel%ForQuery){
 576         
 577         if(%tbl_name_lower_camel%ForQuery == null || check%tbl_name_upper_camel%AllFieldsIsNull(%tbl_name_lower_camel%ForQuery)){
 578             bizLogger.warn(" select %tbl_name% , but dao layer get%tbl_name_upper_camel%ListByPage input  %tbl_name_lower_camel%ForQuery is null ");
 579             throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
 580                     ResultInfo.SYS_INNER_ERROR.getDesc() + " dao layer %tbl_name_lower_camel%ForQuery is null  , bizId=" + BizLogUtils.getValueOfBizId());
 581         }
 582         
 583         
 584         Page<%tbl_name_upper_camel%> pageList=null;
 585         
 586         // 默认按照create_time 降序排列。即刚创建的在前面显示
 587         try {
 588             PageHelper.startPage(pageNum, pageSize," create_time desc ");
 589             pageList = (Page<%tbl_name_upper_camel%>) get%tbl_name_upper_camel%List(%tbl_name_lower_camel%ForQuery);
 590         } finally {
 591             PageHelper.clearPage();
 592         }
 593         
 594         // service层可以从Page中获取总条数
 595         return pageList;
 596     }
 597 ';
 598 
 599 INSERT INTO java_code
 600 SELECT tbl_name,'select','dao','通用分页查询,返回当前页集合,集合可空',@query_template1,'1','' FROM all_table;
 601 
 602 
 603 SET @query_template1=
 604 '
 605     // 通用分页模糊查询,返回当前页集合,集合不为空,否则报错
 606     public Page<%tbl_name_upper_camel%> get%tbl_name_upper_camel%ListByFuzzyByPage(Integer pageNum, Integer pageSize, %tbl_name_upper_camel% %tbl_name_lower_camel%ForQuery){
 607         
 608         if(%tbl_name_lower_camel%ForQuery == null || check%tbl_name_upper_camel%AllFieldsIsNull(%tbl_name_lower_camel%ForQuery)){
 609             bizLogger.warn(" select %tbl_name% , but dao layer get%tbl_name_upper_camel%ListByFuzzyByPage input  %tbl_name_lower_camel%ForQuery is null ");
 610             throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
 611                     ResultInfo.SYS_INNER_ERROR.getDesc() + " dao layer %tbl_name_lower_camel%ForQuery is null  , bizId=" + BizLogUtils.getValueOfBizId());
 612         }
 613         
 614         Page<%tbl_name_upper_camel%> pageList=null;
 615         
 616         // 默认按照create_time 降序排列。即刚创建的在前面显示
 617         try {
 618             PageHelper.startPage(pageNum, pageSize," create_time desc ");
 619             pageList = (Page<%tbl_name_upper_camel%>) get%tbl_name_upper_camel%ListByFuzzy(%tbl_name_lower_camel%ForQuery);
 620         } finally {
 621             PageHelper.clearPage();
 622         }
 623         
 624         if(pageList == null || pageList.size()==0 ){
 625             bizLogger.warn(" select %tbl_name%  List by fuzzy by page is null or size=0 ,[%tbl_name_lower_camel%ForQuery,pageNum,pageSize ]: "
 626                     + %tbl_name_lower_camel%ForQuery.toString()+" ; "+pageNum+" ; "+pageSize);
 627             throw new BusinessException(ResultInfo.NO_DATA.getCode(),ResultInfo.NO_DATA.getDesc() + " ,bizId="+BizLogUtils.getValueOfBizId());
 628         }
 629         // service层可以从Page中获取总条数
 630         return pageList;
 631     }
 632 ';
 633 
 634 INSERT INTO java_code
 635 SELECT tbl_name,'select','dao','通用分页模糊查询,返回当前页集合,集合不为空,否则报错',@query_template1,'1','' FROM all_table;
 636 
 637 SET @query_template1=
 638 '
 639     // 通用分页模糊查询,返回当前页集合,集合可空
 640     public Page<%tbl_name_upper_camel%> get%tbl_name_upper_camel%ListByFuzzyByPageWithNull(Integer pageNum, Integer pageSize, %tbl_name_upper_camel% %tbl_name_lower_camel%ForQuery){
 641         
 642         if(%tbl_name_lower_camel%ForQuery == null || check%tbl_name_upper_camel%AllFieldsIsNull(%tbl_name_lower_camel%ForQuery)){
 643             bizLogger.warn(" select %tbl_name% , but dao layer get%tbl_name_upper_camel%ListByFuzzyByPage input  %tbl_name_lower_camel%ForQuery is null ");
 644             throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
 645                     ResultInfo.SYS_INNER_ERROR.getDesc() + " dao layer %tbl_name_lower_camel%ForQuery is null  , bizId=" + BizLogUtils.getValueOfBizId());
 646         }
 647         
 648         Page<%tbl_name_upper_camel%> pageList=null;
 649         
 650         // 默认按照create_time 降序排列。即刚创建的在前面显示
 651         try {
 652             PageHelper.startPage(pageNum, pageSize," create_time desc ");
 653             pageList = (Page<%tbl_name_upper_camel%>) get%tbl_name_upper_camel%ListByFuzzy(%tbl_name_lower_camel%ForQuery);
 654         } finally {
 655             PageHelper.clearPage();
 656         }
 657         
 658         
 659         // service层可以从Page中获取总条数
 660         return pageList;
 661     }
 662 ';
 663 
 664 INSERT INTO java_code
 665 SELECT tbl_name,'select','dao','通用分页模糊查询,返回当前页集合,集合可空',@query_template1,'1','' FROM all_table;
 666 
 667 
 668 
 669 SET @query_template1=
 670 '
 671     // 分页形式获取表全部数据,放在一个集合中,集合不能为空,否则报错
 672     public List<%tbl_name_upper_camel%> get%tbl_name_upper_camel%ListAllPage( %tbl_name_upper_camel% %tbl_name_lower_camel%ForQuery){
 673         
 674         if(%tbl_name_lower_camel%ForQuery == null || check%tbl_name_upper_camel%AllFieldsIsNull(%tbl_name_lower_camel%ForQuery)){
 675             bizLogger.warn(" select %tbl_name% , but dao layer get%tbl_name_upper_camel%ListAllPage input  %tbl_name_lower_camel%ForQuery is null ");
 676             throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
 677                     ResultInfo.SYS_INNER_ERROR.getDesc() + " dao layer %tbl_name_lower_camel%ForQuery is null  , bizId=" + BizLogUtils.getValueOfBizId());
 678         }
 679         
 680         int pageNum = 1;
 681         
 682         // 分页默认每次拿500条
 683         int pageSize = 500;
 684         
 685         Page<%tbl_name_upper_camel%>  page = null;
 686         List<%tbl_name_upper_camel%>  %tbl_name_lower_camel%List= new ArrayList<%tbl_name_upper_camel%>(500);
 687         
 688         // 循环分页获取每页数据放入集合中
 689         try {
 690             do {
 691                 page = PageHelper.startPage(pageNum, pageSize);
 692                 %tbl_name_lower_camel%List.addAll(get%tbl_name_upper_camel%List(%tbl_name_lower_camel%ForQuery));
 693                 pageNum++;
 694             } while (page.getPages() >= pageNum);
 695         } finally {
 696             PageHelper.clearPage();
 697         }
 698         
 699         if( %tbl_name_lower_camel%List.size()==0 ){
 700             bizLogger.warn(" select %tbl_name%  List  all page is null or size=0 ,[%tbl_name_lower_camel%ForQuery,pageNum,pageSize ]: "
 701                     + %tbl_name_lower_camel%ForQuery.toString()+" ; "+pageNum+" ; "+pageSize);
 702             throw new BusinessException(ResultInfo.NO_DATA.getCode(),ResultInfo.NO_DATA.getDesc() + " ,bizId="+BizLogUtils.getValueOfBizId());
 703         }
 704         
 705         return %tbl_name_lower_camel%List;
 706         
 707     }
 708    
 709 ';
 710 
 711 INSERT INTO java_code
 712 SELECT tbl_name,'select','dao','分页形式获取表全部数据,放在一个集合中,集合不能为空,否则报错',@query_template1,'1','' FROM all_table;
 713 
 714 SET @query_template1=
 715 '
 716     // 分页形式获取表全部数据,放在一个集合中,集合可空
 717     public List<%tbl_name_upper_camel%> get%tbl_name_upper_camel%ListAllPageWithNull( %tbl_name_upper_camel% %tbl_name_lower_camel%ForQuery){
 718         
 719         if(%tbl_name_lower_camel%ForQuery == null || check%tbl_name_upper_camel%AllFieldsIsNull(%tbl_name_lower_camel%ForQuery)){
 720             bizLogger.warn(" select %tbl_name% , but dao layer get%tbl_name_upper_camel%ListAllPage input  %tbl_name_lower_camel%ForQuery is null ");
 721             throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
 722                     ResultInfo.SYS_INNER_ERROR.getDesc() + " dao layer %tbl_name_lower_camel%ForQuery is null  , bizId=" + BizLogUtils.getValueOfBizId());
 723         }
 724         
 725         int pageNum = 1;
 726         
 727         // 分页默认每次拿500条
 728         int pageSize = 500;
 729         
 730         Page<%tbl_name_upper_camel%>  page = null;
 731         List<%tbl_name_upper_camel%>  %tbl_name_lower_camel%List= new ArrayList<%tbl_name_upper_camel%>(500);
 732         
 733         // 循环分页获取每页数据放入集合中
 734         try {
 735             do {
 736                 page = PageHelper.startPage(pageNum, pageSize);
 737                 %tbl_name_lower_camel%List.addAll(get%tbl_name_upper_camel%List(%tbl_name_lower_camel%ForQuery));
 738                 pageNum++;
 739             } while (page.getPages() >= pageNum);
 740         } finally {
 741             PageHelper.clearPage();
 742         }
 743         
 744         
 745         
 746         return %tbl_name_lower_camel%List;
 747         
 748     }
 749    
 750 ';
 751 
 752 INSERT INTO java_code
 753 SELECT tbl_name,'select','dao','分页形式获取表全部数据,放在一个集合中,集合可空',@query_template1,'1','' FROM all_table;
 754 
 755 -- ######################################################################################################
 756 -- 通用模糊查询(所有varchar字段都模糊),返回集合
 757 -- ######################################################################################################
 758 
 759 -- SELECT * FROM all_table;
 760 
 761 -- SELECT * FROM java_code;
 762 
 763 SET @query_template1=
 764 '
 765     // 通用模糊查询(所有varchar字段都模糊),返回集合
 766     @Select({ 
 767     "<script> ",
 768         "select %col_list_alias% ",
 769         "from %tbl_name% t ",
 770         "<where> ",
 771 %fuzzy_query_if_test%
 772         "</where> ",
 773     "</script>" 
 774     })
 775     List<%tbl_name_upper_camel%> get%tbl_name_upper_camel%ListByFuzzy(@Param("queryObj") %tbl_name_upper_camel% %tbl_name_lower_camel%ForQuery);
 776 ';
 777 
 778 INSERT INTO java_code
 779 SELECT tbl_name,'select','mapper','通用模糊查询(所有varchar字段都模糊),返回集合',@query_template1,'1','' FROM all_table;
 780 
 781 -- dao层
 782 SET @query_template1=
 783 '
 784     // 通用模糊查询(所有varchar字段都模糊),返回集合,集合不为空,否则报错
 785     public List<%tbl_name_upper_camel%> get%tbl_name_upper_camel%ListByFuzzy(%tbl_name_upper_camel% %tbl_name_lower_camel%ForQuery){
 786         
 787         if(%tbl_name_lower_camel%ForQuery == null || check%tbl_name_upper_camel%AllFieldsIsNull(%tbl_name_lower_camel%ForQuery)){
 788             bizLogger.warn(" select %tbl_name% by fuzzy , but dao layer input  %tbl_name_lower_camel%ForQuery is null ");
 789             throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
 790                     ResultInfo.SYS_INNER_ERROR.getDesc() + " dao layer %tbl_name_lower_camel%ForQuery is null  , bizId=" + BizLogUtils.getValueOfBizId());
 791         }
 792         
 793         List<%tbl_name_upper_camel%> %tbl_name_lower_camel%List = mapper.get%tbl_name_upper_camel%ListByFuzzy(%tbl_name_lower_camel%ForQuery);
 794         
 795         if(%tbl_name_lower_camel%List == null || %tbl_name_lower_camel%List.size()==0){
 796             bizLogger.warn(" select %tbl_name% by fuzzy but result List is null or size=0 ,%tbl_name_lower_camel%ForQuery : "
 797                     + %tbl_name_lower_camel%ForQuery.toString());
 798             throw new BusinessException(ResultInfo.NO_DATA.getCode(),ResultInfo.NO_DATA.getDesc() + " ,bizId="+BizLogUtils.getValueOfBizId());
 799         }
 800      
 801 %order_by_create_time%
 802      
 803         return %tbl_name_lower_camel%List;    
 804         
 805         
 806     }
 807 ';
 808 
 809 INSERT INTO java_code
 810 SELECT tbl_name,'select','dao','通用模糊查询(所有varchar字段都模糊),返回集合,集合不为空,否则报错',@query_template1,'1','' FROM all_table;
 811 
 812 
 813 -- dao层
 814 SET @query_template1=
 815 '
 816     // 通用模糊查询(所有varchar字段都模糊),返回集合,集合可空
 817     public List<%tbl_name_upper_camel%> get%tbl_name_upper_camel%ListByFuzzyWithNull(%tbl_name_upper_camel% %tbl_name_lower_camel%ForQuery){
 818         
 819         if(%tbl_name_lower_camel%ForQuery == null || check%tbl_name_upper_camel%AllFieldsIsNull(%tbl_name_lower_camel%ForQuery)){
 820             bizLogger.warn(" select %tbl_name% by fuzzy , but dao layer input  %tbl_name_lower_camel%ForQuery is null ");
 821             throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
 822                     ResultInfo.SYS_INNER_ERROR.getDesc() + " dao layer %tbl_name_lower_camel%ForQuery is null  , bizId=" + BizLogUtils.getValueOfBizId());
 823         }
 824         
 825         List<%tbl_name_upper_camel%> %tbl_name_lower_camel%List = mapper.get%tbl_name_upper_camel%ListByFuzzy(%tbl_name_lower_camel%ForQuery);
 826         
 827         
 828      
 829 %order_by_create_time%
 830      
 831         return %tbl_name_lower_camel%List;    
 832         
 833         
 834     }
 835 ';
 836 
 837 INSERT INTO java_code
 838 SELECT tbl_name,'select','dao','通用模糊查询(所有varchar字段都模糊),返回集合,集合可空',@query_template1,'1','' FROM all_table;
 839 
 840 -- ######################################################################################################
 841 -- 通过主键查询,返回对象
 842 -- ######################################################################################################
 843 
 844 SET @query_template1=
 845 '
 846     // 通过主键查询,返回对象
 847     @Select({
 848         "select %col_list_alias% ",
 849         "from %tbl_name% t ",
 850         "where %pk% = #{%pk_lower_camel%,jdbcType=%pk_jdbc_type%}"
 851     })
 852     %tbl_name_upper_camel% get%tbl_name_upper_camel%ByPrimaryKey(%pk_java_type% %pk_lower_camel%);
 853 ';
 854 
 855 INSERT INTO java_code
 856 SELECT tbl_name,'select','mapper','通过主键查询',@query_template1,'1','' FROM  all_table;
 857 
 858 
 859 -- dao层
 860 SET @query_template1=
 861 '
 862     // 通用主键查询,返回对象
 863     public %tbl_name_upper_camel% get%tbl_name_upper_camel%ByPrimaryKey(%pk_java_type% %pk_lower_camel%){
 864         
 865         if(%pk_lower_camel% == null){
 866             bizLogger.warn(" select %tbl_name% , but dao layer input %pk_lower_camel% is null ");
 867             throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
 868                     ResultInfo.SYS_INNER_ERROR.getDesc() + " dao layer %pk_lower_camel% is null , bizId=" + BizLogUtils.getValueOfBizId());
 869         }
 870         
 871         %tbl_name_upper_camel% %tbl_name_lower_camel% = mapper.get%tbl_name_upper_camel%ByPrimaryKey(%pk_lower_camel%);
 872         
 873         if(%tbl_name_lower_camel% == null){
 874             bizLogger.warn(" select %tbl_name%  by primary key ,but find null ,%pk_lower_camel% : "
 875                     + %pk_lower_camel%.toString());
 876             throw new BusinessException(ResultInfo.NO_DATA.getCode(),ResultInfo.NO_DATA.getDesc() + " ,bizId="+BizLogUtils.getValueOfBizId());
 877         }
 878      
 879         return %tbl_name_lower_camel%;     
 880     }
 881 ';
 882 
 883 
 884 
 885 INSERT INTO java_code
 886 SELECT tbl_name,'select','dao','通用主键查询,返回对象',@query_template1,'1','' FROM all_table;
 887 
 888 -- ######################################################################################################
 889 -- 通过主键删除
 890 -- ######################################################################################################
 891 
 892 SET @query_template1=
 893 '
 894     // 通过主键删除
 895     @Select({
 896         "delete ",
 897         "from %tbl_name%  ",
 898         "where %pk% = #{%pk_lower_camel%,jdbcType=%pk_jdbc_type%}"
 899     })
 900     int delete%tbl_name_upper_camel%ByPrimaryKey(%pk_java_type% %pk_lower_camel%);
 901 ';
 902 
 903 INSERT INTO java_code
 904 SELECT tbl_name,'delete','mapper','通过主键删除',@query_template1,'1','' FROM  all_table;
 905 
 906 
 907 -- dao层
 908 SET @query_template1=
 909 '
 910     // 通过主键删除
 911     public void delete%tbl_name_upper_camel%ByPrimaryKey(%pk_java_type% %pk_lower_camel%){
 912         
 913         if(%pk_lower_camel% == null){
 914             bizLogger.warn(" delete %tbl_name% , but dao layer %pk_lower_camel% input is null ");
 915             throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
 916                     ResultInfo.SYS_INNER_ERROR.getDesc() + " dao layer %pk_lower_camel% is null , bizId=" + BizLogUtils.getValueOfBizId());
 917         }
 918         
 919         int deleteResult = mapper.delete%tbl_name_upper_camel%ByPrimaryKey(%pk_lower_camel%);
 920         
 921         if (deleteResult == 0) {
 922             bizLogger.warn("delete  %tbl_name%  result == 0 [deleteResult, %pk_lower_camel%] : "+deleteResult+","+ %pk_lower_camel%.toString());
 923             throw new BusinessException(ResultInfo.NO_DATA.getCode(),ResultInfo.NO_DATA.getDesc() + " ,bizId="+BizLogUtils.getValueOfBizId());
 924         }
 925         
 926     }
 927 ';
 928 
 929 
 930 
 931 INSERT INTO java_code
 932 SELECT tbl_name,'delete','dao','通过主键删除',@query_template1,'1','' FROM all_table;
 933 
 934 
 935 -- ######################################################################################################
 936 -- 通过条件和主键in查询,返回集合
 937 -- ######################################################################################################
 938 
 939 
 940 SET @query_template1=
 941 '
 942     // 通过条件和主键in查询,返回集合
 943     @Select({ 
 944     "<script> ",
 945         "select %col_list_alias% ",
 946         "from %tbl_name% t ",
 947         "<where> ",
 948 %query_if_test%
 949             "<if test = \'itemList != null and itemList.size() > 0\'> AND id IN " ,
 950             "    <foreach collection=\'itemList\' item=\'item\' index=\'index\' open=\'(\' separator=\',\' close=\')\'> " ,
 951             "        #{item,jdbcType=%pk_jdbc_type%}   " ,
 952             "    </foreach> " ,
 953             "</if>" ,
 954         "</where> ",
 955     "</script>" 
 956     })
 957     List<%tbl_name_upper_camel%> get%tbl_name_upper_camel%ListBy%pk_upper_camel%List(@Param("itemList") List<%pk_java_type%> %pk_lower_camel%ListForQuery,@Param("queryObj") %tbl_name_upper_camel% %tbl_name_lower_camel%ForQuery);
 958 ';
 959 
 960 INSERT INTO java_code
 961 SELECT tbl_name,'select','mapper','通过条件和主键in查询,返回集合',@query_template1,'1','' FROM  all_table;
 962 
 963 
 964 -- dao层
 965 SET @query_template1=
 966 '
 967     // 通过条件和主键in查询,返回集合,集合不为空,否则报错
 968     public List<%tbl_name_upper_camel%> get%tbl_name_upper_camel%List( List<%pk_java_type%> %pk_lower_camel%ListForQuery, %tbl_name_upper_camel% %tbl_name_lower_camel%ForQuery){
 969         
 970         if((%pk_lower_camel%ListForQuery == null || %pk_lower_camel%ListForQuery.size()==0 ) 
 971         && (%tbl_name_lower_camel%ForQuery == null || check%tbl_name_upper_camel%AllFieldsIsNull(%tbl_name_lower_camel%ForQuery))){
 972             bizLogger.warn(" select %tbl_name%  %pk_lower_camel%ListForQuery  && %tbl_name_lower_camel%ForQuery  is null at same time");
 973             throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
 974                     ResultInfo.SYS_INNER_ERROR.getDesc() + " dao layer input %pk_lower_camel%ListForQuery and %tbl_name_lower_camel%ForQuery  is null at same time , bizId=" + BizLogUtils.getValueOfBizId());
 975         }
 976         
 977         List<%tbl_name_upper_camel%> %tbl_name_lower_camel%List = mapper.get%tbl_name_upper_camel%ListBy%pk_upper_camel%List(%pk_lower_camel%ListForQuery,%tbl_name_lower_camel%ForQuery);
 978         
 979         if(%tbl_name_lower_camel%List == null || %tbl_name_lower_camel%List.size()==0){
 980             bizLogger.warn(" select %tbl_name%  , but result list is null or size=0 ,%tbl_name_lower_camel%ForQuery : "
 981                     + %tbl_name_lower_camel%ForQuery.toString()+"; %pk_lower_camel%ListForQuery : "+%pk_lower_camel%ListForQuery.toString());
 982             throw new BusinessException(ResultInfo.NO_DATA.getCode(),ResultInfo.NO_DATA.getDesc() + " ,bizId="+BizLogUtils.getValueOfBizId());
 983         }
 984      
 985 %order_by_create_time%
 986      
 987         return %tbl_name_lower_camel%List;    
 988               
 989     }
 990 ';
 991 
 992 INSERT INTO java_code
 993 SELECT tbl_name,'select','dao','通过条件和主键in查询,返回集合,集合可空',@query_template1,'1','' FROM all_table;
 994 
 995 SET @query_template1=
 996 '
 997     // 通过条件和主键in查询,返回集合,集合不为空,否则报错
 998     public List<%tbl_name_upper_camel%> get%tbl_name_upper_camel%ListWithNull( List<%pk_java_type%> %pk_lower_camel%ListForQuery, %tbl_name_upper_camel% %tbl_name_lower_camel%ForQuery){
 999         
1000         if((%pk_lower_camel%ListForQuery == null || %pk_lower_camel%ListForQuery.size()==0 ) 
1001             && (%tbl_name_lower_camel%ForQuery == null || check%tbl_name_upper_camel%AllFieldsIsNull(%tbl_name_lower_camel%ForQuery))){
1002             bizLogger.warn(" select %tbl_name%  %pk_lower_camel%ListForQuery  && %tbl_name_lower_camel%ForQuery  is null at same time");
1003             throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
1004                     ResultInfo.SYS_INNER_ERROR.getDesc() + " dao layer input %pk_lower_camel%ListForQuery and %tbl_name_lower_camel%ForQuery  is null at same time , bizId=" + BizLogUtils.getValueOfBizId());
1005         }
1006         
1007         List<%tbl_name_upper_camel%> %tbl_name_lower_camel%List = mapper.get%tbl_name_upper_camel%ListBy%pk_upper_camel%List(%pk_lower_camel%ListForQuery,%tbl_name_lower_camel%ForQuery);
1008         
1009         
1010      
1011 %order_by_create_time%
1012      
1013         return %tbl_name_lower_camel%List;    
1014               
1015     }
1016 ';
1017 
1018 INSERT INTO java_code
1019 SELECT tbl_name,'select','dao','通过条件和主键in查询,返回集合,集合可空',@query_template1,'1','' FROM all_table;
1020 
1021 
1022 
1023 -- #################################################################################
1024 -- #################################################################################
1025 -- #################################################################################
1026 -- #################################################################################
1027 -- ############################## mapper update ####################################
1028 -- #################################################################################
1029 -- #################################################################################
1030 
1031 -- ######################################################################################################
1032 -- 通过主键更新
1033 -- ######################################################################################################
1034 
1035 
1036 SET @query_template1=
1037 '
1038     // 通过主键更新
1039     @Update({
1040         "update %tbl_name% set ",
1041         "%update_chase% ",
1042         "where %pk% = #{updateObj.%pk_lower_camel%,jdbcType=%pk_jdbc_type%} "
1043     })
1044     int update%tbl_name_upper_camel%ByPrimaryKey(@Param("updateObj") %tbl_name_upper_camel% %tbl_name_lower_camel%ForUpdate);
1045 ';
1046 
1047 
1048 
1049 INSERT INTO java_code
1050 SELECT tbl_name,'update','mapper','通过主键更新',@query_template1,'1','' FROM all_table;
1051 
1052 -- dao
1053 
1054 SET @query_template1=
1055 '
1056     // 通过主键更新
1057     public void update%tbl_name_upper_camel%ByPrimaryKey(%tbl_name_upper_camel% %tbl_name_lower_camel%ForUpdate){
1058     
1059         if(%tbl_name_lower_camel%ForUpdate == null || check%tbl_name_upper_camel%AllFieldsIsNull(%tbl_name_lower_camel%ForUpdate)){
1060             bizLogger.warn(" update %tbl_name%  dao layer input %tbl_name_lower_camel%ForUpdate is null ");
1061             throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
1062                     ResultInfo.SYS_INNER_ERROR.getDesc() + " dao layer %tbl_name_lower_camel%ForUpdate is null , bizId=" + BizLogUtils.getValueOfBizId());
1063         }
1064         
1065         %update_set_time%
1066         
1067          int updateResult = 0;
1068         
1069         try {
1070             updateResult =  mapper.update%tbl_name_upper_camel%ByPrimaryKey(%tbl_name_lower_camel%ForUpdate);
1071         } catch (DuplicateKeyException e) {
1072             bizLogger.warn(" update %tbl_name% duplicateKeyException ,%tbl_name_lower_camel%ForUpdate : "
1073                     + %tbl_name_lower_camel%ForUpdate.toString());
1074             throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
1075                     ResultInfo.SYS_INNER_ERROR.getDesc() + " duplicate exception ,bizId=" + BizLogUtils.getValueOfBizId(),e);
1076         }
1077         
1078         
1079         if (updateResult == 0) {
1080             bizLogger.warn("update  %tbl_name%  result == 0 [updateResult, %tbl_name_lower_camel%ForUpdate] : "+updateResult+","+ %tbl_name_lower_camel%ForUpdate.toString());
1081             throw new BusinessException(ResultInfo.NO_DATA.getCode(),ResultInfo.NO_DATA.getDesc() + " ,bizId="+BizLogUtils.getValueOfBizId());
1082         }
1083         
1084     }
1085 ';
1086 
1087 
1088 INSERT INTO java_code
1089 SELECT tbl_name,'update','dao','通过主键更新',@query_template1,'1','' FROM all_table;
1090 
1091 -- ######################################################################################################
1092 -- 通过条件更新,如实更新,查询条件有null,就code is null. 
1093 -- ######################################################################################################
1094 
1095 SET @query_template1=
1096 '
1097     // 通过条件更新
1098     @Update({ 
1099     "<script> ",
1100         "update %tbl_name%  set ",
1101         "%update_chase% ",
1102         "<where>",
1103 %query_if_test_with_null%
1104         "</where>",
1105     "</script>" 
1106     })
1107     int update%tbl_name_upper_camel%ByNull(@Param("updateObj") %tbl_name_upper_camel% %tbl_name_lower_camel%ForUpdate,@Param("queryObj") %tbl_name_upper_camel% %tbl_name_lower_camel%ForQuery);
1108 ';
1109 
1110 
1111 INSERT INTO java_code
1112 SELECT tbl_name,'update','mapper','通过条件更新,如实更新,且查询条件有null,就code is null.',@query_template1,'1','' FROM all_table;
1113 
1114 -- dao
1115 SET @query_template1=
1116 '
1117     // 通过条件更新,如实更新,且查询条件有null,就code is null
1118     public void update%tbl_name_upper_camel%ByNull(%tbl_name_upper_camel% %tbl_name_lower_camel%ForUpdate,%tbl_name_upper_camel% %tbl_name_lower_camel%ForQuery){
1119         
1120         if(%tbl_name_lower_camel%ForUpdate == null || check%tbl_name_upper_camel%AllFieldsIsNull(%tbl_name_lower_camel%ForUpdate) 
1121            || %tbl_name_lower_camel%ForQuery==null || check%tbl_name_upper_camel%AllFieldsIsNull(%tbl_name_lower_camel%ForQuery)){
1122             bizLogger.warn(" update %tbl_name% dao layer input , but %tbl_name_lower_camel%ForUpdate or %tbl_name_lower_camel%ForQuery is null ");
1123             throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
1124                     ResultInfo.SYS_INNER_ERROR.getDesc() + " %tbl_name_lower_camel%ForUpdate or %tbl_name_lower_camel%ForQuery is null , bizId=" + BizLogUtils.getValueOfBizId());
1125         }
1126         
1127         %update_set_time%
1128         
1129         int updateResult = 0;
1130         
1131         try {
1132             updateResult =  mapper.update%tbl_name_upper_camel%ByNull(%tbl_name_lower_camel%ForUpdate,%tbl_name_lower_camel%ForQuery);
1133         } catch (DuplicateKeyException e) {
1134             bizLogger.error(" update %tbl_name% duplicateKeyException ,%tbl_name_lower_camel%ForQuery : "
1135                     + %tbl_name_lower_camel%ForQuery.toString());
1136             throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
1137                     ResultInfo.SYS_INNER_ERROR.getDesc() + " duplicate exception ,bizId=" + BizLogUtils.getValueOfBizId(),e);
1138         }
1139         
1140         if (updateResult == 0) {
1141             bizLogger.warn("update  %tbl_name%  result == 0 [updateResult, %tbl_name_lower_camel%ForQuery] : "+updateResult+","+ %tbl_name_lower_camel%ForQuery.toString());
1142             throw new BusinessException(ResultInfo.NO_DATA.getCode(),ResultInfo.NO_DATA.getDesc() + " ,bizId="+BizLogUtils.getValueOfBizId());
1143         }
1144         
1145     }
1146 ';
1147 
1148 INSERT INTO java_code
1149 SELECT tbl_name,'update','dao','通过条件更新,如实更新,且查询条件有null,就code is null',@query_template1,'1','' FROM all_table;
1150 
1151 -- ######################################################################################################
1152 -- 通过条件更新
1153 -- ######################################################################################################
1154 
1155 SET @query_template1=
1156 '
1157     // 通过条件更新
1158     @Update({ 
1159     "<script> ",
1160         "update %tbl_name% ",
1161         "<set>",
1162 %update_if_test%
1163         "</set>",
1164         "<where>",
1165 %query_if_test%
1166         "</where>",
1167     "</script>" 
1168     })
1169     int update%tbl_name_upper_camel%(@Param("updateObj") %tbl_name_upper_camel% %tbl_name_lower_camel%ForUpdate,@Param("queryObj") %tbl_name_upper_camel% %tbl_name_lower_camel%ForQuery);
1170 ';
1171 
1172 
1173 INSERT INTO java_code
1174 SELECT tbl_name,'update','mapper','通过条件更新',@query_template1,'1','' FROM all_table;
1175 
1176 -- dao
1177 SET @query_template1=
1178 '
1179     // 通过条件更新
1180     public void update%tbl_name_upper_camel%(%tbl_name_upper_camel% %tbl_name_lower_camel%ForUpdate,%tbl_name_upper_camel% %tbl_name_lower_camel%ForQuery){
1181         
1182         if(%tbl_name_lower_camel%ForUpdate == null || check%tbl_name_upper_camel%AllFieldsIsNull(%tbl_name_lower_camel%ForUpdate) 
1183            || %tbl_name_lower_camel%ForQuery==null || check%tbl_name_upper_camel%AllFieldsIsNull(%tbl_name_lower_camel%ForQuery)){
1184             bizLogger.warn(" update %tbl_name% dao layer input , but %tbl_name_lower_camel%ForUpdate or %tbl_name_lower_camel%ForQuery is null ");
1185             throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
1186                     ResultInfo.SYS_INNER_ERROR.getDesc() + " %tbl_name_lower_camel%ForUpdate or %tbl_name_lower_camel%ForQuery is null , bizId=" + BizLogUtils.getValueOfBizId());
1187         }
1188         
1189         %update_set_time%
1190         
1191         int updateResult = 0;
1192         
1193         try {
1194             updateResult =  mapper.update%tbl_name_upper_camel%(%tbl_name_lower_camel%ForUpdate,%tbl_name_lower_camel%ForQuery);
1195         } catch (DuplicateKeyException e) {
1196             bizLogger.error(" update %tbl_name% duplicateKeyException ,%tbl_name_lower_camel%ForQuery : "
1197                     + %tbl_name_lower_camel%ForQuery.toString());
1198             throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
1199                     ResultInfo.SYS_INNER_ERROR.getDesc() + " duplicate exception ,bizId=" + BizLogUtils.getValueOfBizId(),e);
1200         }
1201         
1202         if (updateResult == 0) {
1203             bizLogger.warn("update  %tbl_name%  result == 0 [updateResult, %tbl_name_lower_camel%ForQuery] : "+updateResult+","+ %tbl_name_lower_camel%ForQuery.toString());
1204             throw new BusinessException(ResultInfo.NO_DATA.getCode(),ResultInfo.NO_DATA.getDesc() + " ,bizId="+BizLogUtils.getValueOfBizId());
1205         }
1206         
1207     }
1208 ';
1209 
1210 
1211 INSERT INTO java_code
1212 SELECT tbl_name,'update','dao','通过条件更新',@query_template1,'1','' FROM all_table;
1213 
1214 
1215 
1216 -- ######################################################################################################
1217 -- 通过条件和主键in更新
1218 -- ######################################################################################################
1219 
1220 
1221 SET @query_template1=
1222 '
1223     // 通过条件和主键in更新
1224     @Update({ 
1225     "<script> ",
1226         "update %tbl_name% ",
1227         "<set>",
1228 %update_if_test%
1229         "</set>",
1230         "<where>",
1231 %query_if_test%
1232             "<if test = \'itemList != null and itemList.size() > 0\'> AND %pk% IN " ,
1233             "    <foreach collection=\'itemList\' item=\'item\' index=\'index\' open=\'(\' separator=\',\' close=\')\'> " ,
1234             "        #{item,jdbcType=%pk_jdbc_type%}   " ,
1235             "    </foreach> " ,
1236             "</if>" ,
1237         "</where>",
1238     "</script>" 
1239     })
1240     int update%tbl_name_upper_camel%By%pk_upper_camel%List(@Param("itemList") List<%pk_java_type%> %pk_lower_camel%ListForQuery,@Param("queryObj") %tbl_name_upper_camel% %tbl_name_lower_camel%ForQuery,@Param("updateObj") %tbl_name_upper_camel% %tbl_name_lower_camel%ForUpdate);
1241 ';
1242 
1243 
1244 INSERT INTO java_code
1245 SELECT tbl_name,'update','mapper','通过条件和主键in更新',@query_template1,'1','' FROM all_table;
1246 
1247 -- dao
1248 
1249 SET @query_template1=
1250 '
1251     // 通过条件和主键in更新
1252     public void update%tbl_name_upper_camel%(List<%pk_java_type%> %pk_lower_camel%ListForQuery,%tbl_name_upper_camel% %tbl_name_lower_camel%ForQuery,%tbl_name_upper_camel% %tbl_name_lower_camel%ForUpdate){
1253         
1254         if((%pk_lower_camel%ListForQuery == null || %pk_lower_camel%ListForQuery.size()==0 ) 
1255             && (%tbl_name_lower_camel%ForQuery == null || check%tbl_name_upper_camel%AllFieldsIsNull(%tbl_name_lower_camel%ForQuery))){
1256             bizLogger.warn(" update %tbl_name% dao layer input , but %pk_lower_camel%ListForQuery and %tbl_name_lower_camel%ForQuery is null at same time");
1257             throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
1258                     ResultInfo.SYS_INNER_ERROR.getDesc() + " %pk_lower_camel%ListForQuery and %tbl_name_lower_camel%ForQuery is null at same time , bizId=" + BizLogUtils.getValueOfBizId());
1259         }
1260         
1261         if(%tbl_name_lower_camel%ForUpdate == null  ){
1262             bizLogger.warn(" update %tbl_name% dao layer input , but %tbl_name_lower_camel%ForUpdate is null ");
1263             throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
1264                     ResultInfo.SYS_INNER_ERROR.getDesc() + " %tbl_name_lower_camel%ForUpdatey is null  , bizId=" + BizLogUtils.getValueOfBizId());
1265         }
1266         
1267         %update_set_time%
1268         
1269         int updateResult = 0;
1270         
1271         try {
1272             updateResult =  mapper.update%tbl_name_upper_camel%By%pk_upper_camel%List(%pk_lower_camel%ListForQuery,%tbl_name_lower_camel%ForQuery,%tbl_name_lower_camel%ForUpdate);
1273         } catch (DuplicateKeyException e) {
1274             bizLogger.error(" update %tbl_name% duplicateKeyException ,%tbl_name_lower_camel%ForQuery : "
1275                     + %tbl_name_lower_camel%ForQuery.toString()+" ; %pk_lower_camel%ListForQuery: "+%pk_lower_camel%ListForQuery);
1276             throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
1277                     ResultInfo.SYS_INNER_ERROR.getDesc() + " duplicate exception ,bizId=" + BizLogUtils.getValueOfBizId(),e);
1278         }
1279         
1280         if (updateResult == 0) {
1281             bizLogger.warn("update  %tbl_name% result  == 0 [updateResult, %tbl_name_lower_camel%ForQuery,%pk_lower_camel%ListForQuery] : "+updateResult+","+ %tbl_name_lower_camel%ForQuery.toString()+","+%pk_lower_camel%ListForQuery);
1282             throw new BusinessException(ResultInfo.NO_DATA.getCode(),ResultInfo.NO_DATA.getDesc() + " ,bizId="+BizLogUtils.getValueOfBizId());
1283         }
1284         
1285     }
1286 ';
1287 
1288 
1289 INSERT INTO java_code
1290 SELECT tbl_name,'update','dao','通过条件和主键in更新',@query_template1,'1','' FROM all_table;
1291 
1292 
1293 
1294 -- #################################################################################
1295 -- #################################################################################
1296 -- #################################################################################
1297 -- #################################################################################
1298 -- ############################## mapper insert ####################################
1299 -- #################################################################################
1300 -- #################################################################################
1301 
1302 -- ######################################################################################################
1303 -- 单条插入:id自增
1304 -- ######################################################################################################
1305 
1306 SET @query_template1=
1307 '
1308     // 单条插入:id自增
1309     @Insert({ 
1310         "insert into %tbl_name% ",
1311         "(%col_list%)",
1312         "values ",
1313         "(%insert_if_test%) "
1314     })
1315     @Options(useGeneratedKeys = true, keyProperty = "item.%pk%", keyColumn = "%pk%")
1316     int insert%tbl_name_upper_camel%(@Param("item") %tbl_name_upper_camel% %tbl_name_lower_camel%);
1317 ';
1318 
1319 
1320 INSERT INTO java_code
1321 SELECT tbl_name,'insert','mapper','单条插入',@query_template1,'1','id自增' FROM all_table;
1322 
1323 -- dao
1324 SET @query_template1=
1325 '
1326     // 单条插入:id自增
1327     public void insert%tbl_name_upper_camel%(%tbl_name_upper_camel% %tbl_name_lower_camel%){
1328     
1329         if(%tbl_name_lower_camel% == null || check%tbl_name_upper_camel%AllFieldsIsNull(%tbl_name_lower_camel%) ){
1330             bizLogger.warn(" insert %tbl_name%  dao layer input , but %tbl_name_lower_camel% is null ");
1331             throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
1332                     ResultInfo.SYS_INNER_ERROR.getDesc() + " %tbl_name_lower_camel% is null  , bizId=" + BizLogUtils.getValueOfBizId());
1333         }
1334     
1335 %insert_set_time%
1336 
1337         %pk_java_type% insertResult = null;
1338         
1339         try {
1340             insertResult =  mapper.insert%tbl_name_upper_camel%(%tbl_name_lower_camel%);
1341         } catch (DuplicateKeyException e) {
1342             bizLogger.error(" insert %tbl_name% duplicateKeyException ,%tbl_name_lower_camel% : "
1343                     + %tbl_name_lower_camel%.toString());
1344             throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
1345                     ResultInfo.SYS_INNER_ERROR.getDesc() + " duplicate exception ,bizId=" + BizLogUtils.getValueOfBizId(),e);
1346         }
1347         
1348         if (insertResult==null || insertResult==0) {
1349             bizLogger.warn("insert  %tbl_name% result is null or result == 0 , %tbl_name_lower_camel%: "+%tbl_name_lower_camel%.toString());
1350             throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),ResultInfo.SYS_INNER_ERROR.getDesc() + " ,bizId="+BizLogUtils.getValueOfBizId());
1351         }   
1352     
1353     }
1354 ';
1355 
1356 INSERT INTO java_code
1357 SELECT tbl_name,'insert','dao','单条插入',@query_template1,'1','id自增' FROM all_table;
1358 
1359 -- ######################################################################################################
1360 -- 单条插入:id不自增
1361 -- ######################################################################################################
1362 
1363 SET @query_template1=
1364 '
1365     // 单条插入:id不自增
1366     @Insert({ 
1367         "insert into %tbl_name% ",
1368         "(%col_list%)",
1369         "values ",
1370         "(%insert_if_test%) "
1371     })
1372     int insert%tbl_name_upper_camel%NoIncr(@Param("item") %tbl_name_upper_camel% %tbl_name_lower_camel%);
1373 ';
1374 
1375 
1376 INSERT INTO java_code
1377 SELECT tbl_name,'insert','mapper','单条插入',@query_template1,'2','id不自增' FROM all_table;
1378 
1379 -- dao
1380 SET @query_template1=
1381 '
1382     // 单条插入:id不自增
1383     public void insert%tbl_name_upper_camel%NoIncr(%tbl_name_upper_camel% %tbl_name_lower_camel%){
1384     
1385         if(%tbl_name_lower_camel% == null || check%tbl_name_upper_camel%AllFieldsIsNull(%tbl_name_lower_camel%) ){
1386             bizLogger.warn(" insert %tbl_name%  %tbl_name_lower_camel% is null ");
1387             throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
1388                     ResultInfo.SYS_INNER_ERROR.getDesc() + " %tbl_name_lower_camel% is null  , bizId=" + BizLogUtils.getValueOfBizId());
1389         }
1390 
1391 %insert_set_time%
1392 
1393         int insertResult = 0;
1394         try {
1395             insertResult =  mapper.insert%tbl_name_upper_camel%(%tbl_name_lower_camel%);
1396         } catch (DuplicateKeyException e) {
1397             bizLogger.error(" insert %tbl_name% duplicateKeyException ,%tbl_name_lower_camel% : "
1398                     + %tbl_name_lower_camel%.toString());
1399             throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
1400                     ResultInfo.SYS_INNER_ERROR.getDesc() + " duplicate exception ,bizId=" + BizLogUtils.getValueOfBizId(),e);
1401         }
1402         
1403         if ( insertResult==0) {
1404             bizLogger.warn("insert  %tbl_name% result is null or result == 0 , %tbl_name_lower_camel%: "+%tbl_name_lower_camel%.toString());
1405             throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),ResultInfo.SYS_INNER_ERROR.getDesc() + " ,bizId="+BizLogUtils.getValueOfBizId());
1406         }    
1407         
1408     }
1409 ';
1410 
1411 INSERT INTO java_code
1412 SELECT tbl_name,'insert','dao','单条插入',@query_template1,'2','id不自增' FROM all_table;
1413 
1414 
1415 -- ######################################################################################################
1416 -- 批量插入
1417 -- ######################################################################################################
1418 SET @query_template1=
1419 '
1420     // 批量插入
1421     @Insert({
1422         "<script> ",
1423             "insert into %tbl_name% ( %col_list% ) values",
1424             "<foreach collection=\'itemList\' item=\'item\' index=\'index\' open=\'(\' separator=\'),(\' close=\')\'>",
1425                 "%insert_if_test% ",
1426             "</foreach>",
1427         "</script>" 
1428     })
1429     int batchInsert%tbl_name_upper_camel%(@Param("itemList") List<%tbl_name_upper_camel%> %tbl_name_lower_camel%List);
1430 ';
1431 
1432 
1433 INSERT INTO java_code
1434 SELECT tbl_name,'insert','mapper','批量插入', @query_template1,'1',''  FROM all_table;
1435 
1436 -- dao
1437 
1438 SET @query_template1=
1439 '
1440     // 批量插入
1441     @SuppressWarnings("unchecked")
1442     public int batchInsert%tbl_name_upper_camel%(Object object) {
1443         // 类型转换,支持单个对象或者集合形式作为入参
1444         List<%tbl_name_upper_camel%> list = null;
1445         if (object instanceof %tbl_name_upper_camel%) {
1446             list = new ArrayList<%tbl_name_upper_camel%>();
1447             list.add((%tbl_name_upper_camel%) object);
1448         } else if (object instanceof List) {
1449             for (Object o : (List<?>) object) {
1450                 if (!(o instanceof %tbl_name_upper_camel%)) {
1451                     throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),ResultInfo.SYS_INNER_ERROR.getDesc() + ",error element: " + o.toString() + ",object type is error for batch insert" + BizLogUtils.getValueOfBizId());
1452                 }
1453             }
1454             list = (List<%tbl_name_upper_camel%>) object;
1455         } else {
1456             throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),ResultInfo.SYS_INNER_ERROR.getDesc() + ",object type is error for batch insert"  + BizLogUtils.getValueOfBizId());
1457         }
1458 
1459         // 如果集合为空则报异常
1460         if (list == null || list.size() == 0) {
1461             throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),ResultInfo.SYS_INNER_ERROR.getDesc() + ",batch insert empty ,bizId="  + BizLogUtils.getValueOfBizId());
1462         }
1463 
1464         //设置创建时间
1465 %batch_insert_set_time%
1466 
1467         // 插入阈值, 每多少条commit一次,默认是200条做一次。
1468         int threshold = 200;
1469 
1470         int result = 0;
1471         int sum = list.size();
1472         int end = 0;
1473         for (int i = 0; i < sum; i = i + threshold) {
1474             end = i + threshold > sum ? sum : i + threshold;
1475             try {
1476                 result += mapper.batchInsert%tbl_name_upper_camel%(list.subList(i, end));
1477             } catch (Exception e) {
1478                 //  根据业务做补偿机制,例如通过end值,将之前插入的值全部删除或者状态翻转为无效
1479                 batchInsert%tbl_name_upper_camel%FailOffset(list.subList(0, end));
1480                 throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),ResultInfo.SYS_INNER_ERROR.getDesc()+ ",end value: " + end + ",batch insert has error,offset [batch insert error] success ,bizId=" + BizLogUtils.getValueOfBizId(),  e);
1481             }
1482         }
1483         return result;
1484     }
1485 
1486     // 批量插入失败后,进行相关补偿操作
1487     private void batchInsert%tbl_name_upper_camel%FailOffset(List<%tbl_name_upper_camel%> list) {
1488 
1489         //  补偿操作,可以比插入操作的阈值大一点, 每多少条commit一次,默认是400条做一次。
1490         int threshold = 400;
1491         int sum = list.size();
1492         int end = 0;
1493         for (int i = 0; i < sum; i = i + threshold) {
1494             end = i + threshold > sum ? sum : i + threshold;
1495             try {
1496                 // TODO 批量插入失败后,需要进行补偿的操作,例如:将之前插入的值全部删除或者状态翻转为无效
1497                 //List<%pk_java_type%> %pk%List = list.subList(i, end).stream().map(%tbl_name_upper_camel%::get%pk_upper_camel%).collect(Collectors.toList());
1498                 //%tbl_name_upper_camel% %tbl_name_lower_camel%ForUpdate = new %tbl_name_upper_camel%();
1499                 //%tbl_name_lower_camel%ForUpdate.set%pk_upper_camel%(list.get(i).get%pk_upper_camel%());
1500                 //%tbl_name_lower_camel%ForUpdate.setStatus(%tbl_name_upper_camel%.STATUS_INVALID);
1501                 //delete%tbl_name_upper_camel%ByPrimaryKey(list.get(i).get%pk_upper_camel%());
1502                 //update%tbl_name_upper_camel%(%pk%List,null,%tbl_name_lower_camel%ForUpdate);
1503             } catch (Exception e) {
1504                 // 如果做业务补偿的时候也失败了,只能将重要信息打印在日志里面,运维干预进行恢复了
1505                 throw new BusinessException( ResultInfo.SYS_INNER_ERROR.getCode(),ResultInfo.SYS_INNER_ERROR.getDesc() + ", [offset batch insert error]  failed ,"+ ",bizId: " + BizLogUtils.getValueOfBizId(), e);
1506             }
1507         }
1508 
1509     }
1510 ';
1511 
1512 
1513 INSERT INTO java_code
1514 SELECT tbl_name,'insert','dao','批量插入', @query_template1,'1',''  FROM all_table;
1515 
1516 
1517 
1518 -- ######################################################################################################
1519 -- pojo setter方法
1520 -- ######################################################################################################
1521 
1522 INSERT INTO java_code
1523 SELECT tbl_name,'pojo','setter','实体类赋值',pojo_code,'1',''
1524 FROM (
1525 SELECT tbl_name ,
1526     (
1527     SELECT CONCAT_WS('','/* 新建对象*/\r\n','%tbl_name_upper_camel%',' ','%tbl_name_lower_camel%','= new ','%tbl_name_upper_camel%','();\r\n\r\n/*设置属性*/\r\n',
1528                 group_concat(
1529                    /* cdkmallGoodsApply.setUserUuid(userUuid); */
1530                     CONCAT_WS( ''
1531                         ,CONCAT_WS('','/*',c.column_comment,' | ',c.column_type,' | ',if(c.is_nullable='YES','可空','非空'),if(c.extra='','',CONCAT_WS('',' | ',c.extra)),' | ','默认=',ifnull(c.COLUMN_DEFAULT,'null'),'  */ \r\n')
1532                         ,REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(TABLE_NAME, CONCAT(@noStrInTbl,'_'), ''), '_z', 'Z'), '_y', 'Y'), '_x', 'X'), '_w', 'W'), '_v', 'V'), '_u', 'U'), '_t', 'T'), '_s', 'S'), '_r', 'R'), '_q', 'Q'), '_p', 'P'), '_o', 'O'), '_n', 'N'), '_m', 'M'), '_l', 'L'), '_k', 'K'), '_j', 'J'), '_i', 'I'), '_h', 'H'), '_g', 'G'), '_f', 'F'), '_e', 'E'), '_d', 'D'), '_c', 'C'), '_b', 'B'), '_a', 'A'),'_','')  
1533                          ,REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(CONCAT_WS('','.set','_',c.column_name), '_z', 'Z'), '_y', 'Y'), '_x', 'X'), '_w', 'W'), '_v', 'V'), '_u', 'U'), '_t', 'T'), '_s', 'S'), '_r', 'R'), '_q', 'Q'), '_p', 'P'), '_o', 'O'), '_n', 'N'), '_m', 'M'), '_l', 'L'), '_k', 'K'), '_j', 'J'), '_i', 'I'), '_h', 'H'), '_g', 'G'), '_f', 'F'), '_e', 'E'), '_d', 'D'), '_c', 'C'), '_b', 'B'), '_a', 'A'),'_','') 
1534                          ,REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(CONCAT_WS('','(',c.column_name,');'), '_z', 'Z'), '_y', 'Y'), '_x', 'X'), '_w', 'W'), '_v', 'V'), '_u', 'U'), '_t', 'T'), '_s', 'S'), '_r', 'R'), '_q', 'Q'), '_p', 'P'), '_o', 'O'), '_n', 'N'), '_m', 'M'), '_l', 'L'), '_k', 'K'), '_j', 'J'), '_i', 'I'), '_h', 'H'), '_g', 'G'), '_f', 'F'), '_e', 'E'), '_d', 'D'), '_c', 'C'), '_b', 'B'), '_a', 'A'),'_','')  
1535                      ) SEPARATOR '\r\n'
1536                 )
1537             ) as pojo_code
1538     FROM
1539         information_schema.COLUMNS c
1540         WHERE
1541         c.table_schema= DATABASE() AND 
1542         c.TABLE_NAME = a.tbl_name
1543     ) AS pojo_code
1544 FROM all_table a
1545 ) tt;
1546 
1547 
1548 -- ######################################################################################################
1549 -- 通过外键字段查询,返回对象
1550 -- ######################################################################################################
1551 
1552 SET @query_template1=
1553 '
1554     // 通过外键查询,返回对象
1555     @Select({
1556         "select %col_list_alias% ",
1557         "from %tbl_name% t ",
1558         "where %col% = #{%col_lower_camel%,jdbcType=%jdbc_type%}"
1559     })
1560     %tbl_name_upper_camel% get%tbl_name_upper_camel%By%col_upper_camel%(%java_type% %col_lower_camel%);
1561 ';
1562 
1563 INSERT INTO java_code
1564 SELECT tbl_name,'select','mapper','通用外键字段查询,返回对象',
1565 REPLACE (
1566 REPLACE (
1567 REPLACE (
1568 REPLACE (
1569 REPLACE (@query_template1,'%col%',col)
1570 ,'%col_lower_camel%',col_lower_camel)
1571 ,'%jdbc_type%',jdbc_type)
1572 ,'%java_type%',java_type)
1573 ,'%col_upper_camel%',col_upper_camel),'1',''
1574 FROM 
1575 (   /*外键表及字段列表*/
1576     SELECT *
1577     FROM all_col_table a
1578     JOIN (select distinct rf_name,rf_col from fk_def) d
1579     ON  d.rf_name=a.tbl_name AND a.col=d.rf_col 
1580 ) t
1581 ;
1582 
1583 
1584 -- dao层
1585 SET @query_template1=
1586 '
1587     // 通用外键查询,返回对象,对象不为空,否则报错
1588     public %tbl_name_upper_camel% get%tbl_name_upper_camel%By%col_upper_camel%(%java_type% %col_lower_camel%){
1589         
1590         if(%col_lower_camel% == null){
1591             bizLogger.warn(" select %tbl_name% , but dao layer input %col_lower_camel% is null ");
1592             throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
1593                     ResultInfo.SYS_INNER_ERROR.getDesc() + " %col_lower_camel% is null , bizId=" + BizLogUtils.getValueOfBizId());
1594         }
1595         
1596         %tbl_name_upper_camel% %tbl_name_lower_camel% = mapper.get%tbl_name_upper_camel%By%col_upper_camel%(%col_lower_camel%);
1597         
1598         if(%tbl_name_lower_camel% == null){
1599             bizLogger.warn(" select %tbl_name%  by %col% ,but find null ,%col_lower_camel% : "
1600                     + %col_lower_camel%.toString());
1601             throw new BusinessException(ResultInfo.NO_DATA.getCode(),ResultInfo.NO_DATA.getDesc() + " ,bizId="+BizLogUtils.getValueOfBizId());
1602         }
1603      
1604         return %tbl_name_lower_camel%;     
1605     }
1606 ';
1607 
1608 INSERT INTO java_code
1609 SELECT tbl_name,'select','dao','通用外键字段查询,返回对象,对象不为空,否则报错',
1610 REPLACE (
1611 REPLACE (
1612 REPLACE (
1613 REPLACE (
1614 REPLACE (@query_template1,'%col%',col)
1615 ,'%col_lower_camel%',col_lower_camel)
1616 ,'%jdbc_type%',jdbc_type)
1617 ,'%java_type%',java_type)
1618 ,'%col_upper_camel%',col_upper_camel),'1',''
1619 FROM 
1620 (   /*外键表及字段列表*/
1621     SELECT *
1622     FROM all_col_table a
1623     JOIN (select distinct rf_name,rf_col from fk_def) d
1624     ON  d.rf_name=a.tbl_name AND a.col=d.rf_col 
1625 ) t
1626 ;
1627 
1628 
1629 SET @query_template1=
1630 '
1631     // 通用外键查询,返回对象,对象可为空
1632     public %tbl_name_upper_camel% get%tbl_name_upper_camel%By%col_upper_camel%WithNull(%java_type% %col_lower_camel%){
1633         
1634         if(%col_lower_camel% == null){
1635             bizLogger.warn(" select %tbl_name% , but dao layer input %col_lower_camel% is null ");
1636             throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
1637                     ResultInfo.SYS_INNER_ERROR.getDesc() + " %col_lower_camel% is null , bizId=" + BizLogUtils.getValueOfBizId());
1638         }
1639         
1640         %tbl_name_upper_camel% %tbl_name_lower_camel% = mapper.get%tbl_name_upper_camel%By%col_upper_camel%(%col_lower_camel%);
1641      
1642         return %tbl_name_lower_camel%;     
1643     }
1644 ';
1645 
1646 INSERT INTO java_code
1647 SELECT tbl_name,'select','dao','通用外键字段查询,返回对象,对象可为空',
1648 REPLACE (
1649 REPLACE (
1650 REPLACE (
1651 REPLACE (
1652 REPLACE (@query_template1,'%col%',col)
1653 ,'%col_lower_camel%',col_lower_camel)
1654 ,'%jdbc_type%',jdbc_type)
1655 ,'%java_type%',java_type)
1656 ,'%col_upper_camel%',col_upper_camel),'1',''
1657 FROM 
1658 (   /*外键表及字段列表*/
1659     SELECT *
1660     FROM all_col_table a
1661     JOIN (select distinct rf_name,rf_col from fk_def) d
1662     ON  d.rf_name=a.tbl_name AND a.col=d.rf_col 
1663 ) t
1664 ;
1665 
1666 -- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1667 
1668 -- 自动为insert dao层添加 setCreateTime, update dao层设置setLastUpdateTime
1669 
1670 -- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1671 
1672 SET @temp='%tbl_name_lower_camel%ForUpdate.%col_setter%(LocalDateTime.now());';
1673 
1674 UPDATE all_table a SET a.update_set_time=
1675 IFNULL(
1676     (
1677     SELECT 
1678         REPLACE(
1679         REPLACE(@temp,'%tbl_name_lower_camel%',c.tbl_name_lower_camel)
1680         ,'%col_setter%',c.col_setter)
1681     FROM all_col_table c WHERE c.col = 'last_update_time' AND a.tbl_name=c.tbl_name
1682     )
1683 ,' ');
1684 
1685 SET @temp='        %tbl_name_lower_camel%.%col_setter%(LocalDateTime.now());';
1686 
1687 UPDATE all_table a SET a.insert_set_time=
1688 IFNULL(
1689     (
1690     SELECT GROUP_CONCAT(
1691         REPLACE(
1692         REPLACE(@temp,'%tbl_name_lower_camel%',c.tbl_name_lower_camel)
1693         ,'%col_setter%',c.col_setter) order by id SEPARATOR '\r\n')
1694     FROM all_col_table c WHERE c.col IN( 'last_update_time','create_time') AND a.tbl_name=c.tbl_name
1695     )
1696 ,' ');
1697 
1698 SET @temp='
1699         for(%tbl_name_upper_camel% %tbl_name_lower_camel%:list){
1700 %insert_set_time%
1701         }
1702 ';
1703 
1704  -- 为了格式化:replace(insert_set_time,'       ','            ')
1705 UPDATE all_table SET batch_insert_set_time=
1706 REPLACE(
1707 REPLACE(
1708 REPLACE(@temp,'%tbl_name_lower_camel%',tbl_name_lower_camel)
1709 ,'%tbl_name_upper_camel%',tbl_name_upper_camel)
1710 ,'%insert_set_time%',replace(insert_set_time,'       ','            '));
1711 
1712 -- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1713 
1714 -- 有create_time字段,按照该字段排序
1715 
1716 -- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1717 set @create_time_phase=
1718 '
1719         // 默认按照createTime降序排列,即刚创建的在前面显示
1720         //Comparator<%tbl_name_upper_camel%> comparator = (first, second) -> second.getCreateTime().compareTo(first.getCreateTime());
1721         //%tbl_name_lower_camel%List.sort(comparator);
1722         
1723         if(%tbl_name_lower_camel%List !=null){
1724             %tbl_name_lower_camel%List.sort(new Comparator<%tbl_name_upper_camel%>() {
1725                 public int compare(%tbl_name_upper_camel% o1, %tbl_name_upper_camel% o2) {
1726                     return o2.getCreateTime().compareTo(o1.getCreateTime());
1727                 }
1728             });
1729         }
1730         
1731         
1732         // %tbl_name_lower_camel%List.forEach(System.out::println);
1733         
1734         /* 排序依据:当返回的参数名称与形参名顺序相同时,则为升序。反之为降序。
1735         public int compare(Integer t1, Integer t2) {
1736                return t1-t2;    //升序
1737         }
1738         public int compare(Integer t1, Integer t2) {
1739                return t2-t1;    //降序
1740         }
1741         t1- t2>0 会交换两个元素的位置。
1742         */   
1743 ';
1744 -- 有create_time的设置按照时间排序
1745 UPDATE java_code c  SET c.java_code= 
1746 (
1747 SELECT 
1748 if(COUNT(*)=0,REPLACE(c.java_code,'%order_by_create_time%',''),REPLACE(c.java_code,'%order_by_create_time%',@create_time_phase))
1749 FROM all_col_table a 
1750 WHERE a.tbl_name=c.tbl_name AND a.col='create_time'
1751 );
1752 
1753 
1754 -- ######################################################################################################
1755 
1756 SET @query_template1=
1757 '
1758     // 判断每个字段是否为空
1759     private  boolean check%tbl_name_upper_camel%AllFieldsIsNull(%tbl_name_upper_camel% object) {
1760         if (null == object) {
1761             return true;
1762         }
1763         try {
1764             for (java.lang.reflect.Field f : object.getClass().getDeclaredFields()) {
1765                 f.setAccessible(true);
1766                 if (f.get(object) != null
1767                         && org.apache.commons.lang3.StringUtils.isNotBlank(f.get(object).toString())) {
1768                     return false;
1769                 }
1770             }
1771         } catch (Exception e) {
1772            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
1773                     ResultInfo.SYS_INNER_ERROR.getDesc() + " check%tbl_name_upper_camel%AllFieldsIsNull error , bizId=" + BizLogUtils.getValueOfBizId(),e);
1774         }
1775         return true;
1776     }
1777 ';
1778 
1779 INSERT INTO java_code
1780 SELECT tbl_name,'insert','dao','判断每个字段是否为空',@query_template1,'1','' FROM all_table;
1781 
1782 
1783 -- ######################################################################################################
1784 -- ######################################################################################################
1785 
1786 -- 将模板中的%xx%占位符统一全部替换掉
1787 
1788 /*
1789 SET @temp='   
1790 UPDATE java_code c  SET c.java_code= REPLACE(c.java_code,\'@%tbl_name%@\',
1791 ifnull((select a.%tbl_name% FROM %all_table% a WHERE c.tbl_name=a.tbl_name ),\'@%tbl_name%@\')
1792 );
1793 ';
1794 select code from
1795 (
1796 SELECT (@id:=@id+1) as id,t1.TABLE_NAME,  
1797     replace(
1798     REPLACE(@temp,'%tbl_name%',t1.COLUMN_NAME)
1799     ,'%all_table%',t1.TABLE_NAME) 
1800     AS code
1801 FROM
1802     information_schema.COLUMNS t1
1803     JOIN (SELECT @id:=0) tt
1804 WHERE
1805       t1.table_schema= DATABASE() AND t1.TABLE_NAME IN ('all_table')
1806 ) tt
1807  ;
1808 */
1809 
1810 
1811    
1812 UPDATE java_code c  SET c.java_code= REPLACE(c.java_code,'%tbl_name%',
1813 ifnull((select a.tbl_name FROM all_table a WHERE c.tbl_name=a.tbl_name ),'%tbl_name%')
1814 );
1815 
1816    
1817 UPDATE java_code c  SET c.java_code= REPLACE(c.java_code,'%tbl_name_upper_camel%',
1818 ifnull((select a.tbl_name_upper_camel FROM all_table a WHERE c.tbl_name=a.tbl_name ),'%tbl_name_upper_camel%')
1819 );
1820 
1821    
1822 UPDATE java_code c  SET c.java_code= REPLACE(c.java_code,'%tbl_name_lower_camel%',
1823 ifnull((select a.tbl_name_lower_camel FROM all_table a WHERE c.tbl_name=a.tbl_name ),'%tbl_name_lower_camel%')
1824 );
1825 
1826    
1827 UPDATE java_code c  SET c.java_code= REPLACE(c.java_code,'%pk%',
1828 ifnull((select a.pk FROM all_table a WHERE c.tbl_name=a.tbl_name ),'%pk%')
1829 );
1830 
1831    
1832 UPDATE java_code c  SET c.java_code= REPLACE(c.java_code,'%pk_upper_camel%',
1833 ifnull((select a.pk_upper_camel FROM all_table a WHERE c.tbl_name=a.tbl_name ),'%pk_upper_camel%')
1834 );
1835 
1836    
1837 UPDATE java_code c  SET c.java_code= REPLACE(c.java_code,'%pk_lower_camel%',
1838 ifnull((select a.pk_lower_camel FROM all_table a WHERE c.tbl_name=a.tbl_name ),'%pk_lower_camel%')
1839 );
1840 
1841    
1842 UPDATE java_code c  SET c.java_code= REPLACE(c.java_code,'%pk_java_type%',
1843 ifnull((select a.pk_java_type FROM all_table a WHERE c.tbl_name=a.tbl_name ),'%pk_java_type%')
1844 );
1845 
1846    
1847 UPDATE java_code c  SET c.java_code= REPLACE(c.java_code,'%pk_jdbc_type%',
1848 ifnull((select a.pk_jdbc_type FROM all_table a WHERE c.tbl_name=a.tbl_name ),'%pk_jdbc_type%')
1849 );
1850 
1851    
1852 UPDATE java_code c  SET c.java_code= REPLACE(c.java_code,'%col_list%',
1853 ifnull((select a.col_list FROM all_table a WHERE c.tbl_name=a.tbl_name ),'%col_list%')
1854 );
1855 
1856    
1857 UPDATE java_code c  SET c.java_code= REPLACE(c.java_code,'%col_list_alias%',
1858 ifnull((select a.col_list_alias FROM all_table a WHERE c.tbl_name=a.tbl_name ),'%col_list_alias%')
1859 );
1860 
1861    
1862 UPDATE java_code c  SET c.java_code= REPLACE(c.java_code,'%insert_if_test%',
1863 ifnull((select a.insert_if_test FROM all_table a WHERE c.tbl_name=a.tbl_name ),'%insert_if_test%')
1864 );
1865 
1866    
1867 UPDATE java_code c  SET c.java_code= REPLACE(c.java_code,'%query_if_test%',
1868 ifnull((select a.query_if_test FROM all_table a WHERE c.tbl_name=a.tbl_name ),'%query_if_test%')
1869 );
1870 
1871 UPDATE java_code c  SET c.java_code= REPLACE(c.java_code,'%query_if_test_with_null%',
1872 ifnull((select a.query_if_test_with_null FROM all_table a WHERE c.tbl_name=a.tbl_name ),'%query_if_test_with_null%')
1873 );
1874 
1875    
1876 UPDATE java_code c  SET c.java_code= REPLACE(c.java_code,'%update_chase%',
1877 ifnull((select a.update_chase FROM all_table a WHERE c.tbl_name=a.tbl_name ),'%update_chase%')
1878 );
1879 
1880    
1881 UPDATE java_code c  SET c.java_code= REPLACE(c.java_code,'%update_if_test%',
1882 ifnull((select a.update_if_test FROM all_table a WHERE c.tbl_name=a.tbl_name ),'%update_if_test%')
1883 );
1884 
1885 UPDATE java_code c  SET c.java_code= REPLACE(c.java_code,'%fuzzy_query_if_test%',
1886 ifnull((select a.fuzzy_query_if_test FROM all_table a WHERE c.tbl_name=a.tbl_name ),'%fuzzy_query_if_test%')
1887 );
1888 
1889 UPDATE java_code c  SET c.java_code= REPLACE(c.java_code,'%insert_set_time%',
1890 ifnull((select a.insert_set_time FROM all_table a WHERE c.tbl_name=a.tbl_name ),'%insert_set_time%')
1891 );
1892 
1893 UPDATE java_code c  SET c.java_code= REPLACE(c.java_code,'%update_set_time%',
1894 ifnull((select a.update_set_time FROM all_table a WHERE c.tbl_name=a.tbl_name ),'%update_set_time%')
1895 );
1896 
1897 UPDATE java_code c  SET c.java_code= REPLACE(c.java_code,'%batch_insert_set_time%',
1898 ifnull((select a.batch_insert_set_time FROM all_table a WHERE c.tbl_name=a.tbl_name ),'%batch_insert_set_time%')
1899 );
1900 
1901 
1902 
1903 
1904 -- SELECT * FROM java_code;
1905 
1906 -- #########################################################以上为通用代码######################################################################
1907 
1908 
1909 
1910 
1911 
1912 
1913 
1914 -- select * from all_col_table;
1915 -- select * from all_table;
1916  
1917 
1918 
1919 -- SELECT * FROM java_code;
1920 
1921 
1922 
1923 -- #############################################################################################################
1924 
1925 DROP TABLE if EXISTS java_code_file;
1926 CREATE table if not exists java_code_file(
1927 `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
1928 tbl_name VARCHAR(256)  NOT NULL  COMMENT '表名:tbl_sapo_admin_account',
1929 tbl_name_comment VARCHAR(255) COMMENT '注释',
1930 tbl_name_upper_camel VARCHAR(1024) COMMENT '表名驼峰:SapoAdminAccount',
1931 tbl_name_lower_camel VARCHAR(1024) COMMENT '表名引用驼峰:sapoAdminAccount',
1932 dao text COMMENT '',
1933 mapper text COMMENT '',
1934 PRIMARY KEY (`id`) ,
1935 INDEX idx_1(tbl_name)
1936 ) ENGINE=InnoDB DEFAULT CHARSET=UTF8;
1937 
1938 INSERT INTO java_code_file (tbl_name,tbl_name_comment,tbl_name_upper_camel,tbl_name_lower_camel)
1939 SELECT DISTINCT tbl_name,tbl_name_comment,tbl_name_upper_camel,tbl_name_lower_camel FROM all_col_table;
1940 
1941 -- SELECT * FROM java_code_file;
1942 
1943 -- mapper层代码
1944 SET @template='
1945 
1946 @Mapper
1947 public interface %tbl_name_upper_camel%Mapper{
1948 %mapper%
1949 }
1950 ';
1951 
1952 UPDATE java_code_file f SET f.mapper=
1953 REPLACE(
1954 REPLACE (@template,'%mapper%',
1955 (SELECT 
1956 GROUP_CONCAT(java_code  separator '')
1957 FROM java_code j
1958 WHERE j.tbl_name= f.tbl_name AND j.code_layer='mapper'
1959 ))
1960 ,'%tbl_name_upper_camel%',tbl_name_upper_camel)
1961 ;
1962 
1963 -- dao层代码
1964 SET @template='
1965 
1966 @Repository
1967 public class %tbl_name_upper_camel%Dao extends BaseLogger{
1968     @Autowired
1969     protected %tbl_name_upper_camel%Mapper mapper;
1970 %dao%
1971 }
1972 ';
1973 
1974 UPDATE java_code_file f SET f.dao=
1975 REPLACE(
1976 REPLACE (@template,'%dao%',
1977 (SELECT 
1978 GROUP_CONCAT(java_code  separator '')
1979 FROM java_code j
1980 WHERE j.tbl_name= f.tbl_name AND j.code_layer='dao'
1981 ))
1982 ,'%tbl_name_upper_camel%',tbl_name_upper_camel)
1983 ;
1984 
1985 -- SELECT * FROM java_code_file;
1986 
1987 
1988 -- 去除中间表
1989 -- DROP TABLE all_col_table;
1990 -- DROP TABLE all_table;
1991 -- drop table fk_def;
1992  
1993  /* 使用范例
1994 SELECT java_code FROM java_code WHERE tbl_name = 'tbl_ams_award_pool' AND code_layer='mapper';
1995 SELECT java_code FROM java_code WHERE tbl_name = 'tbl_ams_award_pool' AND code_layer='dao';
1996  */
1997 
1998 END$
1999 DELIMITER ;
2000 
2001 
2002 CALL print_code();
2003 
2004 SELECT dao FROM java_code_file ;
2005 
2006 SELECT mapper FROM java_code_file ;
2007 
2008 SELECT tbl_name, java_code FROM java_code WHERE code_type='pojo';
2009 
2010 -- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2011 --  通用 mapper
2012 -- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2013 SET @temp=
2014 '
2015 @Mapper
2016 public interface SapoMapper{
2017 %mapper_code%
2018 }
2019 ';
2020 
2021 SELECT 
2022 REPLACE(@temp,'%mapper_code%',
2023 GROUP_CONCAT(
2024 java_code SEPARATOR ''
2025 )
2026 )
2027 AS 通用mapper
2028 FROM java_code WHERE code_layer='mapper';
2029 
2030 
2031 -- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2032 --  通用dao
2033 -- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2034 SET @temp=
2035 '
2036 @Repository
2037 public class SapoDao extends BaseLogger{
2038     @Autowired
2039     protected SapoMapper mapper;
2040     
2041 %dao_code%    
2042 }
2043 ';
2044 SELECT 
2045 REPLACE(@temp,'%dao_code%',
2046 GROUP_CONCAT(
2047 java_code SEPARATOR ''
2048 )
2049 )
2050 AS 通用dao
2051 FROM java_code WHERE code_layer='dao';
2052 
2053 
2054 /*
2055 DROP TABLE if exists all_col_code;
2056 DROP TABLE  if exists all_col_table;
2057 DROP TABLE  if exists all_table;
2058 DROP TABLE  if exists exe_sql_tbl;
2059 DROP TABLE  if exists fk_all_col_table;
2060 DROP TABLE  if exists fk_def;
2061 DROP TABLE  if exists sys_code_mapper;
2062 DROP TABLE  if exists fk_list;
2063 drop table  if exists  java_code;
2064 drop table  if exists java_code_file;
2065 drop PROCEDURE  if exists print_pojo;
2066 drop PROCEDURE  if exists print_code;
2067 
2068 */
2069 
2070 /*
2071 @Select({
2072         "select  t.`area_code` as 'area_code' , t.`brand_code` as 'brand_code' , t.`create_time` as 'create_time' , t.`device_exe_remain_time` as 'device_exe_remain_time' , t.`device_fee` as 'device_fee' , t.`expire_time` as 'expire_time' , t.`id` as 'id' , t.`invoice_flag` as 'invoice_flag' , t.`last_update_time` as 'last_update_time' , t.`merch_code` as 'merch_code' , t.`merch_type_code` as 'merch_type_code' , t.`order_no` as 'order_no' , t.`pay_fee` as 'pay_fee' , t.`refund_status` as 'refund_status' , t.`service_price_code` as 'service_price_code' , t.`service_spec_code` as 'service_spec_code' , t.`service_type_code` as 'service_type_code' , t.`status` as 'status' , t.`store_code` as 'store_code' , t.`store_device_code` as 'store_device_code' , t.`store_device_location` as 'store_device_location' , t.`store_type_code` as 'store_type_code' , t.`sub_status` as 'sub_status' , t.`total_fee` as 'total_fee' , t.`trace_no` as 'trace_no' , t.`user_uuid` as 'user_uuid' , t.`wechat_user_uuid` as 'wechat_user_uuid'  ",
2073         "from tbl_sapo_order t ",
2074         "where expire_time is not null  and  expire_time <= #{taskTime,jdbcType=VARCHAR} order by expire_time desc limit #{limitNum,jdbcType=INTEGER}"
2075     })
2076     List<SapoOrder> getExpiredSapoOrderList(@Param("taskTime") String taskTime,@Param("limitNum") Integer limitNum);
2077     
2078      // 通用外键查询,返回对象
2079     public List<SapoOrder> getExpiredSapoOrderList(String taskTime,Integer limitNum){
2080         
2081         List<SapoOrder> sapoOrderList = mapper.getExpiredSapoOrderList(taskTime,limitNum);
2082        
2083         return sapoOrderList;     
2084     }
2085 */
View Code

 

升级方案:

以上做法问题是,每个表都要生成一份通用代码。

可以写一个通用模式。所有表的操作都使用相同的dao、mapper层代码。

表和表之间的区别通过反射实体类字段来区分。


思路如下:

  • mapper层使用mybatis动态语句标签。
  • 查询的字段名列表通过反射拼接进去。
  • 查询的表名通过实体类名反射出表名拼接出来。
  • 查询条件通过实体类反射字段值的有无拼接出查询条件。
  • mapper层返回Map<String,Object>,在dao层反射生成实例类。
  • 更新和插入同理。

通用方法如下:

限定符和类型方法和说明
<T> void deleteObj(T objForDelete)
通用删除。
<T> T getObj(T objForQuery)
通用查询,返回对象,对象不为空,否则报错
<T> java.util.List<T> getObjList(T objForQuery)
通用查询,返回对象集合,集合不为空,否则报错
<T> java.util.List<T> getObjListByFuzzy(T objForQuery)
通用模糊查询(所有的string类型字段都 模糊),返回对象集合,集合不为空,否则报错
<T,E> java.util.List<T> getObjListUseIn(T objForQuery, java.lang.String inCol, java.util.List<E> itemList)
通用条件查询,使用in条件,返回集合不为空,否则报错(set,where都不包含null字段)。
<T> java.util.List<T> getObjListWithEmpty(T objForQuery)
通用查询,返回对象集合,集合可为空
<T> java.util.List<T> getObjListWithEmptyByFuzzy(T objForQuery)
通用模糊查询,所有strign类型字段都模糊,返回对象集合,集合可为空
<T> cn.com.fmsh.nfcos.sapo.biz.database.dao.ObjPage<T> getObjListWithEmptyByFuzzyByPage(T objForQuery, java.lang.Integer pageNum, java.lang.Integer pageSize)
通用分页查询,返回对象集合,集合可以为空
<T> cn.com.fmsh.nfcos.sapo.biz.database.dao.ObjPage<T> getObjListWithEmptyByPage(T objForQuery, java.lang.Integer pageNum, java.lang.Integer pageSize)
通用分页模糊查询,返回对象集合,集合可以为空
<T,E> java.util.List<T> getObjListWithEmptyUseIn(T objForQuery, java.lang.String inCol, java.util.List<E> itemList)
通用条件查询,使用in条件,返回集合可以为空(set,where都不包含null字段)。
<T> T getObjWithNull(T objForQuery)
通用查询,返回对象,对象可为空
<T> void insertObj(T objForInsert)
通用插入,id自增。
<T> void insertObjNoIncr(T objForInsert)
通用插入,id不自增。
<T> void updateObj(T objForUpdate, T objForQuery)
通用条件更新(set,where都不包含null字段)。
<T> void updateObjById(T objForUpdate)
通过id字段更新对象
<T> void updateObjPreStateCheck(T objForUpdate, T objForQuery)
通用强制状态校验更新(set,where包含null字段)。
<T,E> void updateObjUseIn(T objForUpdate, T objForQuery, java.lang.String inCol, java.util.List<E> itemList)
通用条件更新,使用in条件(set,where都不包含null字段)。

 

通用dao、mapper代码如下:

/**
 * Title: 通用dao方式。返回实体类的建立通过对入参类型进行反射。
 * 
 * 
 * @author wanglifeng
 */
@Repository
public class CommonDao extends BaseLogger {
    @Autowired
    protected CommonMapper mapper;

    // 保存每个类的所有成员变量名字集合,不包含static类型。
    protected Map<Class<? extends Object>, List<Field>> objFieldMap = new HashMap<Class<? extends Object>, List<Field>>();

    // java 类型和jdbc类型映射关系
    HashMap<String, String> java2jdbcTypeMap=new HashMap<String, String>();
    
    // 获取表名字。例如:SapoOrder + tbl = tblSapoOrder->tbl_sapo_order
    private static final String TBL_NAME = "tblName";
    // 字段列表。形如:`id` , `code` , `name`
    private static final String COL_LIST = "colList";
    // 通用where语句(不包含空字段):and id=#{queryObj.id,jdbcType=INTEGER}
    private static final String COMMON_WHERE = "commonWhere";
    // 通用set语句(不包含空字段):code=#{item.code,jdbcType=VARCHAR}
    private static final String COMMON_SET = "commonSet";
    // 所有字段set(含空字段): id=#{queryObj.id,jdbcType=INTEGER} ,name=null,age=null
    private static final String COMMON_SET_ALL = "commonSetAll";
    // 所有字段where(含空字段):and code=#{updateObj.code,jdbcType=VARCHAR},name is null
    private static final String COMMON_WHERE_ALL = "commonWhereAll";
    // 通用模糊where语句(不包含空字段):
    // and code like concat('%',#{queryObj.code,jdbcType=VARCHAR},'%')
    private static final String COMMON_WHERE_BY_FUZZY = "commonWhereByFuzzy";
    // in 使用的字段名。驼峰形式
    private static final String IN_COL = "inCol";
    // in语句使用的集合
    private static final String IN_COL_TYPE = "inColType";

    public CommonDao() {
        super();
        
        // java类型和jdbc类型映射
        this.java2jdbcTypeMap.put("String", "VARCHAR");
        this.java2jdbcTypeMap.put("Integer", "INTEGER");
        this.java2jdbcTypeMap.put("LocalDateTime", "TIMESTAMP");
        this.java2jdbcTypeMap.put("Byte", "TINYINT");
        this.java2jdbcTypeMap.put("Long", "BIGINT");
        
    }
    
    private Map<String, String> getConfigMap(Object object, String inCol) {
        // 获取需要拼接的sql语句。所有需要的sql语句在该方法中进行拼接
        // 对象所有的字段都可以不赋值,但是对象不能为空。
        if (object == null) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(), ResultInfo.SYS_INNER_ERROR.getDesc()
                    + "commondao getConfigMap method input object is null, bizId=" + BizLogUtils.getValueOfBizId());
        }
        // 所有拼接出来的sql都放置在该map中。
        Map<String, String> map = new HashMap<String, String>();

        // 获取表名字。例如:SapoOrder + tbl = tblSapoOrder->tbl_sapo_order
        String tblName = humpToLine("tbl" + object.getClass().getSimpleName());

        // 字段列表。形如:`id` , `code` , `name`
        StringBuilder colList = new StringBuilder();
        // 通用where语句(不包含空字段):and id=#{queryObj.id,jdbcType=INTEGER}
        StringBuilder commonWhere = new StringBuilder();
        // 通用set语句(不包含空字段):code=#{item.code,jdbcType=VARCHAR}
        StringBuilder commonSet = new StringBuilder();
        // 所有字段set(含空字段): id=#{queryObj.id,jdbcType=INTEGER} ,name=null,age=null
        StringBuilder commonSetAll = new StringBuilder();
        // 所有字段where(含空字段):and code=#{updateObj.code,jdbcType=VARCHAR},name is null
        StringBuilder commonWhereAll = new StringBuilder();
        // 通用模糊where语句(不包含空字段):
        // and code like concat('%',#{queryObj.code,jdbcType=VARCHAR},'%')
        StringBuilder commonWhereByFuzzy = new StringBuilder();

        try {
            List<Field> fieldList = getFieldList(object.getClass());
            // 循环属性,进行拼接sql操作
            for (Field f : fieldList) {
                // colList 根据实体类,获取字段列表。形如:`id` , `code` , `name`
                colList.append("`").append(humpToLine(f.getName())).append("`").append(" , ");

                commonWhere.append(commonWhereSentence(object, java2jdbcTypeMap, f));

                commonSet.append(commonSetSentence(object, java2jdbcTypeMap, f));

                commonSetAll.append(commonSetAllSentence(object, java2jdbcTypeMap, f));

                commonWhereAll.append(commonWhereAllSentence(object, java2jdbcTypeMap, f));

                commonWhereByFuzzy.append(commonWhereByFuzzySentence(object, java2jdbcTypeMap, f));
                // 组in语句
                if (inCol != null && inCol.equals(f.getName())) {
                    map.put(IN_COL, humpToLine(inCol));
                    map.put(IN_COL_TYPE, java2jdbcTypeMap.get(f.getType().getSimpleName()));
                }
            }

        } catch (Exception e) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    ResultInfo.SYS_INNER_ERROR.getDesc()
                            + "  commondao getConfigMap method reflect field has error , bizId="
                            + BizLogUtils.getValueOfBizId(),
                    e);
        }

        map.put(TBL_NAME, tblName);
        map.put(COL_LIST, colList.deleteCharAt(colList.length() - 2).toString());
        map.put(COMMON_WHERE, commonWhere.toString());
        map.put(COMMON_SET, commonSet.toString());
        map.put(COMMON_SET_ALL, commonSetAll.toString());
        map.put(COMMON_WHERE_ALL, commonWhereAll.toString());
        map.put(COMMON_WHERE_BY_FUZZY, commonWhereByFuzzy.toString());

        return map;
    }

    private String commonWhereByFuzzySentence(Object object, HashMap<String, String> java2jdbcTypeMap, Field f)
            throws IllegalArgumentException, IllegalAccessException {

        // 只有该字段不为空。且不为空字符串
        if (f.get(object) != null && org.apache.commons.lang3.StringUtils.isNotBlank(f.get(object).toString())) {

            String typeName = java2jdbcTypeMap.get(f.getType().getSimpleName());
            String template = " and `%col%`=#{queryObj.%col_camel%,jdbcType=%jdbcType%} ";
            // 如果是字符串,拼接模糊语句
            if (f.getType().getName().equals("java.lang.String")) {
                template = " and `%col%` like concat('%',#{queryObj.%col_camel%,jdbcType=%jdbcType%},'%')";
            }

            template = template.replace("%col%", humpToLine(f.getName()));
            template = template.replace("%col_camel%", f.getName());
            template = template.replace("%jdbcType%", typeName);

            return template;

        }
        return " ";
    }

    private String commonWhereAllSentence(Object object, HashMap<String, String> java2jdbcTypeMap, Field f)
            throws IllegalAccessException {
        // 组织通用where条件
        // 所有字段where(含空):and code=#{updateObj.code,jdbcType=VARCHAR}

        // 只有非空字段,且不为空字符串
        if (f.get(object) != null && org.apache.commons.lang3.StringUtils.isNotBlank(f.get(object).toString())) {

            String typeName = java2jdbcTypeMap.get(f.getType().getSimpleName());
            String template = " and `%col%`=#{queryObj.%col_camel%,jdbcType=%jdbcType%} ";
            template = template.replace("%col%", humpToLine(f.getName()));
            template = template.replace("%col_camel%", f.getName());
            template = template.replace("%jdbcType%", typeName);

            return template;
        } else {
            String template = " and `%col%` is null ";
            template = template.replace("%col%", humpToLine(f.getName()));

            return template;
        }
    }

    private String commonSetAllSentence(Object object, HashMap<String, String> java2jdbcTypeMap, Field f) {
        // 所有字段set(含空): id=#{item.id,jdbcType=INTEGER}
        String typeName = java2jdbcTypeMap.get(f.getType().getSimpleName());
        String template = "  `%col%`=#{item.%col_camel%,jdbcType=%jdbcType%} , ";
        template = template.replace("%col%", humpToLine(f.getName()));
        template = template.replace("%col_camel%", f.getName());
        template = template.replace("%jdbcType%", typeName);

        return template;
    }

    private String commonWhereSentence(Object object, HashMap<String, String> java2jdbcTypeMap,
            java.lang.reflect.Field f) throws IllegalAccessException {
        /*
         * 功能:通用where条件查询 通用where语句(不包含空):and id=#{queryObj.id,jdbcType=INTEGER}
         */
        // 组织通用where条件
        if (f.get(object) != null && org.apache.commons.lang3.StringUtils.isNotBlank(f.get(object).toString())) {

            String typeName = java2jdbcTypeMap.get(f.getType().getSimpleName());
            String template = " and `%col%`=#{queryObj.%col_camel%,jdbcType=%jdbcType%} ";
            template = template.replace("%col%", humpToLine(f.getName()));
            template = template.replace("%col_camel%", f.getName());
            template = template.replace("%jdbcType%", typeName);

            return template;

        }
        return " ";
    }

    private String commonSetSentence(Object object, HashMap<String, String> java2jdbcTypeMap, java.lang.reflect.Field f)
            throws IllegalAccessException {
        // 通用set语句(不包含空):code=#{item.code,jdbcType=VARCHAR}
        // 组织通用where条件
        if (f.get(object) != null && org.apache.commons.lang3.StringUtils.isNotBlank(f.get(object).toString())) {

            String typeName = java2jdbcTypeMap.get(f.getType().getSimpleName());
            String template = "  `%col%`=#{item.%col_camel%,jdbcType=%jdbcType%} , ";
            template = template.replace("%col%", humpToLine(f.getName()));
            template = template.replace("%col_camel%", f.getName());
            template = template.replace("%jdbcType%", typeName);

            return template;

        }
        return " ";
    }

    /**
     * 驼峰转下划线,最后转为大写
     * 
     * @param str
     * @return
     */
    private String humpToLine(String str) {
        java.util.regex.Pattern humpPattern = java.util.regex.Pattern.compile("[A-Z]");
        java.util.regex.Matcher matcher = humpPattern.matcher(str);
        StringBuffer sb = new StringBuffer();
        while (matcher.find()) {
            matcher.appendReplacement(sb, "_" + matcher.group(0).toLowerCase());
        }
        matcher.appendTail(sb);
        return sb.toString();
    }

    /**
     * 下划线转驼峰,正常输出
     * 
     * @param str
     * @return
     */
    private String lineToHump(String str) {
        java.util.regex.Pattern linePattern = Pattern.compile("_(\\w)");
        java.util.regex.Matcher matcher = linePattern.matcher(str);
        StringBuffer sb = new StringBuffer();
        while (matcher.find()) {
            matcher.appendReplacement(sb, matcher.group(1).toUpperCase());
        }
        matcher.appendTail(sb);
        return sb.toString();
    }

    /**
     * 通用插入,id自增。插入结果不为空,否则报错
     * 
     * @param objForInsert
     *            需要插入的对象
     * @param <T>
     *            数据库表model实体类
     * @author wanglifeng
     */
    public <T> void insertObj(T objForInsert) {

        Map<String, String> configMap = getConfigMap(objForInsert, null);

        String tblName = configMap.get(TBL_NAME);
        String commonSet = configMap.get(COMMON_SET);

        // 入参进行判单
        if (objForInsert == null || checkAllFieldsIsNull(objForInsert)) {

            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    "commondao insertObj method input objForInsert is null or all field is null,tblName=" + tblName
                            + ", bizId=" + BizLogUtils.getValueOfBizId());
        }

        Integer result = null;
        try {
            result = mapper.insertObj(objForInsert, tblName, commonSet);
        } catch (DuplicateKeyException e) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(), "commondao insertObj method ,tblName="
                    + tblName + " , duplicate exception ,bizId=" + BizLogUtils.getValueOfBizId(), e);
        }

        // 如果没有查到东西,报错
        if (result == null || result == 0) {

            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    "commondao insertObj method insert result is null or zero ,tblName= " + tblName + ",bizId="
                            + BizLogUtils.getValueOfBizId());
        }
    }

    /**
     * 通用插入,id不自增。插入结果不为空,否则报错
     * 
     * @param objForInsert
     *            需要插入的对象
     * @param <T>
     *            数据库表model实体类
     * @author wanglifeng
     */
    public <T> void insertObjNoIncr(T objForInsert) {

        Map<String, String> configMap = getConfigMap(objForInsert, null);

        String tblName = configMap.get(TBL_NAME);
        String commonSet = configMap.get(COMMON_SET);

        // 入参进行判单
        if (objForInsert == null || checkAllFieldsIsNull(objForInsert)) {

            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    "commondao insertObjNoIncr method input objForInsert is null or all field is null,tblName="
                            + tblName + ", bizId=" + BizLogUtils.getValueOfBizId());
        }

        Integer result = null;
        try {
            result = mapper.insertObjNoIncr(objForInsert, tblName, commonSet);
        } catch (DuplicateKeyException e) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    "commondao insertObjNoIncr method ,tblName=" + tblName + " , duplicate exception ,bizId="
                            + BizLogUtils.getValueOfBizId(),
                    e);
        }

        // 如果没有查到东西,报错
        if (result == null || result == 0) {

            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    "commondao insertObjNoIncr method insert result is null or zero ,tblName= " + tblName + ",bizId="
                            + BizLogUtils.getValueOfBizId());
        }
    }

    /**
     * 通用删除。
     * 
     * @param objForDelete
     *            需要删除的对象,用于组where条件
     * @param <T>
     *            数据库表model实体类
     * @author wanglifeng
     */
    public <T> void deleteObj(T objForDelete) {

        Map<String, String> configMap = getConfigMap(objForDelete, null);
        String tblName = configMap.get(TBL_NAME);
        String commonWhere = configMap.get(COMMON_WHERE);

        // 入参进行判单
        if (objForDelete == null || checkAllFieldsIsNull(objForDelete)) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    "commondao deleteObj method input objForDelete is null or all field is null,tblName=" + tblName
                            + ", bizId=" + BizLogUtils.getValueOfBizId());
        }

        Integer result;
        try {
            result = mapper.deleteObj(objForDelete, tblName, commonWhere);
        } catch (DataIntegrityViolationException e) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(), ResultInfo.SYS_INNER_ERROR.getDesc()
                    + " commondao deleteObj method  DataIntegrityViolationException maybe cause by fk or col can not null , bizId="
                    + BizLogUtils.getValueOfBizId(), e);
        }

        if (result == null || result == 0) {

            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    "commondao deleteObj method result is null or zero ,bizId=" + BizLogUtils.getValueOfBizId());
        }
    }

    /**
     * 通用条件更新(set,where都不包含null字段)。
     * 
     * @param objForUpdate
     *            更新条件对象
     * @param objForQuery
     *            查询条件对象
     * @param <T>
     *            数据库表model实体类
     * @author wanglifeng
     */
    public <T> void updateObj(T objForUpdate, T objForQuery) {

        // 判断这两个对象是否同属一个类
        if (!objForUpdate.getClass().equals(objForQuery.getClass())) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    " commondao  updateObj method 2 input objForUpdate and objForQuery not same class,bizId="
                            + BizLogUtils.getValueOfBizId());
        }

        Map<String, String> configMap = getConfigMap(objForUpdate, null);

        String tblName = configMap.get(TBL_NAME);
        String commonSet = configMap.get(COMMON_SET);

        configMap = getConfigMap(objForQuery, null);

        String commonWhere = configMap.get(COMMON_WHERE);

        // 入参进行判单
        if (objForQuery == null || checkAllFieldsIsNull(objForQuery) || objForUpdate == null
                || checkAllFieldsIsNull(objForUpdate)) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    " commondao updateObj method 2 input objForUpdate or objForQuery is null or all field is null ,tblName="
                            + tblName + ", bizId=" + BizLogUtils.getValueOfBizId());
        }

        Integer result;
        try {
            result = mapper.updateObj(objForUpdate, objForQuery, commonSet, commonWhere, tblName);
        } catch (DuplicateKeyException e) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(), "commondao updateObj method ,tblName="
                    + tblName + " , duplicate exception ,bizId=" + BizLogUtils.getValueOfBizId(), e);
        } catch (DataIntegrityViolationException e) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    "commondao updateObj method ,tblName=" + tblName
                            + " , DataIntegrityViolationException maybe cause by fk or col can not null , bizId="
                            + BizLogUtils.getValueOfBizId(),
                    e);
        }

        // 如果没有查到东西,报错
        if (result == null || result == 0) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(), "commondao updateObj method ,tblName="
                    + tblName + " , update result is null or zero , bizId=" + BizLogUtils.getValueOfBizId());
        }
    }

    /**
     * 通用强制状态校验更新(set,where包含null字段)。 示例:update t set id=1,name=null,age=null where
     * id=1 and name is null and age is null
     * 
     * @param objForUpdate
     *            更新条件对象
     * @param objForQuery
     *            查询条件对象
     * @param <T>
     *            数据库表model实体类
     * @author wanglifeng
     */
    public <T> void updateObjPreStateCheck(T objForUpdate, T objForQuery) {

        // 判断这两个对象是否同属一个类
        if (!objForUpdate.getClass().equals(objForQuery.getClass())) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    " commondao updateObjPreStateCheck method 2 input objForUpdate and objForQuery not same class  ,bizId="
                            + BizLogUtils.getValueOfBizId());
        }

        Map<String, String> configMap = getConfigMap(objForUpdate, null);

        String tblName = configMap.get(TBL_NAME);
        String updateAllCol = configMap.get(COMMON_SET_ALL);

        configMap = getConfigMap(objForQuery, null);

        String whereAllCol = configMap.get(COMMON_WHERE_ALL);

        // 入参进行判单
        if (objForQuery == null || checkAllFieldsIsNull(objForQuery) || objForUpdate == null
                || checkAllFieldsIsNull(objForUpdate)) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    " commondao updateObjPreStateCheck method 2 input objForUpdate or objForQuery is null or all field is null, tblName="
                            + tblName + " , bizId=" + BizLogUtils.getValueOfBizId());
        }

        Integer result;
        try {
            result = mapper.updateObjPreStateCheck(objForUpdate, objForQuery, updateAllCol, whereAllCol, tblName);
        } catch (DuplicateKeyException e) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    "commondao updateObjPreStateCheck method ,tblName=" + tblName + " , duplicate exception ,bizId="
                            + BizLogUtils.getValueOfBizId(),
                    e);
        } catch (DataIntegrityViolationException e) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    "commondao updateObjPreStateCheck method ,tblName=" + tblName
                            + " , DataIntegrityViolationException maybe cause by fk or col can not null , bizId="
                            + BizLogUtils.getValueOfBizId(),
                    e);
        }

        // 如果没有查到东西,报错
        if (result == null || result == 0) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    "commondao updateObjPreStateCheck method ,tblName=" + tblName
                            + " , update result is null or zero , bizId=" + BizLogUtils.getValueOfBizId());
        }
    }

    /**
     * 通用条件更新,使用in条件(set,where都不包含null字段)。
     * 
     * @param objForUpdate
     *            更新条件对象
     * @param objForQuery
     *            查询条件对象
     * @param inCol
     *            使用in条件的字段。驼峰形式
     * @param itemList
     *            in条件集合
     * @param <T>
     *            数据库表model实体类
     * @param <E>
     *            数据库表model实体类
     * @author wanglifeng
     */
    public <T, E> void updateObjUseIn(T objForUpdate, T objForQuery, String inCol, List<E> itemList) {

        // 判断这两个对象是否同属一个类
        if (!objForUpdate.getClass().equals(objForQuery.getClass())) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    " commondao updateObjUseIn method 2 input objForUpdate and objForQuery not same class  ,bizId="
                            + BizLogUtils.getValueOfBizId());
        }

        Map<String, String> configMap = getConfigMap(objForUpdate, null);

        String tblName = configMap.get(TBL_NAME);
        String commonSet = configMap.get(COMMON_SET);

        configMap = getConfigMap(objForQuery, inCol);

        String commonWhere = configMap.get(COMMON_WHERE);
        String inColForMapper = configMap.get(IN_COL);
        String inColType = configMap.get(IN_COL_TYPE);

        // 入参进行判单
        if (inColForMapper == null || itemList == null || itemList.size() == 0) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    " commondao updateObjUseIn method input inCol not not exists or itemList is null or empty  ,bizId="
                            + BizLogUtils.getValueOfBizId());
        }

        // 入参进行判单
        if (objForQuery == null || checkAllFieldsIsNull(objForQuery) || objForUpdate == null
                || checkAllFieldsIsNull(objForUpdate)) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    " commondao updateObjUseIn method 2 input objForUpdate and objForQuery not same class  ,bizId="
                            + BizLogUtils.getValueOfBizId());
        }

        Integer result;
        try {
            result = mapper.updateObjUseIn(objForUpdate, objForQuery, commonSet, commonWhere, tblName, itemList,
                    inColForMapper, inColType);
        } catch (DuplicateKeyException e) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    "commondao updateObjUseIn method ,tblName=" + tblName + " , duplicate exception ,bizId="
                            + BizLogUtils.getValueOfBizId(),
                    e);
        } catch (DataIntegrityViolationException e) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    "commondao updateObjUseIn method ,tblName=" + tblName
                            + " , DataIntegrityViolationException maybe cause by fk or col can not null , bizId="
                            + BizLogUtils.getValueOfBizId(),
                    e);
        }

        // 如果没有查到东西,报错
        if (result == null || result == 0) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    "commondao updateObjUseIn method ,tblName=" + tblName + " , update result is null or zero , bizId="
                            + BizLogUtils.getValueOfBizId());
        }
    }

    /**
     * 通用查询,返回对象,对象不为空,否则报错
     * 
     * @param objForQuery
     *            组where条件的对象
     * @return T 返回T对象
     * @param <T>
     *            数据库表model实体类
     * @author wanglifeng
     */
    public <T> T getObj(T objForQuery) {

        Map<String, String> configMap = getConfigMap(objForQuery, null);
        String colList = configMap.get(COL_LIST);
        String tblName = configMap.get(TBL_NAME);
        String commonWhere = configMap.get(COMMON_WHERE);
        // 入参进行判单
        if (objForQuery == null || checkAllFieldsIsNull(objForQuery)) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    " commondao getObj method  input objForQuery is null or all field is null  ,bizId="
                            + BizLogUtils.getValueOfBizId());
        }

        // 查询结果map集合
        Map<String, Object> map = mapper.getObj(objForQuery, colList, tblName, commonWhere);

        // 如果没有查到东西,报错
        if (map == null || map.size() == 0) {
            bizLogger.warn(" commondao getObj method select " + tblName + " , but result is null ");
            throw new BusinessException(ResultInfo.NO_DATA.getCode(),
                    ResultInfo.NO_DATA.getDesc() + " ,bizId=" + BizLogUtils.getValueOfBizId());
        }

        T newInstance = tansMap2Obj(objForQuery.getClass(), map);

        return newInstance;
    }

    /**
     * 通用查询,返回对象,对象可为空
     * 
     * @param objForQuery
     *            组where条件的对象
     * 
     * @param <T>
     *            数据库表model实体类
     * @return T T类型对象
     * @author wanglifeng
     */
    public <T> T getObjWithNull(T objForQuery) {

        Map<String, String> configMap = getConfigMap(objForQuery, null);

        String colList = configMap.get(COL_LIST);
        String tblName = configMap.get(TBL_NAME);
        String commonWhere = configMap.get(COMMON_WHERE);
        // 入参进行判单
        if (objForQuery == null || checkAllFieldsIsNull(objForQuery)) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    " commondao getObjWithNull method  input objForQuery is null or all field is null  ,bizId="
                            + BizLogUtils.getValueOfBizId());
        }

        // 查询结果map集合
        Map<String, Object> map = mapper.getObj(objForQuery, colList, tblName, commonWhere);

        // 如果没有查到东西,报错
        if (map == null || map.size() == 0) {

            return null;
        }

        T newInstance = tansMap2Obj(objForQuery.getClass(), map);

        return newInstance;
    }

    /**
     * 通用查询,返回对象集合,集合不为空,否则报错
     * 
     * @param objForQuery
     *            组where条件的对象
     * @param <T>
     *            数据库表model实体类
     * @return 返回T对象集合
     * @author wanglifeng
     */
    public <T> List<T> getObjList(T objForQuery) {

        Map<String, String> configMap = getConfigMap(objForQuery, null);

        String colList = configMap.get(COL_LIST);
        String tblName = configMap.get(TBL_NAME);
        String commonWhere = configMap.get(COMMON_WHERE);
        // 入参进行判单
        if (objForQuery == null || checkAllFieldsIsNull(objForQuery)) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    " commondao getObjList method  input objForQuery is null or all field is null  ,bizId="
                            + BizLogUtils.getValueOfBizId());
        }

        // 查询结果map集合
        List<Map<String, Object>> list = mapper.getObjList(objForQuery, colList, tblName, commonWhere);

        // 如果没有查到东西,报错
        if (list == null || list.size() == 0) {
            bizLogger.warn("commondao getObjList select " + tblName + " , but result list is null or empty ");
            throw new BusinessException(ResultInfo.NO_DATA.getCode(),
                    ResultInfo.NO_DATA.getDesc() + " ,bizId=" + BizLogUtils.getValueOfBizId());
        }

        List<T> arrayList = new ArrayList<T>(list.size());

        // 获取T类。
        Class<? extends Object> class1 = objForQuery.getClass();
        for (Map<String, Object> map : list) {
            T newInstance = tansMap2Obj(class1, map);
            arrayList.add(newInstance);
        }

        return arrayList;
    }

    /**
     * 通用分页查询,返回对象集合,集合可以为空
     * 
     * @param objForQuery
     *            组where条件的对象
     * @param pageNum
     *            页码
     * @param pageSize
     *            每页条数
     * @param <T>
     *            数据库表model实体类
     * @return 返回T对象集合
     * @author wanglifeng
     */
    public <T> ObjPage<T> getObjListWithEmptyByFuzzyByPage(T objForQuery, Integer pageNum, Integer pageSize) {

        Map<String, String> configMap = getConfigMap(objForQuery, null);

        String colList = configMap.get(COL_LIST);
        String tblName = configMap.get(TBL_NAME);
        String commonWhereByFuzzy = configMap.get(COMMON_WHERE_BY_FUZZY);
        // 入参进行判单
        if (objForQuery == null || checkAllFieldsIsNull(objForQuery)) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    " commondao getObjListWithEmptyByFuzzyByPage method  input objForQuery is null or all field is null  ,bizId="
                            + BizLogUtils.getValueOfBizId());
        }

        if (pageNum < 1 || pageSize < 1) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    " commondao getObjListWithEmptyByFuzzyByPage method  input pageNum or pageSize < 1  ,bizId="
                            + BizLogUtils.getValueOfBizId());
        }

        pageNum = (pageNum - 1) * pageSize;

        ObjPage<T> objPage = new ObjPage<T>();
        List<T> arrayList = new ArrayList<T>();
        // 默认按照create_time 降序排列。即刚创建的在前面显示
        int count = mapper.getCount(objForQuery, tblName, commonWhereByFuzzy);

        objPage.setTotal(count);
        // 如果查询结果为0,或者最大值已经大于起始值。没必要进行下一步查询
        if (count == 0 || count <= pageNum) {
            objPage.setPageList(arrayList);
            return objPage;
        }

        List<Map<String, Object>> result = mapper.getObjByPage(objForQuery, colList, tblName, commonWhereByFuzzy,
                pageNum, pageSize);

        for (Map<String, Object> map : result) {
            T newInstance = tansMap2Obj(objForQuery.getClass(), map);
            arrayList.add(newInstance);
        }

        objPage.setPageList(arrayList);

        // service层可以从Page中获取总条数
        return objPage;
    }

    /**
     * 通用分页模糊查询,返回对象集合,集合可以为空
     * 
     * @param objForQuery
     *            组where条件的对象
     * @param pageNum
     *            页码
     * @param pageSize
     *            每页条数
     * @param <T>
     *            数据库表model实体类
     * @return 返回T对象集合
     * @author wanglifeng
     */
    public <T> ObjPage<T> getObjListWithEmptyByPage(T objForQuery, Integer pageNum, Integer pageSize) {

        Map<String, String> configMap = getConfigMap(objForQuery, null);

        String colList = configMap.get(COL_LIST);
        String tblName = configMap.get(TBL_NAME);
        String commonWhere = configMap.get(COMMON_WHERE);
        // 入参进行判单
        if (objForQuery == null || checkAllFieldsIsNull(objForQuery)) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    " commondao getObjListWithEmptyByPage method  input objForQuery is null or all field is null  ,bizId="
                            + BizLogUtils.getValueOfBizId());
        }

        if (pageNum < 1 || pageSize < 1) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    " commondao getObjListWithEmptyByPage method  input pageNum or pageSize < 1  ,bizId="
                            + BizLogUtils.getValueOfBizId());
        }

        pageNum = (pageNum - 1) * pageSize;

        ObjPage<T> objPage = new ObjPage<T>();
        List<T> arrayList = new ArrayList<T>();
        // 默认按照create_time 降序排列。即刚创建的在前面显示
        int count = mapper.getCount(objForQuery, tblName, commonWhere);

        objPage.setTotal(count);
        // 如果查询结果为0,或者最大值已经大于起始值。没必要进行下一步查询
        if (count == 0 || count <= pageNum) {
            objPage.setPageList(arrayList);
            return objPage;
        }

        List<Map<String, Object>> result = mapper.getObjByPage(objForQuery, colList, tblName, commonWhere, pageNum,
                pageSize);

        for (Map<String, Object> map : result) {
            T newInstance = tansMap2Obj(objForQuery.getClass(), map);
            arrayList.add(newInstance);
        }

        objPage.setPageList(arrayList);

        // service层可以从Page中获取总条数
        return objPage;
    }

    /**
     * 通用模糊查询(所有的string类型字段都 模糊),返回对象集合,集合不为空,否则报错
     * 
     * @param objForQuery
     *            组where条件的对象
     * @param <T>
     *            数据库表model实体类
     * @return 返回T对象集合
     * @author wanglifeng
     */
    public <T> List<T> getObjListByFuzzy(T objForQuery) {

        Map<String, String> configMap = getConfigMap(objForQuery, null);

        String colList = configMap.get(COL_LIST);
        String tblName = configMap.get(TBL_NAME);
        String commonWhereByFuzzy = configMap.get(COMMON_WHERE_BY_FUZZY);
        // 入参进行判单
        if (objForQuery == null || checkAllFieldsIsNull(objForQuery)) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    " commondao getObjListByFuzzy method  input objForQuery is null or all field is null  ,bizId="
                            + BizLogUtils.getValueOfBizId());
        }

        // 查询结果map集合
        List<Map<String, Object>> list = mapper.getObjList(objForQuery, colList, tblName, commonWhereByFuzzy);

        // 如果没有查到东西,报错
        if (list == null || list.size() == 0) {
            bizLogger.warn("commondao getObjListByFuzzy select " + tblName + " , but result list is null or empty ");
            throw new BusinessException(ResultInfo.NO_DATA.getCode(),
                    ResultInfo.NO_DATA.getDesc() + " ,bizId=" + BizLogUtils.getValueOfBizId());
        }

        List<T> arrayList = new ArrayList<T>(list.size());

        // 获取T类。
        Class<? extends Object> class1 = objForQuery.getClass();
        for (Map<String, Object> map : list) {
            T newInstance = tansMap2Obj(class1, map);
            arrayList.add(newInstance);
        }

        return arrayList;
    }

    /**
     * 通用查询,返回对象集合,集合可为空
     * 
     * @param objForQuery
     *            组where条件的对象
     * @param <T>
     *            数据库表model实体类
     * @return 返回T对象集合
     * @author wanglifeng
     */
    public <T> List<T> getObjListWithEmpty(T objForQuery) {

        Map<String, String> configMap = getConfigMap(objForQuery, null);

        String colList = configMap.get(COL_LIST);
        String tblName = configMap.get(TBL_NAME);
        String commonWhere = configMap.get(COMMON_WHERE);

        // 入参进行判单
        if (objForQuery == null || checkAllFieldsIsNull(objForQuery)) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    " commondao getObjListWithEmpty method  input objForQuery is null or all field is null ,tblName="
                            + tblName + " ,bizId=" + BizLogUtils.getValueOfBizId());
        }

        // 查询结果map集合
        List<Map<String, Object>> list = mapper.getObjList(objForQuery, colList, tblName, commonWhere);

        // 如果没有查到东西,报错
        if (list == null || list.size() == 0) {
            return new ArrayList<T>(0);
        }

        List<T> arrayList = new ArrayList<T>(list.size());

        for (Map<String, Object> map : list) {
            T newInstance = tansMap2Obj(objForQuery.getClass(), map);
            arrayList.add(newInstance);
        }

        return arrayList;
    }

    /**
     * 通用模糊查询,所有strign类型字段都模糊,返回对象集合,集合可为空
     * 
     * @param objForQuery
     *            组where条件的对象
     * @param <T>
     *            数据库表model实体类
     * @return 返回T对象集合
     * @author wanglifeng
     */
    public <T> List<T> getObjListWithEmptyByFuzzy(T objForQuery) {

        Map<String, String> configMap = getConfigMap(objForQuery, null);

        String colList = configMap.get(COL_LIST);
        String tblName = configMap.get(TBL_NAME);
        String commonWhereByFuzzy = configMap.get(COMMON_WHERE_BY_FUZZY);

        // 入参进行判单
        if (objForQuery == null || checkAllFieldsIsNull(objForQuery)) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    " commondao getObjListWithEmptyByFuzzy method  input objForQuery is null or all field is null  ,bizId="
                            + BizLogUtils.getValueOfBizId());
        }

        // 查询结果map集合
        List<Map<String, Object>> list = mapper.getObjList(objForQuery, colList, tblName, commonWhereByFuzzy);

        // 如果没有查到东西,报错
        if (list == null || list.size() == 0) {
            return new ArrayList<T>(0);
        }

        List<T> arrayList = new ArrayList<T>(list.size());

        for (Map<String, Object> map : list) {
            T newInstance = tansMap2Obj(objForQuery.getClass(), map);
            arrayList.add(newInstance);
        }

        return arrayList;
    }

    /**
     * 通用条件查询,使用in条件,返回集合不为空,否则报错(set,where都不包含null字段)。
     * 
     * @param objForQuery
     *            查询条件对象
     * @param inCol
     *            使用in条件的字段。驼峰形式
     * @param <T>
     *            数据库表model实体类
     * @param <E>
     *            数据库表model实体类
     * @param itemList
     *            in条件集合
     * @return 返回T对象集合
     * @author wanglifeng
     */
    public <T, E> List<T> getObjListUseIn(T objForQuery, String inCol, List<E> itemList) {

        Map<String, String> configMap = getConfigMap(objForQuery, inCol);

        String colList = configMap.get(COL_LIST);
        String tblName = configMap.get(TBL_NAME);
        String commonWhere = configMap.get(COMMON_WHERE);
        String inColForMapper = configMap.get(IN_COL);
        String inColType = configMap.get(IN_COL_TYPE);

        // 这个可以不赋任何值,但是必须不能为空
        if (objForQuery == null) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    " commondao getObjListUseIn method  input objForQuery is null ,tblName=" + tblName + " ,bizId="
                            + BizLogUtils.getValueOfBizId());
        }

        // 入参进行判单
        if (inCol == null || itemList == null || itemList.size() == 0) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    " commondao getObjListUseIn method input inCol not not exists or itemList is null or empty ,tblName="
                            + tblName + " ,bizId=" + BizLogUtils.getValueOfBizId());
        }

        // 查询结果map集合
        List<Map<String, Object>> list = mapper.getObjListUseIn(objForQuery, colList, tblName, commonWhere, itemList,
                inColForMapper, inColType);

        // 如果没有查到东西,报错
        if (list == null || list.size() == 0) {
            bizLogger.warn(
                    " commondao getObjListUseIn method select " + tblName + " , but result list is null or empty ");
            throw new BusinessException(ResultInfo.NO_DATA.getCode(),
                    ResultInfo.NO_DATA.getDesc() + " ,bizId=" + BizLogUtils.getValueOfBizId());
        }

        List<T> arrayList = new ArrayList<T>(list.size());

        for (Map<String, Object> map : list) {
            T newInstance = tansMap2Obj(objForQuery.getClass(), map);
            arrayList.add(newInstance);
        }

        return arrayList;
    }

    /**
     * 通用条件查询,使用in条件,返回集合可以为空(set,where都不包含null字段)。
     * 
     * @param objForQuery
     *            查询条件对象
     * @param inCol
     *            使用in条件的字段。驼峰形式
     * @param itemList
     *            in条件集合
     * @param <T>
     *            数据库表model实体类
     * @param <E>
     *            数据库表model实体类
     * @return 返回T对象集合
     * 
     * @author wanglifeng
     */
    public <T, E> List<T> getObjListWithEmptyUseIn(T objForQuery, String inCol, List<E> itemList) {

        Map<String, String> configMap = getConfigMap(objForQuery, inCol);
        String colList = configMap.get(COL_LIST);
        String tblName = configMap.get(TBL_NAME);
        String commonWhere = configMap.get(COMMON_WHERE);
        String inColForMapper = configMap.get(IN_COL);
        String inColType = configMap.get(IN_COL_TYPE);

        // 这个可以不赋任何值,但是必须不能为空
        if (objForQuery == null) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    " commondao getObjListWithEmptyUseIn method  input objForQuery is null ,tblName=" + tblName
                            + " ,bizId=" + BizLogUtils.getValueOfBizId());
        }

        // 入参进行判单
        if (inColForMapper == null || itemList == null || itemList.size() == 0) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    " commondao getObjListWithEmptyUseIn method input inCol not not exists or itemList is null or empty  ,tblName="
                            + tblName + " ,bizId=" + BizLogUtils.getValueOfBizId());
        }

        // 查询结果map集合
        List<Map<String, Object>> list = mapper.getObjListUseIn(objForQuery, colList, tblName, commonWhere, itemList,
                inColForMapper, inColType);

        // 如果没有查到东西,报错
        if (list == null || list.size() == 0) {
            return new ArrayList<T>(0);
        }

        List<T> arrayList = new ArrayList<T>(list.size());

        for (Map<String, Object> map : list) {
            T newInstance = tansMap2Obj(objForQuery.getClass(), map);
            arrayList.add(newInstance);
        }

        return arrayList;
    }

    @SuppressWarnings("unchecked")
    private <T> T tansMap2Obj(Class<? extends Object> class1, Map<String, Object> map) {
        // 将map通过反射转化成为实体类

        // 最终返回值
        HashMap<String, Object> resultMap = new HashMap<String, Object>(map.size());

        // 将下划线map转成驼峰map。例如:key=create_time ->key=createTime
        Set<String> keySet = map.keySet();
        for (String s : keySet) {
            resultMap.put(lineToHump(s), map.get(s));
        }

        T newInstance = null;

        try {

            List<Field> list = getFieldList(class1);
            // 新建对象
            newInstance = (T) class1.getDeclaredConstructor().newInstance();

            // 为对象属性赋值
            for (Field f : list) {
                Object convert = ConvertUtils.convert(resultMap.get(f.getName()), f.getType());
                // 将时间字段特殊处理下。
                if (convert.getClass().getTypeName().equals("java.sql.Timestamp")) {
                    convert = ((java.sql.Timestamp) convert).toLocalDateTime();
                }
                // 将map中的值,赋值到对象上
                f.set(newInstance, convert);
            }
        } catch (Exception e) {
            throw new BusinessException(
                    ResultInfo.SYS_INNER_ERROR.getCode(), ResultInfo.SYS_INNER_ERROR.getDesc()
                            + " commondao tansMap2Obj reflect attri has error , bizId=" + BizLogUtils.getValueOfBizId(),
                    e);
        }

        if (newInstance == null || checkAllFieldsIsNull(newInstance)) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    ResultInfo.SYS_INNER_ERROR.getDesc()
                            + " commondao tansMap2Obj reflect instance is null or all field is null , bizId="
                            + BizLogUtils.getValueOfBizId());
        }
        return newInstance;
    }

    private List<Field> getFieldList(Class<? extends Object> class1) {
        // 从缓存中获取类属性列表
        List<Field> list = objFieldMap.get(class1);
        if (list == null) {
//            System.err.println(class1.getName()+",没有缓存");
            list = new ArrayList<Field>();
            for (java.lang.reflect.Field f : class1.getDeclaredFields()) {
                // 获取所有非静态属性列表
                if (!java.lang.reflect.Modifier.isStatic(f.getModifiers())) {
                    f.setAccessible(true);
                    list.add(f);
                }
            }
            objFieldMap.put(class1, list);
        }
        return list;
    }

    private boolean checkAllFieldsIsNull(Object object) {
        if (null == object) {
            return true;
        }

        List<Field> fieldList = getFieldList(object.getClass());

        try {
            // 遍历对象所有属性
            for (Field f : fieldList) {
                if (f.get(object) != null
                        && org.apache.commons.lang3.StringUtils.isNotBlank(f.get(object).toString())) {
                    return false;
                }
            }

        } catch (Exception e) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(), ResultInfo.SYS_INNER_ERROR.getDesc()
                    + " checkAllFieldsIsNull error , bizId=" + BizLogUtils.getValueOfBizId(), e);
        }
        return true;
    }

    /**
     * 通过id字段更新对象
     * 
     * @param objForUpdate
     *            组where条件的对象
     * @param <T>
     *            数据库表model对象
     * @author wanglifeng
     * 
     */
    @SuppressWarnings("unchecked")
    public <T> void updateObjById(T objForUpdate) {

        // 使用哪个字段更新。
        String whereColCamelFormat = "id";

        T objForQuery = null;

        try {
            // 新建一个查询对象
            objForQuery = (T) objForUpdate.getClass().newInstance();
            // 拿到该属性
            Field field = objForUpdate.getClass().getDeclaredField(whereColCamelFormat);
            field.setAccessible(true);

            if (field.get(objForUpdate) == null || checkAllFieldsIsNull(field.get(objForUpdate))) {
                throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                        "commondao updateObjById method input objForUpdate of " + whereColCamelFormat
                                + " is null bizId=" + BizLogUtils.getValueOfBizId());
            }
            // 将相关字段抠出来。作为where条件
            field.set(objForQuery, field.get(objForUpdate));
        } catch (InstantiationException e) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    "commondao updateObjById method InstantiationException bizId=" + BizLogUtils.getValueOfBizId(), e);
        } catch (IllegalAccessException e) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    "commondao updateObjById method IllegalAccessException , bizId=" + BizLogUtils.getValueOfBizId(),
                    e);
        } catch (NoSuchFieldException e) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    "commondao updateObjById method trans colName=" + whereColCamelFormat + "  not exists, bizId="
                            + BizLogUtils.getValueOfBizId(),
                    e);
        } catch (SecurityException e) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    "commondao updateObjById method SecurityException , bizId=" + BizLogUtils.getValueOfBizId(), e);
        } catch (IllegalArgumentException e) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    "commondao updateObjById method IllegalArgumentException , bizId=" + BizLogUtils.getValueOfBizId(),
                    e);
        }

        updateObjByCol(objForUpdate, objForQuery);
    }

    private <T> void updateObjByCol(T objForUpdate, T objForQuery) {
        // 更新一个对象,set字段是全部保留。id=1,name="wanglifeng",age =null
        // where 字段是不包含空的。

        // 判断这两个对象是否同属一个类
        if (!objForUpdate.getClass().equals(objForQuery.getClass())) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    " commondao  updateObjByCol method 2 input objForUpdate and objForQuery not same class,bizId="
                            + BizLogUtils.getValueOfBizId());
        }

        Map<String, String> configMap = getConfigMap(objForUpdate, null);

        String tblName = configMap.get(TBL_NAME);
        String commonSetAll = configMap.get(COMMON_SET_ALL);

        configMap = getConfigMap(objForQuery, null);

        String commonWhere = configMap.get(COMMON_WHERE);

        // 入参进行判单
        if (objForQuery == null || checkAllFieldsIsNull(objForQuery) || objForUpdate == null
                || checkAllFieldsIsNull(objForUpdate)) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    " commondao updateObjByCol method 2 input objForUpdate or objForQuery is null or all field is null ,tblName="
                            + tblName + ", bizId=" + BizLogUtils.getValueOfBizId());
        }

        Integer result;
        try {
            result = mapper.updateObj(objForUpdate, objForQuery, commonSetAll, commonWhere, tblName);
        } catch (DuplicateKeyException e) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    "commondao updateObjByCol method ,tblName=" + tblName + " , duplicate exception ,bizId="
                            + BizLogUtils.getValueOfBizId(),
                    e);
        } catch (DataIntegrityViolationException e) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    "commondao updateObjByCol method ,tblName=" + tblName
                            + " , DataIntegrityViolationException maybe cause by fk or col can not null , bizId="
                            + BizLogUtils.getValueOfBizId(),
                    e);
        }

        // 如果没有查到东西,报错
        if (result == null || result == 0) {
            throw new BusinessException(ResultInfo.SYS_INNER_ERROR.getCode(),
                    "commondao updateObjByCol method ,tblName=" + tblName + " , update result is null or zero , bizId="
                            + BizLogUtils.getValueOfBizId());
        }
    }

}
CommonDao
/*
* Title: Mapper.java
* Description: 
* Copyright: Copyright (c) 2019
* Company: fmsh
* @author wanglifeng
*/
package cn.com.fmsh.nfcos.sapo.biz.database.dao;

import org.apache.ibatis.annotations.*;

import java.util.*;

/**  
* Title: CommonMapper 通用mapper层。
* Description:  
* @author wanglifeng  
*/

@Mapper
public interface CommonMapper {

 // 单条插入:id自增
    @Insert({ "<script> insert into ${tblName} <set> ${commonSet} </set> </script>"})
    @Options(useGeneratedKeys = true, keyProperty = "item.id", keyColumn = "id")
    int insertObj(
            @Param("item") Object objForInsert
            ,@Param("tblName") String tblName
            ,@Param("commonSet") String commonSet
            );
    
    // 单条插入:id不自增
    @Insert({ "<script> insert into ${tblName} <set> ${commonSet} </set> </script>"})
    int insertObjNoIncr(
            @Param("item") Object objForInsert
            ,@Param("tblName") String tblName
            ,@Param("commonSet") String commonSet
            );
    
    // 删除操作
    @Delete({ 
        "<script> ",
            "delete from ${tblName} ",
            "<where>  ${commonWhere} </where>",  
        "</script>" 
        })       
    int deleteObj(
                @Param("queryObj") Object objForDelete
                ,@Param("tblName") String tblName
                ,@Param("commonWhere") String commonWhere
                );
    // 查询对象
    @Select({ 
        "<script> ",
            "select  ${colList} from ${tblName}",
            "<where>  ${commonWhere} </where>",  
        "</script>" 
        })       
    Map<String, Object> getObj(
                @Param("queryObj") Object objForQuery
                ,@Param("colList") String colList
                ,@Param("tblName") String tblName
                ,@Param("commonWhere") String commonWhere
                );

    @Select({ 
        "<script> ",
            "select  count(1) from ${tblName}",
            "<where>  ${commonWhere} </where>",  
        "</script>" 
        })       
    int getCount(
                @Param("queryObj") Object objForQuery
                ,@Param("tblName") String tblName
                ,@Param("commonWhere") String commonWhere
                );
    @Select({ 
        "<script> ",
            "select   ${colList} from ${tblName} ",
            "<where>  ${commonWhere}  </where> ", 
            " order by create_time desc  limit #{num,jdbcType=INTEGER} ,#{size,jdbcType=INTEGER} ",
        "</script>" 
        })       
    List<Map<String, Object>> getObjByPage(
                @Param("queryObj") Object objForQuery
                ,@Param("colList") String colList
                ,@Param("tblName") String tblName
                ,@Param("commonWhere") String commonWhere
                ,@Param("num") Integer pageNum
                ,@Param("size") Integer pageSize
                );
   
    //查询对象集合
    @Select({ 
            "<script> ",
                "select  ${colList} from ${tblName}",
                "<where>  ${commonWhere} </where>",  
            "</script>" 
            })
    List<Map<String, Object>> getObjList(
                                        @Param("queryObj") Object objForQuery
                                        ,@Param("colList") String colList
                                        ,@Param("tblName") String tblName
                                        ,@Param("commonWhere") String commonWhere
                                            );
    // 查询对象,包含,通过in
    @Select({ 
        "<script> ",
            "select  ${colList} from ${tblName}",
            "<where>  ${commonWhere} ",
            "<if test = 'itemList != null and itemList.size() > 0'> AND `${inCol}` IN " ,
            "    <foreach collection='itemList' item='item' index='index' open='(' separator=',' close=')'> " ,
            "        #{item,jdbcType=${inColType}}   " ,
            "    </foreach> " ,
            "</if>" ,
            "</where>",  
        "</script>" 
        })
     <E> List<Map<String, Object>> getObjListUseIn(
             @Param("queryObj") Object objForQuery
             ,@Param("colList") String colList
             ,@Param("tblName") String tblName
             ,@Param("commonWhere") String commonWhere
             ,@Param("itemList") List<E> itemList
             ,@Param("inCol") String inCol
             ,@Param("inColType") String inColType
             );       

    @Update({   "<script> update ${tblName} <set> ${commonSet} </set>  ",
                "<where>  ${commonWhere} ",
                "<if test = 'itemList != null and itemList.size() > 0'> AND `${inCol}` IN " ,
                "    <foreach collection='itemList' item='item' index='index' open='(' separator=',' close=')'> " ,
                "        #{item,jdbcType=${inColType}}   " ,
                "    </foreach> " ,
                "</if>" ,
                "</where>",  
               "</script>" 
    })
    <E> int updateObjUseIn(
             @Param("item") Object objForUpdate
            ,@Param("queryObj") Object objForQuery
            ,@Param("commonSet") String commonSet
            ,@Param("commonWhere") String commonWhere
            ,@Param("tblName") String tblName
            ,@Param("itemList") List<E> itemList
            ,@Param("inCol") String inCol
            ,@Param("inColType") String inColType
            );
    
    @Update({ "<script> update ${tblName} <set> ${commonSet} </set> <where> ${commonWhere} </where> </script>"})
    int updateObj(
             @Param("item") Object objForUpdate
            ,@Param("queryObj") Object objForQuery
            ,@Param("commonSet") String commonSet
            ,@Param("commonWhere") String commonWhere
            ,@Param("tblName") String tblName
            );
    
    // update t set id=1,name=null,age=null where id=1 and name is null and age is null
    @Update({ "<script> update ${tblName} <set> ${commonSetAll} </set> <where> ${commonWhereAll} </where> </script>"})
    int updateObjPreStateCheck(
             @Param("item") Object objForUpdate
            ,@Param("queryObj") Object objForQuery
            ,@Param("commonSetAll") String commonSetAll
            ,@Param("commonWhereAll") String commonWhereAll
            ,@Param("tblName") String tblName
            );
}
CommonMapper
/*
* Title: ObjPage.java
* Description: 
* Copyright: Copyright (c) 2019
* Company: fmsh
* @author wanglifeng
*/
package cn.com.fmsh.nfcos.sapo.biz.database.dao;

import java.util.*;

/**
 * Title: ObjPage Description:
 * 
 * @author wanglifeng
 * @param <T> 数据库表model对应的实体类
 */
public class ObjPage<T> {

    private int total;
    private List<T> pageList;

    public int getTotal() {
        return total;
    }

    public void setTotal(int total) {
        this.total = total;
    }

    public List<T> getPageList() {
        return pageList;
    }

    public void setPageList(List<T> pageList) {
        this.pageList = pageList;
    }
}
ObjPage

 


本文来自博客园,作者:wanglifeng,转载请注明原文链接:https://www.cnblogs.com/wanglifeng717/p/16219565.html

 

posted @ 2022-05-03 22:07  王李峰  阅读(1024)  评论(0编辑  收藏  举报