Spring NamedParameterJdbcTemplate命名参数查询条件封装,
NamedParameterJdbcTemplate查询封装
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
©Copyright 蕃薯耀 2017年7月25日
http://fanshuyao.iteye.com/
由于在项目中想用Spring的NamedParameterJdbcTemplate,但又想写的sql查询简单一点,少一些,所以封装了Sql命名查询。使用此工具,主要是让where条件的查询及排序和分页简单点,现在使用的是mysql。
一、SqlBuffer查询对象封装(现在只是select语句的封装)
import java.util.HashMap;
import java.util.Map;
public class SqlBuffer {
/**
* 空格
*/
private final String SPACE = " ";
/**
* 冒号
*/
private final String COLON = ":";
/**
* 逗号,
*/
private final String COMMA = ",";
/**
* where关键字
*/
private final String WHERE_SQL = "WHERE";
/**
* order by 关键字
*/
private final String ORDER_BY_SQL = "ORDER BY";
/**
* limit关键字
*/
private final String LIMIT_SQL = "LIMIT";
/**
* where 1=1条件
*/
private final String WHERE_INIT = WHERE_SQL + " 1=1 ";
private final String LEFT_BRACKET = "(";
private final String RIGHT_BRACKET = ")";
/**
* 百分号%
*/
private final String PERCENT_SIGN = "%";
/**
* 单引号 '
*/
private final String SINGLE_QUOTE = "'";
private StringBuffer baseSql = new StringBuffer("");
private StringBuffer whereSql = new StringBuffer("");
private StringBuffer orderBySql = new StringBuffer("");
private StringBuffer limitSql = new StringBuffer("");
public Map<String, Object> paramsMap = new HashMap<String, Object>();
private int whereIndex = -1;
private int orderByIndex = -1;
private int limitIndex = -1;
private int offSize;
private int pageSize;
private boolean isNewStart = false;
private boolean isEndStart = false;
public SqlBuffer(){}
public SqlBuffer(String sql){
init(sql);
}
private int getWhereIndex(String sql){
if(sql != null){
return sql.indexOf(WHERE_SQL);
}
return -1;
}
private int getOrderByIndex(String sql){
if(sql != null){
return sql.indexOf(ORDER_BY_SQL);
}
return -1;
}
private int getLimitIndex(String sql){
if(sql != null){
return sql.indexOf(LIMIT_SQL);
}
return -1;
}
/**
* 判断有没有where查询语句,有则返回true
* @return
*/
private boolean hadWhereSql(){
if(this.whereIndex > -1){
return true;
}
return false;
}
/**
* 判断有没有order by查询语句,有则返回true
* @return
*/
private boolean hadOrderBySql(){
if(this.orderByIndex > -1){
return true;
}
return false;
}
/**
* 判断有没有limit查询语句,有则返回true
* @return
*/
private boolean hadLimitSql(){
if(this.limitIndex > -1){
return true;
}
return false;
}
/**
* 初始化操作
* @param sql
*/
private void init(String sql){
if(sql != null){
String sqlUpper = sql.trim().toUpperCase();
this.whereIndex = getWhereIndex(sqlUpper);
this.orderByIndex = getOrderByIndex(sqlUpper);
this.limitIndex = getLimitIndex(sqlUpper);
if(!hadWhereSql() && !hadOrderBySql() && !hadLimitSql()){
baseSql.append(sql);
}else{
if(hadWhereSql()){
baseSql.append(sql.substring(0, whereIndex));
}else if(!hadWhereSql() && hadOrderBySql()){
if(hadOrderBySql()){
baseSql.append(sql.substring(0, orderByIndex));
}
}else if(!hadWhereSql() && !hadOrderBySql() && hadLimitSql()){
baseSql.append(sql.substring(0, limitIndex));
}
}
int whereStartIndex = whereIndex + WHERE_SQL.length();//where条件不需要加where
if(hadWhereSql() && hadOrderBySql() && hadLimitSql()){
whereSql.append(sql.substring(whereStartIndex, orderByIndex));
orderBySql.append(sql.substring(orderByIndex, limitIndex));
limitSql.append(sql.substring(limitIndex));
}else if(hadWhereSql() && hadOrderBySql() && !hadLimitSql()){
whereSql.append(sql.substring(whereStartIndex, orderByIndex));
orderBySql.append(sql.substring(orderByIndex));
}else if(hadWhereSql() && !hadOrderBySql() && hadLimitSql()){
whereSql.append(sql.substring(whereStartIndex, limitIndex));
limitSql.append(sql.substring(limitIndex));
}else if(hadWhereSql() && !hadOrderBySql() && !hadLimitSql()){
whereSql.append(sql.substring(whereStartIndex));
}else if(!hadWhereSql() && hadOrderBySql() && hadLimitSql()){
orderBySql.append(sql.substring(orderByIndex, limitIndex));
limitSql.append(sql.substring(limitIndex));
}else if(!hadWhereSql() && hadOrderBySql() && !hadLimitSql()){
orderBySql.append(sql.substring(orderByIndex));
}else if(!hadWhereSql() && !hadOrderBySql() && hadLimitSql()){
limitSql.append(sql.substring(limitIndex));
}
}
}
/**
* and条件连接
* @param columnName 表的字段名称
* @param columnValue 查询字段名称对应的值
* <li>如果whereType为Null或者NotNull,该值可以为空</li>
* <li>如果whereType为IN,该值为List类型,如:Arrays.asList("aa", "bb")</li>
* @param whereType WhereType枚举,如like,>=
* @return SqlBuffer
*/
public SqlBuffer and(String columnName, Object columnValue, WhereType whereType){
return add(ConnectType.AND, columnName, columnValue, null, whereType);
}
/**
* or条件连接,使用columnName作为命名参数
* @param columnName 表的字段名称
* @param columnValue 查询字段名称对应的值
* <li>如果whereType为Null或者NotNull,该值可以为空</li>
* <li>如果whereType为IN,该值为List类型,如:Arrays.asList("aa", "bb")</li>
* @param whereType WhereType枚举,如like,>=
* @return SqlBuffer
*/
public SqlBuffer or(String columnName, Object columnValue, WhereType whereType){
return add(ConnectType.OR, columnName, columnValue, null, whereType);
}
/**
* 加上表字段不为空的判断
* <li>如columnName is not null</li>
* @param connectType ConnectType枚举
* @param columnName 表的字段名称
* @return SqlBuffer
*/
public SqlBuffer isNotNull(ConnectType connectType, String columnName){
return add(connectType, columnName, null, null, WhereType.NOT_NULL);
}
/**
* 加上表字段不为空的判断,使用And连接
* <li>如columnName is not null</li>
* @param columnName 表的字段名称
* @return SqlBuffer
*/
public SqlBuffer isNotNull(String columnName){
return add(ConnectType.AND, columnName, null, null, WhereType.NOT_NULL);
}
/**
* 加上表字段为空的判断
* <li>如columnName is null</li>
* @param connectType ConnectType枚举
* @param columnName 表的字段名称
* @return SqlBuffer
*/
public SqlBuffer isNull(ConnectType connectType, String columnName){
return add(connectType, columnName, null, null, WhereType.NULL);
}
/**
* 加上表字段为空的判断,使用And连接
* <li>如columnName is not null</li>
* @param columnName 表的字段名称
* @return SqlBuffer
*/
public SqlBuffer isNull(String columnName){
return add(ConnectType.AND, columnName, null, null, WhereType.NULL);
}
/**
* and条件连接,使用columnName作为命名参数
* @param columnName 表的字段名称
* @param columnValue 查询字段名称对应的值
* <li>如果whereType为Null或者NotNull,该值可以为空</li>
* <li>如果whereType为IN,该值为List类型</li>
* <li>如果whereType为IN,该值为List类型,如:Arrays.asList("aa", "bb")</li>
* @param placeholder 命名参数
* <li>如果为Null,则使用表的字段名称作为命名参数</li>
* @param whereType WhereType枚举,如like,>=
* @return SqlBuffer
*/
public SqlBuffer and(String columnName, Object columnValue, String placeholder, WhereType whereType){
if(StrUtils.isBlank(columnName)){
return this;
}
return add(ConnectType.AND, columnName, columnValue, placeholder, whereType);
}
/**
* or条件连接
* @param columnName 表的字段名称
* @param columnValue 查询字段名称对应的值
* <li>如果whereType为Null或者NotNull,该值可以为空</li>
* <li>如果whereType为IN,该值为List类型,如:Arrays.asList("aa", "bb")</li>
* @param placeholder 命名参数
* <li>如果为Null,则使用表的字段名称作为命名参数</li>
* @param whereType WhereType枚举,如like,>=
* @return SqlBuffer
*/
public SqlBuffer or(String columnName, Object columnValue, String placeholder, WhereType whereType){
if(StrUtils.isBlank(columnName)){
return this;
}
return add(ConnectType.OR, columnName, columnValue, placeholder, whereType);
}
/**
* 命名参数查询,使用columnName作为命名参数
* @param connectType ConnectType枚举
* @param columnName 表的字段名称
* @param columnValue 查询字段名称对应的值
* <li>如果whereType为Null或者NotNull,该值可以为空</li>
* <li>如果whereType为IN,该值为List类型,如:Arrays.asList("aa", "bb")</li>
* @param whereType WhereType枚举,如like,>=
* @return SqlBuffer
*/
public SqlBuffer add(ConnectType connectType, String columnName, Object columnValue, WhereType whereType){
return add(connectType, columnName, columnValue, null, whereType);
}
/**
* 命名参数查询
* @param connectType ConnectType枚举
* @param columnName 表的字段名称
* @param columnValue 查询字段名称对应的值
* <li>如果whereType为Null或者NotNull,该值可以为空</li>
* <li>如果whereType为IN,该值为List类型,如:Arrays.asList("aa", "bb")</li>
* @param placeholder 命名参数
* <li>如果为Null,则使用表的字段名称作为命名参数</li>
* @param whereType WhereType枚举,如like,>=
* @return SqlBuffer
*/
public SqlBuffer add(ConnectType connectType, String columnName, Object columnValue, String placeholder, WhereType whereType){
if(StrUtils.isBlank(columnName)){
return this;
}
this.whereSql.append(SPACE).append(connectType.getValue());
if(this.isNewStart){
this.whereSql.append(SPACE).append(LEFT_BRACKET);
this.isNewStart = false;
}
this.whereSql.append(SPACE).append(columnName);
//组装参数
if(StrUtils.isBlank(placeholder)){//命名参数为空,则使用字段名
placeholder = columnName;
}
if(WhereType.LIKE == whereType){
//LIKE '%' :username '%' ,:username 两边一定要有空格,如果没有空格,是查询不到数据的
this.whereSql.append(SPACE).append(whereType.getValue())
.append(SPACE).append(SINGLE_QUOTE).append(PERCENT_SIGN).append(SINGLE_QUOTE).append(SPACE)
.append(COLON).append(placeholder)
.append(SPACE).append(SINGLE_QUOTE).append(PERCENT_SIGN).append(SINGLE_QUOTE).append(SPACE);
this.getParamsMap().put(placeholder, columnValue);
// 这种方法是在值里放%,如 "%" + username + "%"
/*this.whereSql.append(SPACE).append(whereType.getValue())
.append(SPACE)
.append(COLON).append(placeholder);*/
}else if(WhereType.LIKE_LEFT == whereType){
this.whereSql.append(SPACE).append(whereType.getValue())
.append(SPACE).append(SINGLE_QUOTE).append(PERCENT_SIGN).append(SINGLE_QUOTE).append(SPACE)
.append(COLON).append(placeholder).append(SPACE);
this.getParamsMap().put(placeholder, columnValue);
}else if(WhereType.LIKE_RIGHT == whereType){
this.whereSql.append(SPACE).append(whereType.getValue())
.append(SPACE).append(COLON).append(placeholder)
.append(SPACE).append(SINGLE_QUOTE).append(PERCENT_SIGN).append(SINGLE_QUOTE).append(SPACE);
this.getParamsMap().put(placeholder, columnValue);
}else if(WhereType.NULL == whereType || WhereType.NOT_NULL == whereType){
this.whereSql.append(SPACE).append(whereType.getValue());
// 因为is null或is not null不需要参数值,所以参数Map不增加值
}else if(WhereType.IN == whereType){
// in (:userids)
this.whereSql.append(SPACE).append(whereType.getValue())
.append(SPACE).append(LEFT_BRACKET)
.append(COLON).append(placeholder)
.append(RIGHT_BRACKET);
this.getParamsMap().put(placeholder, columnValue);
}else{
this.whereSql.append(SPACE).append(whereType.getValue())
.append(SPACE).append(COLON).append(placeholder);
this.getParamsMap().put(placeholder, columnValue);
}
return this;
}
/**
* 把之前的查询条件用括号包括
* @return
*/
public SqlBuffer endBefore(){
if(hadWhereSql()){
this.whereSql.insert(0, SPACE + LEFT_BRACKET).append(RIGHT_BRACKET);
}else{
String beginFlag = this.whereSql.substring(0, 4);
if(beginFlag.toUpperCase().indexOf(ConnectType.AND.getValue()) > -1){
this.whereSql.insert(4, SPACE + LEFT_BRACKET).append(RIGHT_BRACKET);
}else{
this.whereSql.insert(3, SPACE + LEFT_BRACKET).append(RIGHT_BRACKET);
}
}
return this;
}
/**
* 为后面的查询条件加上左括号,结束后使用newEnd()加上右括号
* @return
*/
public SqlBuffer newStart(){
this.isNewStart = true;
this.isEndStart = true;
return this;
}
/**
* 为后面的查询条件加上右括号,先使用newStart()
* @return
*/
public SqlBuffer newEnd(){
if(this.isEndStart){
this.whereSql.append(SPACE).append(RIGHT_BRACKET);
}
this.isEndStart = false;
return this;
}
/**
* 排序
* @param columnName 表的列名称
* @param orderByType OrderByType枚举
* @return
*/
public SqlBuffer orderBy(String columnName, OrderByType orderByType){
if(hadOrderBySql()){
this.orderBySql.append(SPACE).append(COMMA).append(columnName).append(SPACE).append(orderByType.getValue());
}else{
this.orderBySql.append(ORDER_BY_SQL).append(SPACE).append(columnName).append(SPACE).append(orderByType.getValue());
this.orderByIndex = 1;
}
return this;
}
/**
* 升序排序
* @param columnName 表的列名称
* @return
*/
public SqlBuffer orderBy(String columnName){
return orderBy(columnName, OrderByType.ASC);
}
/**
* 分页查询条件
* @param offSize
* @param pageSize
* @return
*/
public SqlBuffer limit(int offSize, int pageSize){
if(offSize < 0){
offSize = 0;
}
if(pageSize < 0){
pageSize = 10;
}
this.offSize = offSize;
this.pageSize = pageSize;
if(hadLimitSql()){
this.limitSql.delete(0, limitSql.length())
.append(LIMIT_SQL).append(SPACE)
.append(offSize).append(COMMA).append(pageSize);
}else{
this.limitSql.append(LIMIT_SQL).append(SPACE)
.append(offSize).append(COMMA).append(pageSize);
this.limitIndex = 1;
}
return this;
}
/**
* 分页查询条件
* @param pageSize
* @return
*/
public SqlBuffer limit(int pageSize){
return limit(0, pageSize);
}
/**
* 获取SqlBuffer拼接的sql语句
* @return
*/
public String getSql(){
StringBuffer result = new StringBuffer("");
result.append(baseSql).append(SPACE);
if(!hadWhereSql()){
if(this.whereSql.length() > 0){
result.append(WHERE_INIT + SPACE);
}
}else{
result.append(WHERE_SQL + SPACE);
}
result.append(whereSql).append(SPACE)
.append(orderBySql).append(SPACE)
.append(limitSql).append(SPACE);
return result.toString();
}
/**
* 获取SqlBuffer拼接的countSql语句
* @return
*/
public String getCountSql(){
StringBuffer result = new StringBuffer("");
result.append(baseSql).append(SPACE);
if(!hadWhereSql()){
if(this.whereSql.length() > 0){
result.append(WHERE_INIT + SPACE);
}
}else{
result.append(WHERE_SQL + SPACE);
}
result.append(whereSql).append(SPACE);
return "select count(*) from ("+result.toString()+") _temp_count";
//return result.toString();
}
/**
* 获取SqlBuffer拼接的sql语句
* @return
*/
public String toString(){
return this.getSql();
}
@SuppressWarnings("unused")
private StringBuffer getBaseSql() {
return baseSql;
}
@SuppressWarnings("unused")
private void setBaseSql(StringBuffer baseSql) {
this.baseSql = baseSql;
}
@SuppressWarnings("unused")
private StringBuffer getWhereSql() {
return whereSql;
}
@SuppressWarnings("unused")
private void setWhereSql(StringBuffer whereSql) {
this.whereSql = whereSql;
}
@SuppressWarnings("unused")
private StringBuffer getOrderBySql() {
return orderBySql;
}
@SuppressWarnings("unused")
private void setOrderBySql(StringBuffer orderBySql) {
this.orderBySql = orderBySql;
}
@SuppressWarnings("unused")
private StringBuffer getLimitSql() {
return limitSql;
}
@SuppressWarnings("unused")
private void setLimitSql(StringBuffer limitSql) {
this.limitSql = limitSql;
}
@SuppressWarnings("unused")
private int getWhereIndex() {
return whereIndex;
}
@SuppressWarnings("unused")
private void setWhereIndex(int whereIndex) {
this.whereIndex = whereIndex;
}
public int getOrderByIndex() {
return orderByIndex;
}
public void setOrderByIndex(int orderByIndex) {
this.orderByIndex = orderByIndex;
}
@SuppressWarnings("unused")
private int getLimitIndex() {
return limitIndex;
}
@SuppressWarnings("unused")
private void setLimitIndex(int limitIndex) {
this.limitIndex = limitIndex;
}
public Map<String, Object> getParamsMap() {
return paramsMap;
}
public void setParamsMap(Map<String, Object> paramsMap) {
this.paramsMap = paramsMap;
}
public int getOffSize() {
return offSize;
}
public void setOffSize(int offSize) {
this.offSize = offSize;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
}
二、定义的枚举
1、ConnectType
public enum ConnectType {
AND{
@Override
public String getValue() {
return "AND";
}
},
OR{
@Override
public String getValue() {
return "OR";
}
};
public abstract String getValue();
}
2、OrderByType
public enum OrderByType {
DESC{
@Override
public String getValue() {
return "DESC";
}
},
ASC{
@Override
public String getValue() {
return "ASC";
}
};
public abstract String getValue();
}
3、WhereType
public enum WhereType {
EQUALS{
@Override
public String getValue() {
return "=";
}
},
NOT_EQUALS{
@Override
public String getValue() {
return "!=";
}
},
LIKE{
@Override
public String getValue() {
return "LIKE";
}
},
LIKE_LEFT{
@Override
public String getValue() {
return "LIKE";
}
},
LIKE_RIGHT{
@Override
public String getValue() {
return "LIKE";
}
},
GREATER_THAN{
@Override
public String getValue() {
return ">";
}
},
GREATER_THAN_EQUALS{
@Override
public String getValue() {
return ">=";
}
},
LESS_THAN{
@Override
public String getValue() {
return "<";
}
},
LESS_THAN_EQUALS{
@Override
public String getValue() {
return "<=";
}
},
NULL{
@Override
public String getValue() {
return "is null";
}
},
NOT_NULL{
@Override
public String getValue() {
return "is not null";
}
},
IN{
@Override
public String getValue() {
return "in";
}
};
public abstract String getValue();
}
三、用到的工具类:StrUtils
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Map;
import java.util.UUID;
//import cn.imovie.common.utils.RegUtils;
public class StrUtils {
/**
* 随机获取数字和大写英文字母组合的字符串
*
* @param size
* 返回的字符串的位数,如果小于1,则默认是6
* @return String
* @since 2015-09-25
*/
public static String getRandomLetterAndDigital(int size) {
String str = "23456789ABCDEFGHJKLMNPQRSTUVWXYZ";// 去掉容易混淆字符:0与O,1与I
StringBuffer sb = new StringBuffer();
if (size < 1) {
size = 6;
}
for (int i = 0; i < size; i++) {
int ran = (int) (Math.random() * str.length());
sb.append(str.charAt(ran));
}
return sb.toString().trim();
}
/**
* 随机获取大/小写英文字母组合的字符串
*
* @param size
* 返回的字符串的位数,如果小于1,则默认是6
* @return String
* @since 2015-09-25
*/
public static String getLetter(int size) {
String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
StringBuffer sb = new StringBuffer();
if (size < 1) {
size = 6;
}
for (int i = 0; i < size; i++) {
int ran = (int) (Math.random() * str.length());
sb.append(str.charAt(ran));
}
return sb.toString().trim();
}
/**
* 随机获取大写英文字母组合的字符串
*
* @param size
* 返回的字符串的位数,如果小于1,则默认是6
* @return String
* @since 2015-09-25
*/
public static String getUpperLetter(int size) {
String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
StringBuffer sb = new StringBuffer();
if (size < 1) {
size = 6;
}
for (int i = 0; i < size; i++) {
int ran = (int) (Math.random() * str.length());
sb.append(str.charAt(ran));
}
return sb.toString().trim();
}
/**
* 随机获取数字字符串
*
* @param size
* 返回的字符串的位数
* @return String
* @since 2015-09-25
*/
public static String getRandomDigital(int size) {
String str = "1234567890";
StringBuffer sb = new StringBuffer();
if (size < 1) {
return null;
} else {
for (int i = 0; i < size; i++) {
int ran = (int) (Math.random() * 10);
sb.append(str.charAt(ran));
}
return sb.toString().trim();
}
}
/**
* 获取随机数字,同getRandomDigital
*
* @param size
* @return
*/
public static String getNumber(int size) {
return getRandomDigital(size);
}
/**
* 生成年月日时分秒毫秒(20120905050602000)
*
* @return
* @since 2015-09-25
*/
public static String getYYYYMMDDHHmmssmilliSecond() {
StringBuffer str = new StringBuffer("");
String strMonth = "";
String strDate = "";
String strHour = "";
String strMinute = "";
String strSecond = "";
String strMilliSecond = "";
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH) + 1;
int date = cal.get(Calendar.DATE);
int hour = cal.get(Calendar.HOUR_OF_DAY);
int minute = cal.get(Calendar.MINUTE);
int second = cal.get(Calendar.SECOND);
int milliSecond = cal.get(Calendar.MILLISECOND);
if (month < 10) {
strMonth = "0" + month;
} else {
strMonth = String.valueOf(month);
}
if (date < 10) {
strDate = "0" + date;
} else {
strDate = String.valueOf(date);
}
if (hour < 10) {
strHour = "0" + hour;
} else {
strHour = String.valueOf(hour);
}
if (minute < 10) {
strMinute = "0" + minute;
} else {
strMinute = String.valueOf(minute);
}
if (second < 10) {
strSecond = "0" + second;
} else {
strSecond = String.valueOf(second);
}
if (milliSecond < 10) {
strMilliSecond = "00" + milliSecond;
} else if (milliSecond < 100) {
strMilliSecond = "0" + milliSecond;
} else {
strMilliSecond = String.valueOf(milliSecond);
}
return str.append(String.valueOf(year).toString().trim()).append(strMonth.trim()).append(strDate.trim())
.append(strHour.trim()).append(strMinute.trim()).append(strSecond.trim()).append(strMilliSecond.trim())
.toString();
}
/**
* 生成年月日(20120905050602000)
*
* @return
* @since 2015-09-25
*/
public static String getYYYYMMDD() {
StringBuffer str = new StringBuffer("");
String strMonth = "";
String strDate = "";
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH) + 1;
int date = cal.get(Calendar.DATE);
if (month < 10) {
strMonth = "0" + month;
} else {
strMonth = String.valueOf(month);
}
if (date < 10) {
strDate = "0" + date;
} else {
strDate = String.valueOf(date);
}
return str.append(String.valueOf(year).toString().trim()).append(strMonth.trim()).append(strDate.trim())
.toString();
}
/**
* 获取uuid,有横杠(36位)
*
* @return
* @since 2015-10-14
*/
public static String getUUID() {
return UUID.randomUUID().toString();
}
/**
* 获取uuid,无横杠(32位)
*
* @return
* @author lqyao
* @since 2015-10-14
*/
public static String getUUIDNumberOnly() {
return UUID.randomUUID().toString().replaceAll("-", "");
}
/**
* 移除字符串最后一个字符
*
* @return
* @since 2015-10-14
*/
public static String removeLastCode(String str) {
if (str == null || str.length() < 1) {
return str;
}
return str.substring(0, str.length() - 1);
}
/**
* 第一个字符变大写
*
* @param str
* @return
*/
public static String firstCodeToUpperCase(String str) {
if (isBlank(str)) {
return str;
}
String strTrim = str.trim();
return String.valueOf(strTrim.charAt(0)).toUpperCase() + strTrim.substring(1, strTrim.length());
}
/**
* 获取字符串最后一个字符
*
* @return
* @since 2016-01-13
*/
public static String getLastCode(String str) {
if (str == null || str.length() < 1) {
return "";
}
return str.substring(str.length() - 1);
}
/**
* 获取第一个id
*
* @param str
* 字符串
* @return id
*/
public static String getFirstId(String str, String spiltCode) {
if (spiltCode == null) {
spiltCode = ",";
}
if (!StrUtils.isEmpty(str)) {
if (str.indexOf(spiltCode) > -1) {
return str.substring(0, str.indexOf(spiltCode)).trim();
}
}
return str;
}
/**
* 去相同部分
*
* @param originalStr
* 原字符串
* @param deleteStr
* 需要去掉的字符串
* @return string
* @author lqy
*/
public static String removeSamePart(String originalStr, String deleteStr) {
if (originalStr != null && deleteStr != null) {
originalStr = originalStr.replaceAll("\\(", "(");
originalStr = originalStr.replaceAll("\\)", ")");
originalStr = originalStr.replaceAll(" | ", "");
deleteStr = deleteStr.replaceAll("\\(", "(");
deleteStr = deleteStr.replaceAll("\\)", ")");
deleteStr = deleteStr.replaceAll(" | ", "");
if (originalStr.indexOf(deleteStr) > -1) {
originalStr = originalStr.replaceAll(deleteStr, "");
}
}
return originalStr;
}
/**
* 拆分字符串获取数组
*
* @param str
* 字符串
* @param spiltCode
* 拆分符号
* @return String[]
*/
public static String[] getArrayAfterSpilt(String str, String spiltCode) {
if (str == null || str.trim().equals("")) {
return null;
} else {
if (spiltCode == null || spiltCode.trim().equals("")) {
spiltCode = ",";
}
return str.split(spiltCode);
}
}
/**
* 拆分字符串获取Ids
*
* @param idsString
* id字符串
* @param spiltCode
* 拆分符号
* @return ids
*/
public static int[] getIdsAfterSpilt(String idsString, String spiltCode) {
List<Integer> idList = new ArrayList<Integer>();
if (idsString == null || idsString.trim().equals("")) {
return null;
} else {
if (spiltCode == null || spiltCode.trim().equals("")) {
spiltCode = ",";
}
String[] idArray = idsString.split(spiltCode);
if (idArray != null && idArray.length > 0) {
for (String string : idArray) {
if (string != null && !string.trim().equals("")) {
idList.add(Integer.parseInt(string.trim()));
}
}
}
}
if (idList != null && idList.size() > 0) {
int[] ids = new int[idList.size()];
for (int j = 0; j < idList.size(); j++) {
ids[j] = idList.get(j);
}
return ids;
}
return null;
}
/**
*
* @param obj
* @return obj == null;
*/
public static boolean isNull(Object obj) {
return obj == null;
}
/**
* 判断list是否为Null
*
* @param list
* @return
*/
public static <T> boolean isNullList(List<T> list) {
return (list == null);
}
/**
* 判断list是否为空
*
* @param list
* @return (list == null) || (list.size() < 1)
*/
public static <T> boolean isEmptyList(List<T> list) {
return (list == null) || (list.size() < 1);
}
/**
* 判断Map是否为Null
*
* @param map
* @return
*/
public static <K, V> boolean isNullMap(Map<K, V> map) {
return (map == null);
}
/**
* 判断Map是否为空
*
* @param map
* @return
*/
public static <K, V> boolean isEmptyMap(Map<K, V> map) {
return (map == null || map.size() < 1);
}
/**
* 判断数组是否为Null
*
* @param obj
* @return
*/
public static boolean isNullArray(Object[] obj) {
return (obj == null);
}
/**
* 判断数组是否为空
*
* @param obj
* @return
*/
public static boolean isEmptyArray(Object[] obj) {
return (obj == null || obj.length < 1);
}
/**
* <p>
* Checks if a String is empty ("") or null.
* </p>
*
* <pre>
* StringUtils.isEmpty(null) = true
* StringUtils.isEmpty("") = true
* StringUtils.isEmpty(" ") = false
* StringUtils.isEmpty("bob") = false
* StringUtils.isEmpty(" bob ") = false
* </pre>
*
* <p>
* NOTE: This method changed in Lang version 2.0. It no longer trims the
* String. That functionality is available in isBlank().
* </p>
*
* @param str
* the String to check, may be null
* @return <code>true</code> if the String is empty or null
*/
public static boolean isEmpty(String str) {
return str == null || str.length() == 0;
}
/**
* <p>
* Checks if a String is whitespace, empty ("") or null.
* </p>
*
* <pre>
* StringUtils.isBlank(null) = true
* StringUtils.isBlank("") = true
* StringUtils.isBlank(" ") = true
* StringUtils.isBlank("bob") = false
* StringUtils.isBlank(" bob ") = false
* </pre>
*
* @param str
* the String to check, may be null
* @return <code>true</code> if the String is null, empty or whitespace
* @since 2.0
*/
public static boolean isBlank(String str) {
int strLen;
if (str == null || (strLen = str.length()) == 0) {
return true;
}
for (int i = 0; i < strLen; i++) {
if ((Character.isWhitespace(str.charAt(i)) == false)) {
return false;
}
}
return true;
}
/**
* <p>
* Checks if the String contains only whitespace.
* </p>
*
* <p>
* <code>null</code> will return <code>false</code>. An empty String ("")
* will return <code>true</code>.
* </p>
*
* <pre>
* StringUtils.isWhitespace(null) = false
* StringUtils.isWhitespace("") = true
* StringUtils.isWhitespace(" ") = true
* StringUtils.isWhitespace("abc") = false
* StringUtils.isWhitespace("ab2c") = false
* StringUtils.isWhitespace("ab-c") = false
* </pre>
*
* @param str
* the String to check, may be null
* @return <code>true</code> if only contains whitespace, and is non-null
* @since 2.0
*/
public static boolean isWhitespace(String str) {
if (str == null) {
return false;
}
int sz = str.length();
for (int i = 0; i < sz; i++) {
if ((Character.isWhitespace(str.charAt(i)) == false)) {
return false;
}
}
return true;
}
/**
* 变成中文括号
*
* @param str
* @return
*/
public static String bracketToChinese(String str) {
if (isBlank(str)) {
return str;
}
String strTrim = str.trim();
strTrim = strTrim.replaceAll("\\(", "(").replaceAll("\\)", ")");
return strTrim;
}
/**
* 变成英文括号
*
* @param str
* @return
*/
public static String bracketToEnglish(String str) {
if (isBlank(str)) {
return str;
}
String strTrim = str.trim();
strTrim = strTrim.replaceAll("(", "(").replaceAll(")", ")");
return strTrim;
}
/**
* 替换字符串
*
* @param str
* @param sourceStr,如果是特殊字符,如英文()、[]等,要使用\\(
* @param targetStr
* @return
*/
public static String replaceStr(String str, String sourceStr, String targetStr) {
if (isBlank(str)) {
return str;
}
String strTrim = str.trim();
strTrim = strTrim.replaceAll(sourceStr, targetStr);
return strTrim;
}
}
四、Dao使用例子:
namedParameterJdbcTemplate 是配置在spring.xml文件的,关联dataSource
<bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
<constructor-arg ref="dataSource" />
</bean>
@Override
public <E> List<E> queryForList(String sql, Map<String, Object> paramsMap, Class<E> clazz) {
return namedParameterJdbcTemplate.query(sql,paramsMap,new BeanPropertyRowMapper(clazz));
}
@Override
public List<Map<String, Object>> queryForList(SqlBuffer sqlBuffer) {
return namedParameterJdbcTemplate.queryForList(sqlBuffer.getSql(), sqlBuffer.getParamsMap());
}
@SuppressWarnings("rawtypes")
@Override
public <E> List<E> queryForList(SqlBuffer sqlBuffer, Class<E> clazz) {
return namedParameterJdbcTemplate.query(sqlBuffer.getSql(), sqlBuffer.getParamsMap(),
new BeanPropertyRowMapper(clazz));
}
@Override
public int queryForInt(SqlBuffer sqlBuffer) {
return namedParameterJdbcTemplate.queryForObject(sqlBuffer.getCountSql(), sqlBuffer.getParamsMap(), int.class);
}
@Override
public String queryForString(SqlBuffer sqlBuffer) {
return namedParameterJdbcTemplate.queryForObject(sqlBuffer.getCountSql(), sqlBuffer.getParamsMap(),
String.class);
}
@Override
public int getCount(SqlBuffer sqlBuffer){
return namedParameterJdbcTemplate.queryForObject(sqlBuffer.getCountSql(), sqlBuffer.getParamsMap(), int.class);
}
五、SqlBuffer 使用例子:
SqlBuffer sqlBuffer6 = new SqlBuffer("SELECT ja.*,jaa.`attr_name`,jaa.`attr_value` FROM jc_advertising ja LEFT JOIN jc_advertising_attr jaa ON ja.`advertising_id`=jaa.`advertising_id`");
sqlBuffer6.and("jaa.attr_name", Arrays.asList("image_title","image_url"), WhereType.IN);
sqlBuffer6.and("ja.site_id", null, WhereType.NOT_NULL).isNull("ja.ad_code");
sqlBuffer6.and("ja.ad_name", "banner", WhereType.EQUALS);
List<Aaa> list = (List<Aaa>) testSevice.queryForList(sqlBuffer6, Aaa.class);
for (Aaa aaa : list) {
System.out.println("aaa.getAdvertisingId()="+aaa.getAdvertisingId());
System.out.println("aaa.getAdName()="+aaa.getAdName());
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
©Copyright 蕃薯耀 2017年7月25日
http://fanshuyao.iteye.com/