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

时间:2022-03-19 08:33:02

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

NamedParameterJdbcTemplate查询封装

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

©Copyright 蕃薯耀 2017年7月25日

http://www.cnblogs.com/fanshuyao/

一、SqlBuffer查询对象封装(现在只能select语句的封装)

  1. import java.util.HashMap;
  2. import java.util.Map;
  3. public class SqlBuffer {
  4. /**
  5. * 空格
  6. */
  7. private final String SPACE = " ";
  8. /**
  9. * 冒号
  10. */
  11. private final String COLON = ":";
  12. /**
  13. * 逗号,
  14. */
  15. private final String COMMA = ",";
  16. /**
  17. * where关键字
  18. */
  19. private final String WHERE_SQL = "WHERE";
  20. /**
  21. * order by 关键字
  22. */
  23. private final String ORDER_BY_SQL = "ORDER BY";
  24. /**
  25. * limit关键字
  26. */
  27. private final String LIMIT_SQL = "LIMIT";
  28. /**
  29. * where 1=1条件
  30. */
  31. private final String WHERE_INIT = WHERE_SQL + "  1=1 ";
  32. private final String LEFT_BRACKET = "(";
  33. private final String RIGHT_BRACKET = ")";
  34. /**
  35. * 百分号%
  36. */
  37. private final String PERCENT_SIGN = "%";
  38. /**
  39. * 单引号 '
  40. */
  41. private final String SINGLE_QUOTE = "'";
  42. private StringBuffer baseSql  = new StringBuffer("");
  43. private StringBuffer whereSql  = new StringBuffer("");
  44. private StringBuffer orderBySql  = new StringBuffer("");
  45. private StringBuffer limitSql  = new StringBuffer("");
  46. public Map<String, Object> paramsMap  = new HashMap<String, Object>();
  47. private int whereIndex = -1;
  48. private int orderByIndex = -1;
  49. private int limitIndex = -1;
  50. private int offSize;
  51. private int pageSize;
  52. private boolean isNewStart = false;
  53. private boolean isEndStart = false;
  54. public SqlBuffer(){}
  55. public SqlBuffer(String sql){
  56. init(sql);
  57. }
  58. private int getWhereIndex(String sql){
  59. if(sql != null){
  60. return sql.indexOf(WHERE_SQL);
  61. }
  62. return -1;
  63. }
  64. private int getOrderByIndex(String sql){
  65. if(sql != null){
  66. return sql.indexOf(ORDER_BY_SQL);
  67. }
  68. return -1;
  69. }
  70. private int getLimitIndex(String sql){
  71. if(sql != null){
  72. return sql.indexOf(LIMIT_SQL);
  73. }
  74. return -1;
  75. }
  76. /**
  77. * 判断有没有where查询语句,有则返回true
  78. * @return
  79. */
  80. private boolean hadWhereSql(){
  81. if(this.whereIndex > -1){
  82. return true;
  83. }
  84. return false;
  85. }
  86. /**
  87. * 判断有没有order by查询语句,有则返回true
  88. * @return
  89. */
  90. private boolean hadOrderBySql(){
  91. if(this.orderByIndex > -1){
  92. return true;
  93. }
  94. return false;
  95. }
  96. /**
  97. * 判断有没有limit查询语句,有则返回true
  98. * @return
  99. */
  100. private boolean hadLimitSql(){
  101. if(this.limitIndex > -1){
  102. return true;
  103. }
  104. return false;
  105. }
  106. /**
  107. * 初始化操作
  108. * @param sql
  109. */
  110. private void init(String sql){
  111. if(sql != null){
  112. String sqlUpper = sql.trim().toUpperCase();
  113. this.whereIndex = getWhereIndex(sqlUpper);
  114. this.orderByIndex = getOrderByIndex(sqlUpper);
  115. this.limitIndex = getLimitIndex(sqlUpper);
  116. if(!hadWhereSql() && !hadOrderBySql() && !hadLimitSql()){
  117. baseSql.append(sql);
  118. }else{
  119. if(hadWhereSql()){
  120. baseSql.append(sql.substring(0, whereIndex));
  121. }else if(!hadWhereSql() && hadOrderBySql()){
  122. if(hadOrderBySql()){
  123. baseSql.append(sql.substring(0, orderByIndex));
  124. }
  125. }else if(!hadWhereSql() && !hadOrderBySql() && hadLimitSql()){
  126. baseSql.append(sql.substring(0, limitIndex));
  127. }
  128. }
  129. int whereStartIndex = whereIndex + WHERE_SQL.length();//where条件不需要加where
  130. if(hadWhereSql() && hadOrderBySql() && hadLimitSql()){
  131. whereSql.append(sql.substring(whereStartIndex, orderByIndex));
  132. orderBySql.append(sql.substring(orderByIndex, limitIndex));
  133. limitSql.append(sql.substring(limitIndex));
  134. }else if(hadWhereSql() && hadOrderBySql() && !hadLimitSql()){
  135. whereSql.append(sql.substring(whereStartIndex, orderByIndex));
  136. orderBySql.append(sql.substring(orderByIndex));
  137. }else if(hadWhereSql() && !hadOrderBySql() && hadLimitSql()){
  138. whereSql.append(sql.substring(whereStartIndex, limitIndex));
  139. limitSql.append(sql.substring(limitIndex));
  140. }else if(hadWhereSql() && !hadOrderBySql() && !hadLimitSql()){
  141. whereSql.append(sql.substring(whereStartIndex));
  142. }else if(!hadWhereSql() && hadOrderBySql() && hadLimitSql()){
  143. orderBySql.append(sql.substring(orderByIndex, limitIndex));
  144. limitSql.append(sql.substring(limitIndex));
  145. }else if(!hadWhereSql() && hadOrderBySql() && !hadLimitSql()){
  146. orderBySql.append(sql.substring(orderByIndex));
  147. }else if(!hadWhereSql() && !hadOrderBySql() && hadLimitSql()){
  148. limitSql.append(sql.substring(limitIndex));
  149. }
  150. }
  151. }
  152. /**
  153. * and条件连接
  154. * @param columnName 表的字段名称
  155. * @param columnValue 查询字段名称对应的值
  156. * <li>如果whereType为Null或者NotNull,该值可以为空</li>
  157. * <li>如果whereType为IN,该值为List类型,如:Arrays.asList("aa", "bb")</li>
  158. * @param whereType WhereType枚举,如like,>=
  159. * @return SqlBuffer
  160. */
  161. public SqlBuffer and(String columnName, Object columnValue, WhereType whereType){
  162. return add(ConnectType.AND, columnName, columnValue, null, whereType);
  163. }
  164. /**
  165. * or条件连接,使用columnName作为命名参数
  166. * @param columnName 表的字段名称
  167. * @param columnValue 查询字段名称对应的值
  168. * <li>如果whereType为Null或者NotNull,该值可以为空</li>
  169. * <li>如果whereType为IN,该值为List类型,如:Arrays.asList("aa", "bb")</li>
  170. * @param whereType WhereType枚举,如like,>=
  171. * @return SqlBuffer
  172. */
  173. public SqlBuffer or(String columnName, Object columnValue, WhereType whereType){
  174. return add(ConnectType.OR, columnName, columnValue, null, whereType);
  175. }
  176. /**
  177. * 加上表字段不为空的判断
  178. * <li>如columnName is not null</li>
  179. * @param connectType ConnectType枚举
  180. * @param columnName 表的字段名称
  181. * @return SqlBuffer
  182. */
  183. public SqlBuffer isNotNull(ConnectType connectType, String columnName){
  184. return add(connectType, columnName, null, null, WhereType.NOT_NULL);
  185. }
  186. /**
  187. * 加上表字段不为空的判断,使用And连接
  188. * <li>如columnName is not null</li>
  189. * @param columnName 表的字段名称
  190. * @return SqlBuffer
  191. */
  192. public SqlBuffer isNotNull(String columnName){
  193. return add(ConnectType.AND, columnName, null, null, WhereType.NOT_NULL);
  194. }
  195. /**
  196. * 加上表字段为空的判断
  197. * <li>如columnName is null</li>
  198. * @param connectType ConnectType枚举
  199. * @param columnName 表的字段名称
  200. * @return SqlBuffer
  201. */
  202. public SqlBuffer isNull(ConnectType connectType, String columnName){
  203. return add(connectType, columnName, null, null, WhereType.NULL);
  204. }
  205. /**
  206. * 加上表字段为空的判断,使用And连接
  207. * <li>如columnName is not null</li>
  208. * @param columnName 表的字段名称
  209. * @return SqlBuffer
  210. */
  211. public SqlBuffer isNull(String columnName){
  212. return add(ConnectType.AND, columnName, null, null, WhereType.NULL);
  213. }
  214. /**
  215. * and条件连接,使用columnName作为命名参数
  216. * @param columnName 表的字段名称
  217. * @param columnValue 查询字段名称对应的值
  218. * <li>如果whereType为Null或者NotNull,该值可以为空</li>
  219. * <li>如果whereType为IN,该值为List类型</li>
  220. * <li>如果whereType为IN,该值为List类型,如:Arrays.asList("aa", "bb")</li>
  221. * @param placeholder 命名参数
  222. * <li>如果为Null,则使用表的字段名称作为命名参数</li>
  223. * @param whereType WhereType枚举,如like,>=
  224. * @return SqlBuffer
  225. */
  226. public SqlBuffer and(String columnName, Object columnValue, String placeholder, WhereType whereType){
  227. if(StrUtils.isBlank(columnName)){
  228. return this;
  229. }
  230. return add(ConnectType.AND, columnName, columnValue, placeholder, whereType);
  231. }
  232. /**
  233. * or条件连接
  234. * @param columnName 表的字段名称
  235. * @param columnValue 查询字段名称对应的值
  236. * <li>如果whereType为Null或者NotNull,该值可以为空</li>
  237. * <li>如果whereType为IN,该值为List类型,如:Arrays.asList("aa", "bb")</li>
  238. * @param placeholder 命名参数
  239. * <li>如果为Null,则使用表的字段名称作为命名参数</li>
  240. * @param whereType WhereType枚举,如like,>=
  241. * @return SqlBuffer
  242. */
  243. public SqlBuffer or(String columnName, Object columnValue, String placeholder, WhereType whereType){
  244. if(StrUtils.isBlank(columnName)){
  245. return this;
  246. }
  247. return add(ConnectType.OR, columnName, columnValue, placeholder, whereType);
  248. }
  249. /**
  250. * 命名参数查询,使用columnName作为命名参数
  251. * @param connectType ConnectType枚举
  252. * @param columnName 表的字段名称
  253. * @param columnValue 查询字段名称对应的值
  254. * <li>如果whereType为Null或者NotNull,该值可以为空</li>
  255. * <li>如果whereType为IN,该值为List类型,如:Arrays.asList("aa", "bb")</li>
  256. * @param whereType WhereType枚举,如like,>=
  257. * @return SqlBuffer
  258. */
  259. public SqlBuffer add(ConnectType connectType, String columnName, Object columnValue, WhereType whereType){
  260. return add(connectType, columnName, columnValue, null, whereType);
  261. }
  262. /**
  263. * 命名参数查询
  264. * @param connectType ConnectType枚举
  265. * @param columnName 表的字段名称
  266. * @param columnValue 查询字段名称对应的值
  267. * <li>如果whereType为Null或者NotNull,该值可以为空</li>
  268. * <li>如果whereType为IN,该值为List类型,如:Arrays.asList("aa", "bb")</li>
  269. * @param placeholder 命名参数
  270. * <li>如果为Null,则使用表的字段名称作为命名参数</li>
  271. * @param whereType WhereType枚举,如like,>=
  272. * @return SqlBuffer
  273. */
  274. public SqlBuffer add(ConnectType connectType, String columnName, Object columnValue, String placeholder, WhereType whereType){
  275. if(StrUtils.isBlank(columnName)){
  276. return this;
  277. }
  278. this.whereSql.append(SPACE).append(connectType.getValue());
  279. if(this.isNewStart){
  280. this.whereSql.append(SPACE).append(LEFT_BRACKET);
  281. this.isNewStart = false;
  282. }
  283. this.whereSql.append(SPACE).append(columnName);
  284. //组装参数
  285. if(StrUtils.isBlank(placeholder)){//命名参数为空,则使用字段名
  286. placeholder = columnName;
  287. }
  288. if(WhereType.LIKE == whereType){
  289. //LIKE '%' :username '%' ,:username 两边一定要有空格,如果没有空格,是查询不到数据的
  290. this.whereSql.append(SPACE).append(whereType.getValue())
  291. .append(SPACE).append(SINGLE_QUOTE).append(PERCENT_SIGN).append(SINGLE_QUOTE).append(SPACE)
  292. .append(COLON).append(placeholder)
  293. .append(SPACE).append(SINGLE_QUOTE).append(PERCENT_SIGN).append(SINGLE_QUOTE).append(SPACE);
  294. this.getParamsMap().put(placeholder, columnValue);
  295. // 这种方法是在值里放%,如 "%" + username + "%"
  296. /*this.whereSql.append(SPACE).append(whereType.getValue())
  297. .append(SPACE)
  298. .append(COLON).append(placeholder);*/
  299. }else if(WhereType.LIKE_LEFT == whereType){
  300. this.whereSql.append(SPACE).append(whereType.getValue())
  301. .append(SPACE).append(SINGLE_QUOTE).append(PERCENT_SIGN).append(SINGLE_QUOTE).append(SPACE)
  302. .append(COLON).append(placeholder).append(SPACE);
  303. this.getParamsMap().put(placeholder, columnValue);
  304. }else if(WhereType.LIKE_RIGHT == whereType){
  305. this.whereSql.append(SPACE).append(whereType.getValue())
  306. .append(SPACE).append(COLON).append(placeholder)
  307. .append(SPACE).append(SINGLE_QUOTE).append(PERCENT_SIGN).append(SINGLE_QUOTE).append(SPACE);
  308. this.getParamsMap().put(placeholder, columnValue);
  309. }else if(WhereType.NULL == whereType || WhereType.NOT_NULL == whereType){
  310. this.whereSql.append(SPACE).append(whereType.getValue());
  311. // 因为is null或is not null不需要参数值,所以参数Map不增加值
  312. }else if(WhereType.IN == whereType){
  313. // in (:userids)
  314. this.whereSql.append(SPACE).append(whereType.getValue())
  315. .append(SPACE).append(LEFT_BRACKET)
  316. .append(COLON).append(placeholder)
  317. .append(RIGHT_BRACKET);
  318. this.getParamsMap().put(placeholder, columnValue);
  319. }else{
  320. this.whereSql.append(SPACE).append(whereType.getValue())
  321. .append(SPACE).append(COLON).append(placeholder);
  322. this.getParamsMap().put(placeholder, columnValue);
  323. }
  324. return this;
  325. }
  326. /**
  327. * 把之前的查询条件用括号包括
  328. * @return
  329. */
  330. public SqlBuffer endBefore(){
  331. if(hadWhereSql()){
  332. this.whereSql.insert(0, SPACE + LEFT_BRACKET).append(RIGHT_BRACKET);
  333. }else{
  334. String beginFlag = this.whereSql.substring(0, 4);
  335. if(beginFlag.toUpperCase().indexOf(ConnectType.AND.getValue()) > -1){
  336. this.whereSql.insert(4, SPACE + LEFT_BRACKET).append(RIGHT_BRACKET);
  337. }else{
  338. this.whereSql.insert(3, SPACE + LEFT_BRACKET).append(RIGHT_BRACKET);
  339. }
  340. }
  341. return this;
  342. }
  343. /**
  344. * 为后面的查询条件加上左括号,结束后使用newEnd()加上右括号
  345. * @return
  346. */
  347. public SqlBuffer newStart(){
  348. this.isNewStart = true;
  349. this.isEndStart = true;
  350. return this;
  351. }
  352. /**
  353. * 为后面的查询条件加上右括号,先使用newStart()
  354. * @return
  355. */
  356. public SqlBuffer newEnd(){
  357. if(this.isEndStart){
  358. this.whereSql.append(SPACE).append(RIGHT_BRACKET);
  359. }
  360. this.isEndStart = false;
  361. return this;
  362. }
  363. /**
  364. * 排序
  365. * @param columnName 表的列名称
  366. * @param orderByType OrderByType枚举
  367. * @return
  368. */
  369. public SqlBuffer orderBy(String columnName, OrderByType orderByType){
  370. if(hadOrderBySql()){
  371. this.orderBySql.append(SPACE).append(COMMA).append(columnName).append(SPACE).append(orderByType.getValue());
  372. }else{
  373. this.orderBySql.append(ORDER_BY_SQL).append(SPACE).append(columnName).append(SPACE).append(orderByType.getValue());
  374. this.orderByIndex = 1;
  375. }
  376. return this;
  377. }
  378. /**
  379. * 升序排序
  380. * @param columnName 表的列名称
  381. * @return
  382. */
  383. public SqlBuffer orderBy(String columnName){
  384. return orderBy(columnName, OrderByType.ASC);
  385. }
  386. /**
  387. * 分页查询条件
  388. * @param offSize
  389. * @param pageSize
  390. * @return
  391. */
  392. public SqlBuffer limit(int offSize, int pageSize){
  393. if(offSize < 0){
  394. offSize = 0;
  395. }
  396. if(pageSize < 0){
  397. pageSize = 10;
  398. }
  399. this.offSize = offSize;
  400. this.pageSize = pageSize;
  401. if(hadLimitSql()){
  402. this.limitSql.delete(0, limitSql.length())
  403. .append(LIMIT_SQL).append(SPACE)
  404. .append(offSize).append(COMMA).append(pageSize);
  405. }else{
  406. this.limitSql.append(LIMIT_SQL).append(SPACE)
  407. .append(offSize).append(COMMA).append(pageSize);
  408. this.limitIndex = 1;
  409. }
  410. return this;
  411. }
  412. /**
  413. * 分页查询条件
  414. * @param pageSize
  415. * @return
  416. */
  417. public SqlBuffer limit(int pageSize){
  418. return limit(0, pageSize);
  419. }
  420. /**
  421. * 获取SqlBuffer拼接的sql语句
  422. * @return
  423. */
  424. public String getSql(){
  425. StringBuffer result = new StringBuffer("");
  426. result.append(baseSql).append(SPACE);
  427. if(!hadWhereSql()){
  428. if(this.whereSql.length() > 0){
  429. result.append(WHERE_INIT + SPACE);
  430. }
  431. }else{
  432. result.append(WHERE_SQL + SPACE);
  433. }
  434. result.append(whereSql).append(SPACE)
  435. .append(orderBySql).append(SPACE)
  436. .append(limitSql).append(SPACE);
  437. return result.toString();
  438. }
  439. /**
  440. * 获取SqlBuffer拼接的countSql语句
  441. * @return
  442. */
  443. public String getCountSql(){
  444. StringBuffer result = new StringBuffer("");
  445. result.append(baseSql).append(SPACE);
  446. if(!hadWhereSql()){
  447. if(this.whereSql.length() > 0){
  448. result.append(WHERE_INIT + SPACE);
  449. }
  450. }else{
  451. result.append(WHERE_SQL + SPACE);
  452. }
  453. result.append(whereSql).append(SPACE);
  454. return "select count(*) from ("+result.toString()+") _temp_count";
  455. //return result.toString();
  456. }
  457. /**
  458. * 获取SqlBuffer拼接的sql语句
  459. * @return
  460. */
  461. public String toString(){
  462. return this.getSql();
  463. }
  464. @SuppressWarnings("unused")
  465. private StringBuffer getBaseSql() {
  466. return baseSql;
  467. }
  468. @SuppressWarnings("unused")
  469. private void setBaseSql(StringBuffer baseSql) {
  470. this.baseSql = baseSql;
  471. }
  472. @SuppressWarnings("unused")
  473. private StringBuffer getWhereSql() {
  474. return whereSql;
  475. }
  476. @SuppressWarnings("unused")
  477. private void setWhereSql(StringBuffer whereSql) {
  478. this.whereSql = whereSql;
  479. }
  480. @SuppressWarnings("unused")
  481. private StringBuffer getOrderBySql() {
  482. return orderBySql;
  483. }
  484. @SuppressWarnings("unused")
  485. private void setOrderBySql(StringBuffer orderBySql) {
  486. this.orderBySql = orderBySql;
  487. }
  488. @SuppressWarnings("unused")
  489. private StringBuffer getLimitSql() {
  490. return limitSql;
  491. }
  492. @SuppressWarnings("unused")
  493. private void setLimitSql(StringBuffer limitSql) {
  494. this.limitSql = limitSql;
  495. }
  496. @SuppressWarnings("unused")
  497. private int getWhereIndex() {
  498. return whereIndex;
  499. }
  500. @SuppressWarnings("unused")
  501. private void setWhereIndex(int whereIndex) {
  502. this.whereIndex = whereIndex;
  503. }
  504. public int getOrderByIndex() {
  505. return orderByIndex;
  506. }
  507. public void setOrderByIndex(int orderByIndex) {
  508. this.orderByIndex = orderByIndex;
  509. }
  510. @SuppressWarnings("unused")
  511. private int getLimitIndex() {
  512. return limitIndex;
  513. }
  514. @SuppressWarnings("unused")
  515. private void setLimitIndex(int limitIndex) {
  516. this.limitIndex = limitIndex;
  517. }
  518. public Map<String, Object> getParamsMap() {
  519. return paramsMap;
  520. }
  521. public void setParamsMap(Map<String, Object> paramsMap) {
  522. this.paramsMap = paramsMap;
  523. }
  524. public int getOffSize() {
  525. return offSize;
  526. }
  527. public void setOffSize(int offSize) {
  528. this.offSize = offSize;
  529. }
  530. public int getPageSize() {
  531. return pageSize;
  532. }
  533. public void setPageSize(int pageSize) {
  534. this.pageSize = pageSize;
  535. }
  536. }

二、定义的枚举

1、ConnectType

  1. public enum ConnectType {
  2. AND{
  3. @Override
  4. public String getValue() {
  5. return "AND";
  6. }
  7. },
  8. OR{
  9. @Override
  10. public String getValue() {
  11. return "OR";
  12. }
  13. };
  14. public abstract String getValue();
  15. }

2、OrderByType

  1. public enum OrderByType {
  2. DESC{
  3. @Override
  4. public String getValue() {
  5. return "DESC";
  6. }
  7. },
  8. ASC{
  9. @Override
  10. public String getValue() {
  11. return "ASC";
  12. }
  13. };
  14. public abstract String getValue();
  15. }

3、WhereType

  1. public enum WhereType {
  2. EQUALS{
  3. @Override
  4. public String getValue() {
  5. return "=";
  6. }
  7. },
  8. NOT_EQUALS{
  9. @Override
  10. public String getValue() {
  11. return "!=";
  12. }
  13. },
  14. LIKE{
  15. @Override
  16. public String getValue() {
  17. return "LIKE";
  18. }
  19. },
  20. LIKE_LEFT{
  21. @Override
  22. public String getValue() {
  23. return "LIKE";
  24. }
  25. },
  26. LIKE_RIGHT{
  27. @Override
  28. public String getValue() {
  29. return "LIKE";
  30. }
  31. },
  32. GREATER_THAN{
  33. @Override
  34. public String getValue() {
  35. return ">";
  36. }
  37. },
  38. GREATER_THAN_EQUALS{
  39. @Override
  40. public String getValue() {
  41. return ">=";
  42. }
  43. },
  44. LESS_THAN{
  45. @Override
  46. public String getValue() {
  47. return "<";
  48. }
  49. },
  50. LESS_THAN_EQUALS{
  51. @Override
  52. public String getValue() {
  53. return "<=";
  54. }
  55. },
  56. NULL{
  57. @Override
  58. public String getValue() {
  59. return "is null";
  60. }
  61. },
  62. NOT_NULL{
  63. @Override
  64. public String getValue() {
  65. return "is not null";
  66. }
  67. },
  68. IN{
  69. @Override
  70. public String getValue() {
  71. return "in";
  72. }
  73. };
  74. public abstract String getValue();
  75. }

三、用到的工具类:StrUtils 

  1. import java.util.ArrayList;
  2. import java.util.Calendar;
  3. import java.util.List;
  4. import java.util.Map;
  5. import java.util.UUID;
  6. //import cn.imovie.common.utils.RegUtils;
  7. public class StrUtils {
  8. /**
  9. * 随机获取数字和大写英文字母组合的字符串
  10. *
  11. * @param size
  12. *            返回的字符串的位数,如果小于1,则默认是6
  13. * @return String
  14. * @since 2015-09-25
  15. */
  16. public static String getRandomLetterAndDigital(int size) {
  17. String str = "23456789ABCDEFGHJKLMNPQRSTUVWXYZ";// 去掉容易混淆字符:0与O,1与I
  18. StringBuffer sb = new StringBuffer();
  19. if (size < 1) {
  20. size = 6;
  21. }
  22. for (int i = 0; i < size; i++) {
  23. int ran = (int) (Math.random() * str.length());
  24. sb.append(str.charAt(ran));
  25. }
  26. return sb.toString().trim();
  27. }
  28. /**
  29. * 随机获取大/小写英文字母组合的字符串
  30. *
  31. * @param size
  32. *            返回的字符串的位数,如果小于1,则默认是6
  33. * @return String
  34. * @since 2015-09-25
  35. */
  36. public static String getLetter(int size) {
  37. String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
  38. StringBuffer sb = new StringBuffer();
  39. if (size < 1) {
  40. size = 6;
  41. }
  42. for (int i = 0; i < size; i++) {
  43. int ran = (int) (Math.random() * str.length());
  44. sb.append(str.charAt(ran));
  45. }
  46. return sb.toString().trim();
  47. }
  48. /**
  49. * 随机获取大写英文字母组合的字符串
  50. *
  51. * @param size
  52. *            返回的字符串的位数,如果小于1,则默认是6
  53. * @return String
  54. * @since 2015-09-25
  55. */
  56. public static String getUpperLetter(int size) {
  57. String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  58. StringBuffer sb = new StringBuffer();
  59. if (size < 1) {
  60. size = 6;
  61. }
  62. for (int i = 0; i < size; i++) {
  63. int ran = (int) (Math.random() * str.length());
  64. sb.append(str.charAt(ran));
  65. }
  66. return sb.toString().trim();
  67. }
  68. /**
  69. * 随机获取数字字符串
  70. *
  71. * @param size
  72. *            返回的字符串的位数
  73. * @return String
  74. * @since 2015-09-25
  75. */
  76. public static String getRandomDigital(int size) {
  77. String str = "1234567890";
  78. StringBuffer sb = new StringBuffer();
  79. if (size < 1) {
  80. return null;
  81. } else {
  82. for (int i = 0; i < size; i++) {
  83. int ran = (int) (Math.random() * 10);
  84. sb.append(str.charAt(ran));
  85. }
  86. return sb.toString().trim();
  87. }
  88. }
  89. /**
  90. * 获取随机数字,同getRandomDigital
  91. *
  92. * @param size
  93. * @return
  94. */
  95. public static String getNumber(int size) {
  96. return getRandomDigital(size);
  97. }
  98. /**
  99. * 生成年月日时分秒毫秒(20120905050602000)
  100. *
  101. * @return
  102. * @since 2015-09-25
  103. */
  104. public static String getYYYYMMDDHHmmssmilliSecond() {
  105. StringBuffer str = new StringBuffer("");
  106. String strMonth = "";
  107. String strDate = "";
  108. String strHour = "";
  109. String strMinute = "";
  110. String strSecond = "";
  111. String strMilliSecond = "";
  112. Calendar cal = Calendar.getInstance();
  113. int year = cal.get(Calendar.YEAR);
  114. int month = cal.get(Calendar.MONTH) + 1;
  115. int date = cal.get(Calendar.DATE);
  116. int hour = cal.get(Calendar.HOUR_OF_DAY);
  117. int minute = cal.get(Calendar.MINUTE);
  118. int second = cal.get(Calendar.SECOND);
  119. int milliSecond = cal.get(Calendar.MILLISECOND);
  120. if (month < 10) {
  121. strMonth = "0" + month;
  122. } else {
  123. strMonth = String.valueOf(month);
  124. }
  125. if (date < 10) {
  126. strDate = "0" + date;
  127. } else {
  128. strDate = String.valueOf(date);
  129. }
  130. if (hour < 10) {
  131. strHour = "0" + hour;
  132. } else {
  133. strHour = String.valueOf(hour);
  134. }
  135. if (minute < 10) {
  136. strMinute = "0" + minute;
  137. } else {
  138. strMinute = String.valueOf(minute);
  139. }
  140. if (second < 10) {
  141. strSecond = "0" + second;
  142. } else {
  143. strSecond = String.valueOf(second);
  144. }
  145. if (milliSecond < 10) {
  146. strMilliSecond = "00" + milliSecond;
  147. } else if (milliSecond < 100) {
  148. strMilliSecond = "0" + milliSecond;
  149. } else {
  150. strMilliSecond = String.valueOf(milliSecond);
  151. }
  152. return str.append(String.valueOf(year).toString().trim()).append(strMonth.trim()).append(strDate.trim())
  153. .append(strHour.trim()).append(strMinute.trim()).append(strSecond.trim()).append(strMilliSecond.trim())
  154. .toString();
  155. }
  156. /**
  157. * 生成年月日(20120905050602000)
  158. *
  159. * @return
  160. * @since 2015-09-25
  161. */
  162. public static String getYYYYMMDD() {
  163. StringBuffer str = new StringBuffer("");
  164. String strMonth = "";
  165. String strDate = "";
  166. Calendar cal = Calendar.getInstance();
  167. int year = cal.get(Calendar.YEAR);
  168. int month = cal.get(Calendar.MONTH) + 1;
  169. int date = cal.get(Calendar.DATE);
  170. if (month < 10) {
  171. strMonth = "0" + month;
  172. } else {
  173. strMonth = String.valueOf(month);
  174. }
  175. if (date < 10) {
  176. strDate = "0" + date;
  177. } else {
  178. strDate = String.valueOf(date);
  179. }
  180. return str.append(String.valueOf(year).toString().trim()).append(strMonth.trim()).append(strDate.trim())
  181. .toString();
  182. }
  183. /**
  184. * 获取uuid,有横杠(36位)
  185. *
  186. * @return
  187. * @since 2015-10-14
  188. */
  189. public static String getUUID() {
  190. return UUID.randomUUID().toString();
  191. }
  192. /**
  193. * 获取uuid,无横杠(32位)
  194. *
  195. * @return
  196. * @author lqyao
  197. * @since 2015-10-14
  198. */
  199. public static String getUUIDNumberOnly() {
  200. return UUID.randomUUID().toString().replaceAll("-", "");
  201. }
  202. /**
  203. * 移除字符串最后一个字符
  204. *
  205. * @return
  206. * @since 2015-10-14
  207. */
  208. public static String removeLastCode(String str) {
  209. if (str == null || str.length() < 1) {
  210. return str;
  211. }
  212. return str.substring(0, str.length() - 1);
  213. }
  214. /**
  215. * 第一个字符变大写
  216. *
  217. * @param str
  218. * @return
  219. */
  220. public static String firstCodeToUpperCase(String str) {
  221. if (isBlank(str)) {
  222. return str;
  223. }
  224. String strTrim = str.trim();
  225. return String.valueOf(strTrim.charAt(0)).toUpperCase() + strTrim.substring(1, strTrim.length());
  226. }
  227. /**
  228. * 获取字符串最后一个字符
  229. *
  230. * @return
  231. * @since 2016-01-13
  232. */
  233. public static String getLastCode(String str) {
  234. if (str == null || str.length() < 1) {
  235. return "";
  236. }
  237. return str.substring(str.length() - 1);
  238. }
  239. /**
  240. * 获取第一个id
  241. *
  242. * @param str
  243. *            字符串
  244. * @return id
  245. */
  246. public static String getFirstId(String str, String spiltCode) {
  247. if (spiltCode == null) {
  248. spiltCode = ",";
  249. }
  250. if (!StrUtils.isEmpty(str)) {
  251. if (str.indexOf(spiltCode) > -1) {
  252. return str.substring(0, str.indexOf(spiltCode)).trim();
  253. }
  254. }
  255. return str;
  256. }
  257. /**
  258. * 去相同部分
  259. *
  260. * @param originalStr
  261. *            原字符串
  262. * @param deleteStr
  263. *            需要去掉的字符串
  264. * @return string
  265. * @author lqy
  266. */
  267. public static String removeSamePart(String originalStr, String deleteStr) {
  268. if (originalStr != null && deleteStr != null) {
  269. originalStr = originalStr.replaceAll("\\(", "(");
  270. originalStr = originalStr.replaceAll("\\)", ")");
  271. originalStr = originalStr.replaceAll(" | ", "");
  272. deleteStr = deleteStr.replaceAll("\\(", "(");
  273. deleteStr = deleteStr.replaceAll("\\)", ")");
  274. deleteStr = deleteStr.replaceAll(" | ", "");
  275. if (originalStr.indexOf(deleteStr) > -1) {
  276. originalStr = originalStr.replaceAll(deleteStr, "");
  277. }
  278. }
  279. return originalStr;
  280. }
  281. /**
  282. * 拆分字符串获取数组
  283. *
  284. * @param str
  285. *            字符串
  286. * @param spiltCode
  287. *            拆分符号
  288. * @return String[]
  289. */
  290. public static String[] getArrayAfterSpilt(String str, String spiltCode) {
  291. if (str == null || str.trim().equals("")) {
  292. return null;
  293. } else {
  294. if (spiltCode == null || spiltCode.trim().equals("")) {
  295. spiltCode = ",";
  296. }
  297. return str.split(spiltCode);
  298. }
  299. }
  300. /**
  301. * 拆分字符串获取Ids
  302. *
  303. * @param idsString
  304. *            id字符串
  305. * @param spiltCode
  306. *            拆分符号
  307. * @return ids
  308. */
  309. public static int[] getIdsAfterSpilt(String idsString, String spiltCode) {
  310. List<Integer> idList = new ArrayList<Integer>();
  311. if (idsString == null || idsString.trim().equals("")) {
  312. return null;
  313. } else {
  314. if (spiltCode == null || spiltCode.trim().equals("")) {
  315. spiltCode = ",";
  316. }
  317. String[] idArray = idsString.split(spiltCode);
  318. if (idArray != null && idArray.length > 0) {
  319. for (String string : idArray) {
  320. if (string != null && !string.trim().equals("")) {
  321. idList.add(Integer.parseInt(string.trim()));
  322. }
  323. }
  324. }
  325. }
  326. if (idList != null && idList.size() > 0) {
  327. int[] ids = new int[idList.size()];
  328. for (int j = 0; j < idList.size(); j++) {
  329. ids[j] = idList.get(j);
  330. }
  331. return ids;
  332. }
  333. return null;
  334. }
  335. /**
  336. *
  337. * @param obj
  338. * @return obj == null;
  339. */
  340. public static boolean isNull(Object obj) {
  341. return obj == null;
  342. }
  343. /**
  344. * 判断list是否为Null
  345. *
  346. * @param list
  347. * @return
  348. */
  349. public static <T> boolean isNullList(List<T> list) {
  350. return (list == null);
  351. }
  352. /**
  353. * 判断list是否为空
  354. *
  355. * @param list
  356. * @return (list == null) || (list.size() < 1)
  357. */
  358. public static <T> boolean isEmptyList(List<T> list) {
  359. return (list == null) || (list.size() < 1);
  360. }
  361. /**
  362. * 判断Map是否为Null
  363. *
  364. * @param map
  365. * @return
  366. */
  367. public static <K, V> boolean isNullMap(Map<K, V> map) {
  368. return (map == null);
  369. }
  370. /**
  371. * 判断Map是否为空
  372. *
  373. * @param map
  374. * @return
  375. */
  376. public static <K, V> boolean isEmptyMap(Map<K, V> map) {
  377. return (map == null || map.size() < 1);
  378. }
  379. /**
  380. * 判断数组是否为Null
  381. *
  382. * @param obj
  383. * @return
  384. */
  385. public static boolean isNullArray(Object[] obj) {
  386. return (obj == null);
  387. }
  388. /**
  389. * 判断数组是否为空
  390. *
  391. * @param obj
  392. * @return
  393. */
  394. public static boolean isEmptyArray(Object[] obj) {
  395. return (obj == null || obj.length < 1);
  396. }
  397. /**
  398. * <p>
  399. * Checks if a String is empty ("") or null.
  400. * </p>
  401. *
  402. * <pre>
  403. * StringUtils.isEmpty(null)      = true
  404. * StringUtils.isEmpty("")        = true
  405. * StringUtils.isEmpty(" ")       = false
  406. * StringUtils.isEmpty("bob")     = false
  407. * StringUtils.isEmpty("  bob  ") = false
  408. * </pre>
  409. *
  410. * <p>
  411. * NOTE: This method changed in Lang version 2.0. It no longer trims the
  412. * String. That functionality is available in isBlank().
  413. * </p>
  414. *
  415. * @param str
  416. *            the String to check, may be null
  417. * @return <code>true</code> if the String is empty or null
  418. */
  419. public static boolean isEmpty(String str) {
  420. return str == null || str.length() == 0;
  421. }
  422. /**
  423. * <p>
  424. * Checks if a String is whitespace, empty ("") or null.
  425. * </p>
  426. *
  427. * <pre>
  428. * StringUtils.isBlank(null)      = true
  429. * StringUtils.isBlank("")        = true
  430. * StringUtils.isBlank(" ")       = true
  431. * StringUtils.isBlank("bob")     = false
  432. * StringUtils.isBlank("  bob  ") = false
  433. * </pre>
  434. *
  435. * @param str
  436. *            the String to check, may be null
  437. * @return <code>true</code> if the String is null, empty or whitespace
  438. * @since 2.0
  439. */
  440. public static boolean isBlank(String str) {
  441. int strLen;
  442. if (str == null || (strLen = str.length()) == 0) {
  443. return true;
  444. }
  445. for (int i = 0; i < strLen; i++) {
  446. if ((Character.isWhitespace(str.charAt(i)) == false)) {
  447. return false;
  448. }
  449. }
  450. return true;
  451. }
  452. /**
  453. * <p>
  454. * Checks if the String contains only whitespace.
  455. * </p>
  456. *
  457. * <p>
  458. * <code>null</code> will return <code>false</code>. An empty String ("")
  459. * will return <code>true</code>.
  460. * </p>
  461. *
  462. * <pre>
  463. * StringUtils.isWhitespace(null)   = false
  464. * StringUtils.isWhitespace("")     = true
  465. * StringUtils.isWhitespace("  ")   = true
  466. * StringUtils.isWhitespace("abc")  = false
  467. * StringUtils.isWhitespace("ab2c") = false
  468. * StringUtils.isWhitespace("ab-c") = false
  469. * </pre>
  470. *
  471. * @param str
  472. *            the String to check, may be null
  473. * @return <code>true</code> if only contains whitespace, and is non-null
  474. * @since 2.0
  475. */
  476. public static boolean isWhitespace(String str) {
  477. if (str == null) {
  478. return false;
  479. }
  480. int sz = str.length();
  481. for (int i = 0; i < sz; i++) {
  482. if ((Character.isWhitespace(str.charAt(i)) == false)) {
  483. return false;
  484. }
  485. }
  486. return true;
  487. }
  488. /**
  489. * 变成中文括号
  490. *
  491. * @param str
  492. * @return
  493. */
  494. public static String bracketToChinese(String str) {
  495. if (isBlank(str)) {
  496. return str;
  497. }
  498. String strTrim = str.trim();
  499. strTrim = strTrim.replaceAll("\\(", "(").replaceAll("\\)", ")");
  500. return strTrim;
  501. }
  502. /**
  503. * 变成英文括号
  504. *
  505. * @param str
  506. * @return
  507. */
  508. public static String bracketToEnglish(String str) {
  509. if (isBlank(str)) {
  510. return str;
  511. }
  512. String strTrim = str.trim();
  513. strTrim = strTrim.replaceAll("(", "(").replaceAll(")", ")");
  514. return strTrim;
  515. }
  516. /**
  517. * 替换字符串
  518. *
  519. * @param str
  520. * @param sourceStr,如果是特殊字符,如英文()、[]等,要使用\\(
  521. * @param targetStr
  522. * @return
  523. */
  524. public static String replaceStr(String str, String sourceStr, String targetStr) {
  525. if (isBlank(str)) {
  526. return str;
  527. }
  528. String strTrim = str.trim();
  529. strTrim = strTrim.replaceAll(sourceStr, targetStr);
  530. return strTrim;
  531. }
  532. }

四、Dao使用例子:

  1. @Override
  2. public <E> List<E> queryForList(String sql, Map<String, Object> paramsMap, Class<E> clazz) {
  3. return namedParameterJdbcTemplate.query(sql,paramsMap,new BeanPropertyRowMapper(clazz));
  4. }
  5. @Override
  6. public List<Map<String, Object>> queryForList(SqlBuffer sqlBuffer) {
  7. return namedParameterJdbcTemplate.queryForList(sqlBuffer.getSql(), sqlBuffer.getParamsMap());
  8. }
  9. @SuppressWarnings("rawtypes")
  10. @Override
  11. public List<?> queryForList(SqlBuffer sqlBuffer, Class<?> clazz) {
  12. return namedParameterJdbcTemplate.query(sqlBuffer.getSql(), sqlBuffer.getParamsMap(),
  13. new BeanPropertyRowMapper(clazz));
  14. }
  15. @Override
  16. public int queryForInt(SqlBuffer sqlBuffer) {
  17. return namedParameterJdbcTemplate.queryForObject(sqlBuffer.getCountSql(), sqlBuffer.getParamsMap(), int.class);
  18. }
  19. @Override
  20. public String queryForString(SqlBuffer sqlBuffer) {
  21. return namedParameterJdbcTemplate.queryForObject(sqlBuffer.getCountSql(), sqlBuffer.getParamsMap(),
  22. String.class);
  23. }
  24. @Override
  25. public int getCount(SqlBuffer sqlBuffer){
  26. return namedParameterJdbcTemplate.queryForObject(sqlBuffer.getCountSql(), sqlBuffer.getParamsMap(), int.class);
  27. }

五、SqlBuffer 使用例子:

  1. 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`");
  2. sqlBuffer6.and("jaa.attr_name", Arrays.asList("image_title","image_url"), WhereType.IN);
  3. sqlBuffer6.and("ja.site_id", null, WhereType.NOT_NULL).isNull("ja.ad_code");
  4. sqlBuffer6.and("ja.ad_name", "banner", WhereType.EQUALS);
  5. List<Aaa> list = (List<Aaa>) testSevice.queryForList(sqlBuffer6, Aaa.class);
  6. for (Aaa aaa : list) {
  7. System.out.println("aaa.getAdvertisingId()="+aaa.getAdvertisingId());
  8. System.out.println("aaa.getAdName()="+aaa.getAdName());

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

©Copyright 蕃薯耀 2017年7月25日

http://www.cnblogs.com/fanshuyao/