此类根据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. 手机CPU知识扫盲:谈谈手机CPU架构与原理

    CPU是手机上面最复杂,最贵的Soc(芯片),担任的也是手机中大脑的位置,是手机跑分性能的决定性硬件.智能手机发展到今天,各大手机CPU厂商也从春秋战国逐渐到了现在四国鼎立的时代(高通,MTK,三星, ...

  2. Java中String的split()方法的一些疑问和试验

    http://tjuking.iteye.com/blog/1507855 和我想的还是不大一样,因为不知道源码也不知道具体是怎么实现的,我的理解如下: 当字符串只包含分隔符时,返回数组没有元素:当字 ...

  3. JNDI提供了一种统一的方式,可以用在网络上查找和访问服务

    JNDI提供了一种统一的方式,可以用在网络上查找和访问服务.通过指定一个资源名称,该名称对应于数据库或命名服务中的一个记录,同时返回数据库连接建立所必须的信息. JNDI主要有两部分组成:应用程序编程 ...

  4. form表单提交方式

    form表单提交方式总结一下: 一.利用submit按钮实现提交,当点击submit按钮时,触发onclick事件,由JavaScript里函数判断输入内容是否为空,如果为空,返回false, 不提交 ...

  5. python 爬虫1 Urllib库的基本使用

    1.简单使用 import urllib2 response = urllib2.urlopen("http://www.baidu.com") print response.re ...

  6. Unity3D学习笔记——UIScrollBar和UIScrollView使用

    UIScrollBar和UIScrollView结合使用效果图如下: 一:使用步骤  1.创建一个UIScrollView   2.然后创建一个UIScrollBar 3.打开UIScrollView ...

  7. 水仙花数-python

    题目: 求999以内的水仙花数? 分析: 如果一个3位数等于其各位数字的立方和,则称这个数为水仙花数. 例如:1^3 + 5^3+ 3^3 = 153,因此153就是一个水仙花数 我们需计算出153的 ...

  8. Caffe模型读取

    caffe模型最终保存使用过的protobuf形式,将一个已经训练好的caffe模型读取出来,可以参考如下: 1,包含的头文件: #include <google/protobuf/io/cod ...

  9. Android OpenCV图像转换

    1.Mat存储到本地: public void saveMatData(Mat mat) { File fileDir = new File(Environment.getExternalStorag ...

  10. react native的环境搭建中常见问题

    搭建完成android的环境,我们就可以继续我们的react native环境的搭建了. 当然,按照fb的安装流程来完成rn的搭建. http://facebook.github.io/react-n ...