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);
}
}
MyBatis SQL 生成方法 增删改查的更多相关文章
- 使用java对sql server进行增删改查
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import ...
- javascript生成表格增删改查 JavaScript动态改变表格单元格内容 动态生成表格 JS获取表格任意单元格 javascript如何动态删除表格某一行
jsp页面表格布局Html代码 <body onload="show()"> <center> <input type="text" ...
- MyBatis学习系列二——增删改查
目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring 数据库的经典操作:增删改查. 在这一章我们主要说明一下简单的查询和增删改, ...
- 四种简单的sql语句(增删改查语句)
四种简单的sql语句(增删改查语句) 一.插入语句 insert into [table] ([column],[column],[column]) values(?,?,?) 二.删除语句 dele ...
- dml语句就是你常写的sql语句,增删改查
dml语句就是你常写的sql语句,增删改查
- Mybatis实现数据的增删改查
Mybatis实现数据的增删改查 1.项目结构(使用maven创建项目) 2.App.java package com.GetcharZp.MyBatisStudy; import java.io.I ...
- Mybatis实现部门表增删改查以及排序
废话不说,直接开门见山! 需要在WebContent下的lib下导入两个包 mybatis-3.2.5.jar ojdbc6.jar package com.xdl.entity; import ja ...
- Mybatis(3) 映射文件-增删改查
映射文件: 映射文件是根据数据库模型生成的编写sql脚本xml文件, mapper标签中namespace属性值为对应模型实体类的全类名. <?xml version="1.0&quo ...
- MyBatis学习--简单的增删改查
jdbc程序 在学习MyBatis的时候先简单了解下JDBC编程的方式,我们以一个简单的查询为例,使用JDBC编程,如下: Public static void main(String[] args) ...
随机推荐
- hdu 4272 LianLianKan 状态压缩
LianLianKan Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- java中JSONObject与JSONArray的使用
JSONObject与JSONArray 最近在学习过程中用到了稍微复杂点的json数据需要将json数据解析出来,这里就截取一部分作为例子 1.JSONObject介绍 JSONObject-lib ...
- 自动添加需要编译的源文件Android.mk模板
自动添加需要编译的源文件列表 添加第三方静态库.动态库的依赖 假设我们的项目依赖 libmath.a, libjson.a, libffmpeg.so 这几个第三方库文件,项目包含如下几个模块:a ...
- 解决pip安装模块报错Cannot fetch index base URL http://pypi.python.org/simple/
产生这个问题的原因呢和github一样,因为他们用的cdn被墙.经小伙伴反馈,解决办法如下. 通过指定国内镜像源来安装: pip --trusted-host 镜像源 install 模块名 -i 镜 ...
- winform 的 checklistbox动态绑定并选中值
绑定的代码:这里绑定的是一个泛型 BLL.PowerBLL powerbll = new BLL.PowerBLL(); checkpower.DataSource = powerbll.GetAll ...
- input框限制0开头的数字(0除外)
用到parseInt() 函数 parseInt() 函数可解析一个字符串,并返回一个整数 提示和注释 注释:只有字符串中的第一个数字会被返回. 注释:开头和结尾的空格是允许的. 提示:如果字符串的第 ...
- 分享一个编译期输出TODO,FIXME列表的宏
效果,双击能跳到相应位置: >------ Build started: Project: TestVS2013, Configuration: Debug Win32 ------ > ...
- nth-child 和 nth-of-type 的区别
css3中有两个新的选择器可以选择父元素下对应的子元素,一个是:nth-child 另一个是:nth-of-type,它们2个的区别是: nth-of-type为什么要叫:nth-of-type?因为 ...
- 使用IDEA工具整合mybatis时使用@Resource和@Autowired自动注解bean时会显示红色问题的解决办法
使用IDEA工具整合mybatis时使用@Resource和@Autowired自动注解bean时会显示红色问题的解决办法 idea中springboot整合mybatis时,通过@Autowired ...
- 导出网页中的table到excel
导出网页中的table到excel的两种简便方法: 1. 纯 JavaScript 方法,缺点只支持IE浏览器 var elTable = document.getElementById(" ...