此类根据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. ServletContext与Web应用以及Spring容器启动

    一.ServletContext对象获取Demo Servlet容器在启动时会加载Web应用,并为每个Web应用创建唯一的ServletContext对象. 可以把ServletContext看作一个 ...

  2. Trees on the level UVA - 122 复习二叉树建立过程,bfs,queue,strchr,sscanf的使用。

    Trees are fundamental in many branches of computer science (Pun definitely intended). Current state- ...

  3. View拖拽 自定义绑定view拖拽的工具类

    由于工作需求,需要用到这种处理方法所以我就写了这个 废话不多说先看效果图 接下来就看代码吧 DragDropManager import android.app.Activity; import an ...

  4. Eclipse Java 构建路径

    Eclipse Java 构建路径 设置 Java 构建路径 Java构建路径用于在编译Java项目时找到依赖的类,包括以下几项: 源码包 项目相关的 jar 包及类文件 项目引用的的类库 我们可以通 ...

  5. 没有Promise的时候自己处理复合异步请求

    function getList(options){ $.ajax(success:funciton(){ if(options.callback) options.callback.call(); ...

  6. WPF的本质:数据和行为

    如果自己来做一个UI框架,我们会首先关注哪些方面?我想UI框架主要处理的一定包括两个主要层次的内容,一个是数据展现,另一个就是数据操作,所以UI框架必须能够接收各种不同的数据并通过UI界面展现出来,然 ...

  7. Android获取网络类型

    public static final String NETWORK_CLASS_UNKNOWN = "unknown"; public static final String N ...

  8. POJ 1848 Tree

    Tree Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 3506   Accepted: 1204 Description ...

  9. Android中android:layout_alignParentBottom标签不生效

    Android中一个奇怪的问题 Android 6.0中android:layout_alignParentBottom设置后不生效. 详见:https://code.google.com/p/and ...

  10. Android UI开发第二十七篇——实现左右划出菜单

    年前就想写左右滑动菜单,苦于没有时间,一直拖到现在,这篇代码实现参考了网上流行的SlidingMenu,使用的FrameLayout布局,不是扩展的HorizontalScrollView. 程序中自 ...