MyBatis SQL 生成方法 增刪改查


此類根據JAVA實體BEAN生成MYBATIS的接口SQL(mapper)

 

package com.sicdt.sicsign.bill.service.hessian;

import java.lang.reflect.Field;

import com.sicdt.sicsign.bill.service.entity.InvoiceEntity;

public class MyBatisSqlUtils {
    public static void main(String[] args) {
        String tableName = "T_INVOICE";
        Class<?> clazz = InvoiceEntity.class;
        
        System.out.println("主鍵查詢SQL:======================================");
        String idSql = MyBatisSqlUtils.selectSQLById(clazz, tableName);
        System.out.println("主鍵查詢SQL:    " + idSql);
        String idSqlHump = MyBatisSqlUtils.selectSQLByIdForHump(clazz, tableName);
        System.out.println("主鍵查詢SQL:    " + idSqlHump);
        
        System.out.println("主鍵集合查詢SQL:======================================");
        String idsSql = MyBatisSqlUtils.selectSQLByIds(clazz, tableName);
        System.out.println("主鍵集合查詢SQL:    " + idsSql);
        String idsSqlHump = MyBatisSqlUtils.selectSQLByIdsForHump(clazz, tableName);
        System.out.println("主鍵集合查詢SQL:    " + idsSqlHump);
        
        System.out.println("查詢SQL:======================================");
        String selectSql = MyBatisSqlUtils.selectSQL(clazz,tableName);
        System.out.println("查詢SQL:    " + selectSql);
        String selectSqlHump = MyBatisSqlUtils.selectSQLForHump(clazz,tableName);
        System.out.println("查詢SQL:    " + selectSqlHump);
        
        System.out.println("插入SQL:======================================");
        String insertSql = MyBatisSqlUtils.insertSql(clazz, tableName);
        System.out.println("插入SQL:    "+insertSql);
        String insertSqlHump = MyBatisSqlUtils.insertSqlForHump(clazz, tableName);
        System.out.println("插入SQL:    "+insertSqlHump);
        
        System.out.println("刪除SQL:======================================");
        String deleteSql = MyBatisSqlUtils.deleteSqlById(clazz, tableName);
        System.out.println("刪除SQL:    "+deleteSql);
        String deleteSqlHump = MyBatisSqlUtils.deleteSqlByIdForHump(clazz, tableName);
        System.out.println("刪除SQL:    "+deleteSqlHump);
        
        System.out.println("修改SQL:======================================");
        String updateSql = MyBatisSqlUtils.updateSql(clazz, tableName);
        System.out.println("修改SQL:    "+updateSql);
        String updateSqlHump = MyBatisSqlUtils.updateSqlForHump(clazz, tableName);
        System.out.println("修改SQL:    "+updateSqlHump);
        
        System.out.println("批量插入SQL:======================================");
        String batchInsertSql = MyBatisSqlUtils.batchInsertSql(clazz, tableName);
        System.out.println("批量插入SQL:"+batchInsertSql);
        String batchInsertSqlHump = MyBatisSqlUtils.batchInsertSqlForHump(clazz, tableName);
        System.out.println("批量插入SQL:"+batchInsertSqlHump);
        
        System.out.println("批量更新SQL:======================================");
        String batchUpdateSql = MyBatisSqlUtils.batchUpdateSql(clazz, tableName);
        System.out.println("批量更新SQL:"+batchUpdateSql);
        String batchUpdateSqlHump = MyBatisSqlUtils.batchUpdateSqlForHump(clazz, tableName);
        System.out.println("批量更新SQL:"+batchUpdateSqlHump);
        
        System.out.println("批量刪除SQL(主鍵):======================================");
        String batchDeleteSqlByIds = MyBatisSqlUtils.batchDeleteSqlByIds(clazz, tableName);
        System.out.println("批量刪除SQL(主鍵):"+batchDeleteSqlByIds);
        String batchDeleteSqlHumpByIds = MyBatisSqlUtils.batchDeleteSqlByIdsForHump(clazz, tableName);
        System.out.println("批量刪除SQL(主鍵):"+batchDeleteSqlHumpByIds);
        
        System.out.println("批量刪除SQL(實體):======================================");
        String batchDeleteSql = MyBatisSqlUtils.batchDeleteSql(clazz, tableName);
        System.out.println("批量刪除SQL(實體):"+batchDeleteSql);
        String batchDeleteSqlHump = MyBatisSqlUtils.batchDeleteSqlForHump(clazz, tableName);
        System.out.println("批量刪除SQL(實體):"+batchDeleteSqlHump);
    }
    
    /**
     * <br>描 述: 生成查詢SQL(實體屬性與數據庫一致)主鍵查詢
     * <br>作 者: shizhenwei 
     * @param clazz Object.class
     * @param tableName 表名稱
     * @return
     */
    public static String selectSQLById(Class<?> clazz,String tableName){
        return selectSQLById(clazz, tableName, false);
    }
    
    /**
     * <br>描 述: 生成查詢SQL(實體屬性為駝峰)主鍵查詢
     * <br>作 者: shizhenwei 
     * @param clazz Object.class
     * @param tableName 表名稱
     * @return
     */
    public static String selectSQLByIdForHump(Class<?> clazz,String tableName){
        return selectSQLById(clazz, tableName, true);
    }
    
    /**
     * <br>描 述: 生成查詢SQL(實體屬性與數據庫一致)主鍵集合查詢
     * <br>作 者: shizhenwei 
     * @param clazz Object.class
     * @param tableName 表名稱
     * @return
     */
    public static String selectSQLByIds(Class<?> clazz,String tableName){
        return selectSQLByIds(clazz, tableName, false);
    }
    
    
    /**
     * <br>描 述: 生成查詢SQL(實體屬性為駝峰)主鍵集合查詢
     * <br>作 者: shizhenwei 
     * @param clazz Object.class
     * @param tableName 表名稱
     * @return
     */
    public static String selectSQLByIdsForHump(Class<?> clazz,String tableName){
        return selectSQLByIds(clazz, tableName, true);
    }
    
    /**
     * <br>描 述: 生成查詢SQL(實體屬性與數據庫一致)條件查詢
     * <br>作 者: shizhenwei 
     * @param clazz Object.class
     * @param tableName 表名稱
     * @return
     */
    public static String selectSQL(Class<?> clazz,String tableName){
        return selectSQL(clazz, tableName, false);
    }
    
    /**
     * <br>描 述: 生成查詢SQL(實體屬性為駝峰)條件查詢
     * <br>作 者: shizhenwei 
     * @param clazz Object.class
     * @param tableName 表名稱
     * @return
     */
    public static String selectSQLForHump(Class<?> clazz,String tableName){
        return selectSQL(clazz, tableName, true);
    }
    
    /**
     * <br>描 述: 生成插入SQL(實體屬性與數據庫一致)
     * <br>作 者: shizhenwei 
     * @param clazz Object.class
     * @param tableName 表名稱
     * @return
     */
    public static String  insertSql(Class<?> clazz,String tableName){
        return insertSql(clazz, tableName, false);
    }
    
    /**
     * <br>描 述: 生成插入SQL(實體屬性為駝峰)
     * <br>作 者: shizhenwei 
     * @param clazz Object.class
     * @param tableName 表名稱
     * @return
     */
    public static String  insertSqlForHump(Class<?> clazz,String tableName){
        return insertSql(clazz, tableName, true);
    }

    /**
     * <br>描 述: 生成更新Sql(實體屬性與數據庫一致)
     * <br>作 者: shizhenwei 
     * @param clazz Object.class
     * @param tableName 表名稱
     * @return
     */
    public static String updateSql(Class<?> clazz,String tableName){
        return updateSql(clazz, tableName, false);
    }
    
    /**
     * <br>描 述: 生成更新SQL(實體屬性為駝峰)
     * <br>作 者: shizhenwei 
     * @param clazz Object.class
     * @param tableName 表名稱
     * @return
     */
    public static String updateSqlForHump(Class<?> clazz,String tableName){
        return updateSql(clazz, tableName, true);
    }
    
    
    /**
     * <br>描 述: 生成刪除SQL(實體屬性與數據庫一致)主鍵刪除
     * <br>作 者: shizhenwei 
     * @param clazz Object.class
     * @param tableName 表名稱
     * @return
     */
    public static String deleteSqlById(Class<?> clazz,String tableName){
        return deleteSqlById(clazz, tableName, false);
    }
    
    /**
     * <br>描 述: 生成刪除SQL(實體屬性為駝峰)主鍵刪除
     * <br>作 者: shizhenwei 
     * @param clazz Object.class
     * @param tableName 表名稱
     * @return
     */
    public static String deleteSqlByIdForHump(Class<?> clazz,String tableName){
        return deleteSqlById(clazz, tableName, true);
    }
    
    /**
     * <br>描 述: 生成刪除SQL(實體屬性與數據庫一致)實體刪除
     * <br>作 者: shizhenwei 
     * @param clazz Object.class
     * @param tableName 表名稱
     * @return
     */
    public static String deleteSql(Class<?> clazz,String tableName){
        return deleteSqlById(clazz, tableName, false);
    }
    
    /**
     * <br>描 述: 生成刪除SQL(實體屬性為駝峰)實體刪除
     * <br>作 者: shizhenwei 
     * @param clazz Object.class
     * @param tableName 表名稱
     * @return
     */
    public static String deleteSqlForHump(Class<?> clazz,String tableName){
        return deleteSqlById(clazz, tableName, true);
    }
    
    /**
     * <br>描 述: 生成批量插入SQL(實體屬性與數據庫一致)
     * <br>作 者: shizhenwei 
     * @param clazz Object.class
     * @param tableName 表名稱
     * @return
     */
    public static String batchInsertSql(Class<?> clazz,String tableName){
        return batchInsertSql(clazz, tableName, false);
    }
    
    /**
     * <br>描 述: 生成批量插入SQL(實體屬性為駝峰)
     * <br>作 者: shizhenwei 
     * @param clazz Object.class
     * @param tableName 表名稱
     * @return
     */
    public static String batchInsertSqlForHump(Class<?> clazz,String tableName){
        return batchInsertSql(clazz, tableName, true);
    }
    
    /**
     * <br>描 述: 生成批量更新SQL(實體屬性與數據庫一致)
     * <br>作 者: shizhenwei 
     * @param clazz Object.class
     * @param tableName 表名稱
     * @return
     */
    public static String batchUpdateSql(Class<?> clazz,String tableName){
        return batchUpdateSql(clazz, tableName, false);
    }
    
    /**
     * <br>描 述: 生成批量更新SQL(實體屬性為駝峰)
     * <br>作 者: shizhenwei 
     * @param clazz Object.class
     * @param tableName 表名稱
     * @return
     */
    public static String batchUpdateSqlForHump(Class<?> clazz,String tableName){
        return batchUpdateSql(clazz, tableName, true);
    }
    
    /**
     * <br>描 述: 生成批量刪除SQL(實體屬性與數據庫一致)主鍵刪除
     * <br>作 者: shizhenwei 
     * @param clazz Object.class
     * @param tableName 表名稱
     * @return
     */
    public static String batchDeleteSqlByIds(Class<?> clazz,String tableName){
        return batchDeleteSqlByIds(clazz, tableName, false);
    }
    
    /**
     * <br>描 述: 生成批量刪除SQL(實體屬性為駝峰)實體刪除
     * <br>作 者: shizhenwei 
     * @param clazz Object.class
     * @param tableName 表名稱
     * @return
     */
    public static String batchDeleteSqlByIdsForHump(Class<?> clazz,String tableName){
        return batchDeleteSqlByIds(clazz, tableName, true);
    }
    
    /**
     * <br>描 述: 生成批量刪除SQL(實體屬性與數據庫一致)主鍵刪除
     * <br>作 者: shizhenwei 
     * @param clazz Object.class
     * @param tableName 表名稱
     * @return
     */
    public static String batchDeleteSql(Class<?> clazz,String tableName){
        return batchDeleteSql(clazz, tableName, false);
    }
    
    /**
     * <br>描 述: 生成批量刪除SQL(實體屬性為駝峰)實體刪除
     * <br>作 者: shizhenwei 
     * @param clazz Object.class
     * @param tableName 表名稱
     * @return
     */
    public static String batchDeleteSqlForHump(Class<?> clazz,String tableName){
        return batchDeleteSql(clazz, tableName, true);
    }
    
    
    /*
     * 生成查詢SQL 主鍵查詢
     */
    private static String selectSQLById(Class<?> clazz,String tableName,boolean isHump){
        String select = "@Select(\"SELECT";
        Field[] fields = clazz.getDeclaredFields();
        select += getSelectColumns(fields,isHump)
                +" FROM "+tableName
                +" WHERE "+getSelectColumn(fields[0],isHump)+" = "+getValueColumn(fields[0])+"\")";
        return select;
    }
    
    /*
     * 生成查詢SQL主鍵集合查詢
     */
    private static String selectSQLByIds(Class<?> clazz,String tableName,boolean isHump){
        String select = "@Select(\"<script>\""
                    +"\r+\"SELECT";
        Field[] fields = clazz.getDeclaredFields();
        select += getSelectColumns(fields,isHump)
                +" FROM "+tableName
                +" WHERE "+getSelectColumn(fields[0],isHump)+" IN \""
                +"\r+\"<foreach collection='primaryKeys' item='"+fields[0].getName()+"' index='index' open='(' close=')' separator=','>\""
                +"\r+\""+getValueColumn(fields[0])+"\""
                +"\r+\"</foreach>\""
                +"\r+\"</script>\")";
        return select;
    }
    
    /*
     * 生成查詢SQL 條件查詢
     */
    private static String selectSQL(Class<?> clazz,String tableName,boolean isHump){
        //接口引用加\" 生成雙引號
        String select = "@Select(\"<script>\""
                +"\r+\"SELECT";
        Field[] fields = clazz.getDeclaredFields();
        select += getSelectColumns(fields,isHump)
                +" FROM "+tableName+"\""
                +"\r+\"<trim prefix='WHERE' prefixOverrides='and|or'>\"";
        for(Field field : fields){
            if(isHump){
                select += "\r+\"<if test='"+field.getName()+" != null'> AND "+getSelectColumn(field,isHump)+" = "+getValueColumn(field)+"</if>\"";
            }else{
                select += "\r+\"<if test='"+field.getName()+" != null'> AND "+field.getName()+" = "+getValueColumn(field)+"</if>\"";
            }
        }
        select += "\r+\"</trim>\""
                +"\r+\"</script>\")";
        return select;
    }
    
    
    /*
     * 生成插入SQL
     */
    private static String  insertSql(Class<?> clazz,String tableName,boolean isHump){
        String insert = "@Insert(\"INSERT INTO "+tableName;
        Field[] fields = clazz.getDeclaredFields();
        insert += " ("+getInsertColumns(fields,isHump)+")"
                +" VALUES ("+getValueColumns(fields,false)+")"
                +"\")";
        return insert;
    }
    
    /*
     * 生成更新SQL
     */
    private static String updateSql(Class<?> clazz,String tableName,boolean isHump){
        Field[] fields = clazz.getDeclaredFields();
        String idColumn;
        if(isHump){
            idColumn = getSelectColumn(fields[0],isHump);
        }else{
            idColumn = fields[0].getName();
        }
        String idVal = getValueColumn(fields[0]);
        String update = "@Update(\"<script>\""
                        +"\r+\"UPDATE "+tableName+"\""
                        +"\r+\"<trim prefix='set' suffixOverrides=',' suffix='WHERE "+idColumn+"="+idVal+"'>\"";
        for(int i=1; i<fields.length; i++){
            Field field = fields[i];
            if(isHump){
                update += "\r+\"<if test='"+field.getName()+"!=null'>"+getSelectColumn(field,isHump)+"="+getValueColumn(field)+",</if>\"";
            }else{
                update += "\r+\"<if test='"+field.getName()+"!=null'>"+field.getName()+"="+getValueColumn(field)+",</if>\"";
            }
        }
        update += "\r+\"</trim>\""
                +"\r+\"</script>\")";
        return update;
    }
    
    /*
     * 生成刪除SQL
     */
    private static String deleteSqlById(Class<?> clazz,String tableName,boolean isHump){
        String delete = "@Delete(\"DELETE FROM "+tableName+" WHERE ";
        Field field = clazz.getDeclaredFields()[0];
        String column = getSelectColumn(field,isHump);
        delete += column+" = "+getValueColumn(field)+"\")";
        return delete;
    }
    
    
    /*
     * 生成批量插入SQL
     */
    private static String  batchInsertSql(Class<?> clazz,String tableName,boolean isHump){
        String insert = "@Insert(\"<script>\""
                +"\r+\"INSERT INTO "+tableName+"\"";
        Field[] fields = clazz.getDeclaredFields();
        insert += "\r+\"("+getInsertColumns(fields,isHump)+")\""
                +"\r+\"VALUES \""
                +"\r+\"<foreach collection='list' item='item' index='index' separator=','>\""
                +"\r+\"("+getValueColumns(fields,true)+")\""
                +"\r+\"</foreach>\""
                +"\r+\"</script>\")";
        return insert;
    }
    
    /*
     * 生成批量更新SQL
     */
    private static String batchUpdateSql(Class<?> clazz,String tableName,boolean isHump){
        Field[] fields = clazz.getDeclaredFields();
        String idColumn;
        if(isHump){
            idColumn = getSelectColumn(fields[0],isHump);
        }else{
            idColumn = fields[0].getName();
        }
        String idVal = getValueColumn(fields[0],true);
        String update = "@Update(\"<script>\""
                        +"\r+\"<foreach collection='list' item='item' index='index' open='' close='' separator=';'>\""
                        +"\r+\"UPDATE "+tableName+"\""
                        +"\r+\"<trim prefix='set' suffixOverrides=',' suffix='WHERE "+idColumn+"="+idVal+"'>\"";
        for(int i=1; i<fields.length; i++){
            Field field = fields[i];
            if(isHump){
                update += "\r+\"<if test='item."+field.getName()+"!=null'>"+getSelectColumn(field,isHump)+"="+getValueColumn(field,true)+",</if>\"";
            }else{
                update += "\r+\"<if test='item."+field.getName()+"!=null'>"+field.getName()+"="+getValueColumn(field,true)+",</if>\"";
            }
        }
        update += "\r+\"</trim>\""
                +"\r+\"</foreach>\""
                +"\r+\"</script>\")";

        return update;
    }
    
    /*
     * 生成批量刪除SQL 主鍵刪除
     */
    private static String batchDeleteSqlByIds(Class<?> clazz,String tableName,boolean isHump){
        String delete = "@Delete(\"<script>\""
                +"\r+\"DELETE FROM "+tableName+" WHERE ";
        Field field = clazz.getDeclaredFields()[0];
        String column = getSelectColumn(field,isHump);
        delete += column+" IN \""
                +"\r+\"<foreach collection='primaryKeys' item='"+field.getName()+"' index='index' open='(' close=')' separator=','>\""
                +"\r+\""+getValueColumn(field)+"\""
                +"\r+\"</foreach>\""
                +"\r+\"</script>\")";
        return delete;
    }
    
    /*
     * 生成批量刪除SQL 實體刪除
     */
    private static String batchDeleteSql(Class<?> clazz,String tableName,boolean isHump){
        String delete = "@Delete(\"<script>\""
                +"\r+\"DELETE FROM "+tableName+" WHERE ";
        Field field = clazz.getDeclaredFields()[0];
        String column = getSelectColumn(field,isHump);
        delete += column+" in \""
                +"\r+\"<foreach collection='list' item='item' index='index' open='(' close=')' separator=','>\""
                +"\r+\""+getValueColumn(field,true)+"\""
                +"\r+\"</foreach>\""
                +"\r+\"</script>\")";
        return delete;
    }
    
    /*
     * 獲SELECT取列
     */
    private static String getSelectColumns(Field[] fields,boolean isHump){
        String  columns = "";
        if(isHump){
            for(Field field : fields){
                columns += " "+getSelectColumn(field, isHump) +" AS "+field.getName()+",";
            }
        }else{
            for(Field field : fields){
                columns+=" "+getSelectColumn(field, isHump)+" AS "+field.getName()+",";
            }
        }
        return columns.substring(0,columns.length()-1);
    }
    
    /*
     * 獲INSERT列
     */
    private static String getInsertColumns(Field[] fields,boolean isHump){
        String  columns = "";
        if(isHump){
            for(Field field : fields){
                columns += " "+getSelectColumn(field, isHump)+",";
            }
        }else{
            for(Field field : fields){
                columns+=" "+getSelectColumn(field, isHump)+",";
            }
        }
        return columns.substring(0,columns.length()-1).toUpperCase();
    }
    
    /*
     * 獲insert取列
     */
    private static String getValueColumns(Field[] fields,boolean isBatch){
        String columns = "";
        for(Field field : fields){
            columns+=" "+getValueColumn(field,isBatch)+",";
        }
        return columns.substring(0, columns.length()-1);
    }
    
    
    /*
     * 獲取單列
     */
    private static String getSelectColumn(Field field,boolean isHump){
        String fieldName = field.getName();
        String column = "";
        if(isHump){
            for(int i=0; i<fieldName.length(); i++){
                char ch = fieldName.charAt(i);
                if(Character.isUpperCase(ch)){
                    column += "_"+ch;
                }else{
                    column += ch;
                }
            }
        }else{
            column = fieldName;
        }
        return column.toUpperCase();
    }
    
    /*
     * 獲取單值列
     */
    private static String getValueColumn(Field field,boolean isBatch){
        if(isBatch){
            return "#{item."+field.getName()+"}";
        }else{
            return "#{"+field.getName()+"}";
        }
    }
    
    /*
     * 獲取單值列
     */
    private static String getValueColumn(Field field){
        return getValueColumn(field,false);
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM