此类根据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);
}
}

MyBatis SQL 生成方法 增删改查的更多相关文章

  1. 使用java对sql server进行增删改查

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import ...

  2. javascript生成表格增删改查 JavaScript动态改变表格单元格内容 动态生成表格 JS获取表格任意单元格 javascript如何动态删除表格某一行

    jsp页面表格布局Html代码 <body onload="show()"> <center> <input type="text" ...

  3. MyBatis学习系列二——增删改查

    目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring 数据库的经典操作:增删改查. 在这一章我们主要说明一下简单的查询和增删改, ...

  4. 四种简单的sql语句(增删改查语句)

    四种简单的sql语句(增删改查语句) 一.插入语句 insert into [table] ([column],[column],[column]) values(?,?,?) 二.删除语句 dele ...

  5. dml语句就是你常写的sql语句,增删改查

    dml语句就是你常写的sql语句,增删改查

  6. Mybatis实现数据的增删改查

    Mybatis实现数据的增删改查 1.项目结构(使用maven创建项目) 2.App.java package com.GetcharZp.MyBatisStudy; import java.io.I ...

  7. Mybatis实现部门表增删改查以及排序

    废话不说,直接开门见山! 需要在WebContent下的lib下导入两个包 mybatis-3.2.5.jar ojdbc6.jar package com.xdl.entity; import ja ...

  8. Mybatis(3) 映射文件-增删改查

    映射文件: 映射文件是根据数据库模型生成的编写sql脚本xml文件, mapper标签中namespace属性值为对应模型实体类的全类名. <?xml version="1.0&quo ...

  9. MyBatis学习--简单的增删改查

    jdbc程序 在学习MyBatis的时候先简单了解下JDBC编程的方式,我们以一个简单的查询为例,使用JDBC编程,如下: Public static void main(String[] args) ...

随机推荐

  1. hdu 4272 LianLianKan 状态压缩

      LianLianKan Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  2. java中JSONObject与JSONArray的使用

    JSONObject与JSONArray 最近在学习过程中用到了稍微复杂点的json数据需要将json数据解析出来,这里就截取一部分作为例子 1.JSONObject介绍 JSONObject-lib ...

  3. 自动添加需要编译的源文件Android.mk模板

    自动添加需要编译的源文件列表 添加第三方静态库.动态库的依赖   假设我们的项目依赖 libmath.a, libjson.a, libffmpeg.so 这几个第三方库文件,项目包含如下几个模块:a ...

  4. 解决pip安装模块报错Cannot fetch index base URL http://pypi.python.org/simple/

    产生这个问题的原因呢和github一样,因为他们用的cdn被墙.经小伙伴反馈,解决办法如下. 通过指定国内镜像源来安装: pip --trusted-host 镜像源 install 模块名 -i 镜 ...

  5. winform 的 checklistbox动态绑定并选中值

    绑定的代码:这里绑定的是一个泛型 BLL.PowerBLL powerbll = new BLL.PowerBLL(); checkpower.DataSource = powerbll.GetAll ...

  6. input框限制0开头的数字(0除外)

    用到parseInt() 函数 parseInt() 函数可解析一个字符串,并返回一个整数 提示和注释 注释:只有字符串中的第一个数字会被返回. 注释:开头和结尾的空格是允许的. 提示:如果字符串的第 ...

  7. 分享一个编译期输出TODO,FIXME列表的宏

    效果,双击能跳到相应位置: >------ Build started: Project: TestVS2013, Configuration: Debug Win32 ------ > ...

  8. nth-child 和 nth-of-type 的区别

    css3中有两个新的选择器可以选择父元素下对应的子元素,一个是:nth-child 另一个是:nth-of-type,它们2个的区别是: nth-of-type为什么要叫:nth-of-type?因为 ...

  9. 使用IDEA工具整合mybatis时使用@Resource和@Autowired自动注解bean时会显示红色问题的解决办法

    使用IDEA工具整合mybatis时使用@Resource和@Autowired自动注解bean时会显示红色问题的解决办法 idea中springboot整合mybatis时,通过@Autowired ...

  10. 导出网页中的table到excel

    导出网页中的table到excel的两种简便方法: 1. 纯 JavaScript 方法,缺点只支持IE浏览器 var elTable = document.getElementById(" ...