Spring NamedParameterJdbcTemplate命名参数查询条件封装,NamedParameterJdbcTemplate查询封装

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/

猜你喜欢

转载自fanshuyao.iteye.com/blog/2386746
今日推荐