此类根据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. Vim使用技巧(4) -- 命令行模式 【持续更新】

    基本保存,退出,帮助 :help //帮助 :w //保存 :q //退出 :wq //保存后退出 :q! //强制不保存退出 %s/a/b/g //将当前文件的a全部替换成b /abc //正向查找 ...

  2. CentOS 7 换yum源

    备份原来的源 sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bk 下载阿里源 $ cd /et ...

  3. Android 缓存详解目录

    1.http://www.cnblogs.com/lzrabbit/p/3734850.html 2.

  4. C++ 虚析构(virtual destructor)原理

    注意:本文仅为个人理解,可能有误! 先看一段代码: #include <iostream> using namespace std; class CBase{ public: CBase( ...

  5. dict字典使用方法

    keys(). values() .items()方法 1.返回格式 dict_keys. dict_values 和 dict_items 2.常用于循环.迭代 for key in dict_te ...

  6. CodeIgniter框架——nginx下的配置

    odeigniter(CI)是一个轻量型的PHP优秀框架,但是它是在apache服务器下开发的,在nginx下需要特别的配置才可以使用. 对nginx的配置如下: server { listen 80 ...

  7. Sass mixin 使用css border属性画三角形

    To be finished. //triangle@mixin css-triangle ($direction: "down", $size: 20px, $color: #0 ...

  8. 【BZOJ3730】震波 动态树分治+线段树

    [BZOJ3730]震波 Description 在一片土地上有N个城市,通过N-1条无向边互相连接,形成一棵树的结构,相邻两个城市的距离为1,其中第i个城市的价值为value[i].不幸的是,这片土 ...

  9. 【转】在服务器上排除问题的头五分钟&常用命令

    转自:https://blog.csdn.net/l821133235/article/details/80103106(在服务器上排除问题的头五分钟) 遇到服务器故障,问题出现的原因很少可以一下就想 ...

  10. JQuery UI 入门

    1. JQuery UI 概述 1.1 JQuery UI 主要分为三部分: 交互部件(interactions):是一些与鼠标交互相关的内容; 小部件(widgets): 主要是一些页面的扩展; 效 ...