Java生成流水号 -3 支持数据库查询,Spring注入(二)

第一篇文章 http://numen06.iteye.com/blog/1420694 介绍了,流水号的生成,可惜忘了加入循环操作,比如日循环,月循环,年循环,这次来补上。 

注入方法已经在一写过了,就不写了。主要是代码部分。 
直接上代码 
Java代码   收藏代码
  1. package com.wesley.framework.dao;  
  2.   
  3. import java.text.ParseException;  
  4. import java.util.GregorianCalendar;  
  5.   
  6. import org.apache.commons.lang.StringUtils;  
  7. import org.apache.commons.lang.time.DateUtils;  
  8.   
  9. /** 
  10.  * 流水号参数封装类 
  11.  *  
  12.  * @author it.zl 
  13.  *  
  14.  */  
  15. public class PrimaryBean {  
  16.     // select 'SP-' as prefix,'yyyyMMdd' as dataString,'000000' startNumber  
  17.     public final static String YEAR = "year";  
  18.     public final static String MONTH = "month";  
  19.     public final static String DAY = "day";  
  20.     /** 
  21.      * 表示流水号中的前缀,比如测试操作可以加'TETS-'那么流水号的前缀就会加上'TEST-201207250000001' 
  22.      */  
  23.     private String prefix;  
  24.     /** 
  25.      * 表示日期的格式如'yyyyMMdd',那么会生产流水号中的日期为'20120725','yyyy-MM-dd'则会是'2012-07-25' 
  26.      */  
  27.     private String dataString;  
  28.     /** 
  29.      * 开始第一个数是多少,定义长度和其实数值,如000000 
  30.      */  
  31.     private String startNumber;  
  32.     /** 
  33.      * 表示流水号中的日期,如20120725 
  34.      */  
  35.     private String dateTimeString;  
  36.     /** 
  37.      * 可以设置循环类型,如每日生成新的流水号从0开始,默认为日,循环 数值为year,month,day 
  38.      */  
  39.     private String repeatCycle = DAY;  
  40.     /** 
  41.      * 是否每次都从数据库验证 
  42.      */  
  43.     private Boolean isDataBase = false;  
  44.   
  45.     public String getPrefix() {  
  46.         return prefix;  
  47.     }  
  48.   
  49.     public void setPrefix(String prefix) {  
  50.         this.prefix = prefix;  
  51.     }  
  52.   
  53.     public String getDataString() {  
  54.         return dataString;  
  55.     }  
  56.   
  57.     public void setDataString(String dataString) {  
  58.         this.dataString = dataString;  
  59.     }  
  60.   
  61.     public String getStartNumber() {  
  62.         return startNumber;  
  63.     }  
  64.   
  65.     public void setStartNumber(String startNumber) {  
  66.         this.startNumber = startNumber;  
  67.     }  
  68.   
  69.     public Boolean getIsDataBase() {  
  70.         return isDataBase;  
  71.     }  
  72.   
  73.     public void setIsDataBase(Boolean isDataBase) {  
  74.         this.isDataBase = isDataBase;  
  75.     }  
  76.   
  77.     public String getRepeatCycle() {  
  78.         return repeatCycle;  
  79.     }  
  80.   
  81.     public void setRepeatCycle(String repeatCycle) {  
  82.         this.repeatCycle = repeatCycle;  
  83.     }  
  84.   
  85.     public String getDateTimeString() {  
  86.         return dateTimeString;  
  87.     }  
  88.   
  89.     public void setDateTimeString(String dateTimeString) {  
  90.         this.dateTimeString = dateTimeString;  
  91.     }  
  92.   
  93.     /** 
  94.      * 把dateTimeString转换正GregorianCalendar 
  95.      *  
  96.      * @return DateTime 
  97.      */  
  98.     public GregorianCalendar getDateTime() {  
  99.         if (StringUtils.isEmpty(dateTimeString))  
  100.             return new GregorianCalendar();  
  101.         GregorianCalendar date = new GregorianCalendar();  
  102.         try {  
  103.             date.setTime(DateUtils.parseDate(this.getDateTimeString(),  
  104.                     new String[] { this.getDataString() }));  
  105.         } catch (ParseException e) {  
  106.             return new GregorianCalendar();  
  107.         }  
  108.         return date;  
  109.     }  
  110.   
  111. }  

Java代码   收藏代码
  1. package com.wesley.framework.dao;  
  2.   
  3. import java.text.DecimalFormat;  
  4. import java.text.SimpleDateFormat;  
  5. import java.util.Date;  
  6. import java.util.GregorianCalendar;  
  7. import java.util.HashMap;  
  8. import java.util.Map;  
  9.   
  10. import org.apache.commons.dbcp.BasicDataSource;  
  11. import org.apache.commons.lang3.StringUtils;  
  12. import org.apache.commons.lang3.time.DateUtils;  
  13.   
  14. import com.wesley.framework.dao.dbutils.DBHelper;  
  15.   
  16. /** 
  17.  * 流水号生成类 
  18.  *  
  19.  * @author it.zl 
  20.  *  
  21.  */  
  22. public class PrimaryGenerater {  
  23.   
  24.     /** 
  25.      * 单例 
  26.      */  
  27.     private static PrimaryGenerater primaryGenerater = null;  
  28.     /** 
  29.      * 数据库访问类 
  30.      */  
  31.     private DBHelper dbHelper;  
  32.     /** 
  33.      * 生成流水号的SQL,支持多种格式,如业务BIZ,非业务NOBIZ 
  34.      */  
  35.     private Map<String, String> sqls = new HashMap<String, String>();  
  36.     /** 
  37.      * 对应不用的SQL生产的不同参数类 
  38.      */  
  39.     private Map<String, PrimaryBean> primarBeans = new HashMap<String, PrimaryBean>();  
  40.   
  41.     private PrimaryGenerater() {  
  42.         super();  
  43.     }  
  44.   
  45.     public PrimaryGenerater(BasicDataSource database, Map<String, String> sqls) {  
  46.         super();  
  47.         this.dbHelper = new DBHelper(database);  
  48.         this.sqls = sqls;  
  49.         for (String key : sqls.keySet()) {  
  50.             this.primarBeans.put(key, this.getPrimaryBeanByDatabase(key));  
  51.         }  
  52.     }  
  53.   
  54.     public static PrimaryGenerater newInstance(BasicDataSource database,  
  55.             Map<String, String> sqls) {  
  56.         synchronized (PrimaryGenerater.class) {  
  57.             primaryGenerater = new PrimaryGenerater(database, sqls);  
  58.         }  
  59.         return primaryGenerater;  
  60.     }  
  61.   
  62.     /** 
  63.      *  
  64.      * 取得PrimaryGenerater的单例实现 
  65.      *  
  66.      * @return 
  67.      */  
  68.     public static PrimaryGenerater getInstance() {  
  69.         if (primaryGenerater == null) {  
  70.             synchronized (PrimaryGenerater.class) {  
  71.                 if (primaryGenerater == null) {  
  72.                     primaryGenerater = new PrimaryGenerater();  
  73.                 }  
  74.             }  
  75.         }  
  76.         return primaryGenerater;  
  77.     }  
  78.   
  79.     /** 
  80.      * 通过 数据库查询键获得封装类 
  81.      *  
  82.      * @param key 
  83.      * @return 
  84.      */  
  85.     public synchronized PrimaryBean getPrimaryBeanByDatabase(String key) {  
  86.         if (!this.sqls.containsKey(key))  
  87.             return null;  
  88.         PrimaryBean primaryBean = this.primarBeans.get(key);  
  89.         if (primaryBean != null && !primaryBean.getIsDataBase())  
  90.             return primaryBean;  
  91.         primaryBean = dbHelper.findFirst(PrimaryBean.classthis.sqls.get(key));  
  92.         return primaryBean;  
  93.     }  
  94.   
  95.     /** 
  96.      * 通过数据库查询键位生成流水号 
  97.      *  
  98.      * @param key 
  99.      * @return 
  100.      */  
  101.     public synchronized String geneterNextNumberByKey(String key) {  
  102.         PrimaryBean primaryBean = this.getPrimaryBeanByDatabase(key);  
  103.         return this.geneterNextNumber(primaryBean);  
  104.     }  
  105.   
  106.     /** 
  107.      * 通过封装类生成流水号 
  108.      *  
  109.      * @param primaryBean 
  110.      * @return 
  111.      */  
  112.     public synchronized String geneterNextNumber(PrimaryBean primaryBean) {  
  113.         String nextNumber = this.geneterNextNumber(isRestart(primaryBean),  
  114.                 primaryBean.getStartNumber());  
  115.         primaryBean.setStartNumber(nextNumber);  
  116.         String dataString = this.geneterDataString(primaryBean.getDataString());  
  117.         primaryBean.setDateTimeString(dataString);  
  118.         String serialNumber = primaryBean.getPrefix() + dataString + nextNumber;  
  119.         return serialNumber;  
  120.     }  
  121.   
  122.     private synchronized Boolean isRestart(PrimaryBean primaryBean) {  
  123.         GregorianCalendar gcNow = new GregorianCalendar();  
  124.         GregorianCalendar date = primaryBean.getDateTime();  
  125.         if (StringUtils.equalsIgnoreCase(PrimaryBean.YEAR,  
  126.                 primaryBean.getRepeatCycle())) {  
  127.             if (gcNow.get(GregorianCalendar.YEAR) == date  
  128.                     .get(GregorianCalendar.YEAR))  
  129.                 return false;  
  130.         }  
  131.         if (StringUtils.equalsIgnoreCase(PrimaryBean.MONTH,  
  132.                 primaryBean.getRepeatCycle())) {  
  133.             if (gcNow.get(GregorianCalendar.YEAR) == date  
  134.                     .get(GregorianCalendar.YEAR)  
  135.                     && gcNow.get(GregorianCalendar.MONTH) == date  
  136.                             .get(GregorianCalendar.MONTH))  
  137.                 return false;  
  138.         }  
  139.         if (StringUtils.equalsIgnoreCase(PrimaryBean.DAY,  
  140.                 primaryBean.getRepeatCycle())) {  
  141.             if (DateUtils.isSameDay(gcNow, date))  
  142.                 return false;  
  143.         }  
  144.         return true;  
  145.     }  
  146.   
  147.     /** 
  148.      * 通过开始数字字符串生成下一个流水号 
  149.      *  
  150.      * @param startNumber 
  151.      * @return 
  152.      */  
  153.     public synchronized String geneterNextNumber(Boolean isRestart,  
  154.             String startNumber) {  
  155.         Long temp = Long.valueOf(startNumber) + 1;  
  156.         StringBuilder sb = new StringBuilder();  
  157.         for (int i = 0; i < startNumber.length(); i++)  
  158.             sb.append("0");  
  159.         DecimalFormat df = new DecimalFormat(sb.toString());  
  160.         return isRestart ? sb.toString() : df.format(temp);  
  161.     }  
  162.   
  163.     /** 
  164.      * 通过 格式生成日期格式 
  165.      *  
  166.      * @param dataformat 
  167.      * @return 
  168.      */  
  169.     private synchronized String geneterDataString(String dataformat) {  
  170.         SimpleDateFormat formatter = new SimpleDateFormat(dataformat);  
  171.         return formatter.format(new Date());  
  172.     }  
  173. }  

Java代码   收藏代码
  1. package com.wesley.framework.dao.dbutils;  
  2.   
  3. import java.math.BigDecimal;  
  4. import java.sql.SQLException;  
  5. import java.util.ArrayList;  
  6. import java.util.List;  
  7. import java.util.Map;  
  8.   
  9. import org.apache.commons.dbcp.BasicDataSource;  
  10. import org.apache.commons.dbutils.BasicRowProcessor;  
  11. import org.apache.commons.dbutils.QueryRunner;  
  12. import org.apache.commons.dbutils.handlers.BeanHandler;  
  13. import org.apache.commons.dbutils.handlers.BeanListHandler;  
  14. import org.apache.commons.dbutils.handlers.MapHandler;  
  15. import org.apache.commons.dbutils.handlers.MapListHandler;  
  16. import org.apache.commons.dbutils.handlers.ScalarHandler;  
  17. import org.apache.commons.logging.Log;  
  18. import org.apache.commons.logging.LogFactory;  
  19.   
  20. import com.wesley.framework.commen.StringFormat;  
  21.   
  22. public class DBHelper {  
  23.     private static final Log logger = LogFactory.getLog(DBHelper.class);  
  24.   
  25.     private BasicDataSource dataSource;  
  26.     private QueryRunner queryRunner;  
  27.   
  28.     public DBHelper(BasicDataSource dataSource) {  
  29.         super();  
  30.         this.dataSource = dataSource;  
  31.     }  
  32.   
  33.     public void setDataSource(BasicDataSource dataSource) {  
  34.         this.dataSource = dataSource;  
  35.     }  
  36.   
  37.     /** 
  38.      * 执行sql语句 
  39.      *  
  40.      * @param sql 
  41.      *            sql语句 
  42.      * @return 受影响的行数 
  43.      */  
  44.     public int update(String sql) {  
  45.         return update(sql, null);  
  46.     }  
  47.   
  48.     /** 
  49.      * 执行sql语句 <code>  
  50.      * executeUpdate("update user set username = 'kitty' where username = ?", "hello kitty");  
  51.      * </code> 
  52.      *  
  53.      * @param sql 
  54.      *            sql语句 
  55.      * @param param 
  56.      *            参数 
  57.      * @return 受影响的行数 
  58.      */  
  59.     public int update(String sql, Object param) {  
  60.         return update(sql, new Object[] { param });  
  61.     }  
  62.   
  63.     /** 
  64.      * 执行sql语句 
  65.      *  
  66.      * @param sql 
  67.      *            sql语句 
  68.      * @param params 
  69.      *            参数数组 
  70.      * @return 受影响的行数 
  71.      */  
  72.     public int update(String sql, Object[] params) {  
  73.         queryRunner = new QueryRunner(dataSource);  
  74.         int affectedRows = 0;  
  75.         try {  
  76.             if (params == null) {  
  77.                 affectedRows = queryRunner.update(sql);  
  78.             } else {  
  79.                 affectedRows = queryRunner.update(sql, params);  
  80.             }  
  81.         } catch (SQLException e) {  
  82.             logger.error("Error occured while attempting to update data", e);  
  83.         }  
  84.         return affectedRows;  
  85.     }  
  86.   
  87.     /** 
  88.      * 执行批量sql语句 
  89.      *  
  90.      * @param sql 
  91.      *            sql语句 
  92.      * @param params 
  93.      *            二维参数数组 
  94.      * @return 受影响的行数的数组 
  95.      */  
  96.     public int[] batchUpdate(String sql, Object[][] params) {  
  97.         queryRunner = new QueryRunner(dataSource);  
  98.         int[] affectedRows = new int[0];  
  99.         try {  
  100.             affectedRows = queryRunner.batch(sql, params);  
  101.         } catch (SQLException e) {  
  102.             logger.error("Error occured while attempting to batch update data",  
  103.                     e);  
  104.         }  
  105.         return affectedRows;  
  106.     }  
  107.   
  108.     /** 
  109.      * 执行查询,将每行的结果保存到一个Map对象中,然后将所有Map对象保存到List中 
  110.      *  
  111.      * @param sql 
  112.      *            sql语句 
  113.      * @return 查询结果 
  114.      */  
  115.     public List<Map<String, Object>> find(String sql) {  
  116.         return find(sql, null);  
  117.     }  
  118.   
  119.     /** 
  120.      * 执行查询,将每行的结果保存到一个Map对象中,然后将所有Map对象保存到List中 
  121.      *  
  122.      * @param sql 
  123.      *            sql语句 
  124.      * @param param 
  125.      *            参数 
  126.      * @return 查询结果 
  127.      */  
  128.     public List<Map<String, Object>> find(String sql, Object param) {  
  129.         return find(sql, new Object[] { param });  
  130.     }  
  131.   
  132.     /** 
  133.      * 执行查询,将每行的结果保存到一个Map对象中,然后将所有Map对象保存到List中 
  134.      *  
  135.      * @param sql 
  136.      *            sql语句 
  137.      * @param params 
  138.      *            参数数组 
  139.      * @return 查询结果 
  140.      */  
  141.     public List<Map<String, Object>> find(String sql, Object[] params) {  
  142.         queryRunner = new QueryRunner(dataSource);  
  143.         List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();  
  144.         try {  
  145.             if (params == null) {  
  146.                 list = (List<Map<String, Object>>) queryRunner.query(sql,  
  147.                         new MapListHandler());  
  148.             } else {  
  149.                 list = (List<Map<String, Object>>) queryRunner.query(sql,  
  150.                         new MapListHandler(), params);  
  151.             }  
  152.         } catch (SQLException e) {  
  153.             logger.error("Error occured while attempting to query data", e);  
  154.         }  
  155.         return list;  
  156.     }  
  157.   
  158.     /** 
  159.      * 执行查询,将每行的结果保存到Bean中,然后将所有Bean保存到List中 
  160.      *  
  161.      * @param entityClass 
  162.      *            类名 
  163.      * @param sql 
  164.      *            sql语句 
  165.      * @return 查询结果 
  166.      */  
  167.     public <T> List<T> find(Class<T> entityClass, String sql) {  
  168.         return find(entityClass, sql, null);  
  169.     }  
  170.   
  171.     /** 
  172.      * 执行查询,将每行的结果保存到Bean中,然后将所有Bean保存到List中 
  173.      *  
  174.      * @param entityClass 
  175.      *            类名 
  176.      * @param sql 
  177.      *            sql语句 
  178.      * @param param 
  179.      *            参数 
  180.      * @return 查询结果 
  181.      */  
  182.     public <T> List<T> find(Class<T> entityClass, String sql, Object param) {  
  183.         return find(entityClass, sql, new Object[] { param });  
  184.     }  
  185.   
  186.     /** 
  187.      * 执行查询,将每行的结果保存到Bean中,然后将所有Bean保存到List中 
  188.      *  
  189.      * @param entityClass 
  190.      *            类名 
  191.      * @param sql 
  192.      *            sql语句 
  193.      * @param params 
  194.      *            参数数组 
  195.      * @return 查询结果 
  196.      */  
  197.     public <T> List<T> find(Class<T> entityClass, String sql, Object[] params) {  
  198.         queryRunner = new QueryRunner(dataSource);  
  199.         List<T> list = new ArrayList<T>();  
  200.         try {  
  201.             if (params == null) {  
  202.                 list = queryRunner.query(sql, new BeanListHandler<T>(  
  203.                         entityClass, new BasicRowProcessor(  
  204.                                 new StrategyBeanProcessor(new HumpMatcher()))));  
  205.             } else {  
  206.                 list = queryRunner.query(sql, new BeanListHandler<T>(  
  207.                         entityClass, new BasicRowProcessor(  
  208.                                 new StrategyBeanProcessor(new HumpMatcher()))),  
  209.                         params);  
  210.             }  
  211.         } catch (SQLException e) {  
  212.             logger.error("Error occured while attempting to query data", e);  
  213.         }  
  214.         return list;  
  215.     }  
  216.   
  217.     /** 
  218.      * 查询出结果集中的第一条记录,并封装成对象 
  219.      *  
  220.      * @param entityClass 
  221.      *            类名 
  222.      * @param sql 
  223.      *            sql语句 
  224.      * @return 对象 
  225.      */  
  226.     public <T> T findFirst(Class<T> entityClass, String sql) {  
  227.         return findFirst(entityClass, sql, null);  
  228.     }  
  229.   
  230.     /** 
  231.      * 查询出结果集中的第一条记录,并封装成对象 
  232.      *  
  233.      * @param entityClass 
  234.      *            类名 
  235.      * @param sql 
  236.      *            sql语句 
  237.      * @param param 
  238.      *            参数 
  239.      * @return 对象 
  240.      */  
  241.     public <T> T findFirst(Class<T> entityClass, String sql, Object param) {  
  242.         return findFirst(entityClass, sql, new Object[] { param });  
  243.     }  
  244.   
  245.     /** 
  246.      * 查询出结果集中的第一条记录,并封装成对象 
  247.      *  
  248.      * @param entityClass 
  249.      *            类名 
  250.      * @param sql 
  251.      *            sql语句 
  252.      * @param params 
  253.      *            参数数组 
  254.      * @return 对象 
  255.      */  
  256.     @SuppressWarnings({ "unchecked" })  
  257.     public <T> T findFirst(Class<T> entityClass, String sql, Object[] params) {  
  258.         queryRunner = new QueryRunner(dataSource);  
  259.         Object object = null;  
  260.         try {  
  261.             if (params == null) {  
  262.                 object = queryRunner  
  263.                         .query(sql, new BeanHandler<T>(entityClass));  
  264.             } else {  
  265.                 object = queryRunner.query(sql,  
  266.                         new BeanHandler<T>(entityClass), params);  
  267.             }  
  268.         } catch (SQLException e) {  
  269.             logger.error("Error occured while attempting to query data", e);  
  270.         }  
  271.         return (T) object;  
  272.     }  
  273.   
  274.     /** 
  275.      * 查询出结果集中的第一条记录,并封装成Map对象 
  276.      *  
  277.      * @param sql 
  278.      *            sql语句 
  279.      * @return 封装为Map的对象 
  280.      */  
  281.     public Map<String, Object> findFirst(String sql) {  
  282.         return findFirst(sql, null);  
  283.     }  
  284.   
  285.     /** 
  286.      * 查询出结果集中的第一条记录,并封装成Map对象 
  287.      *  
  288.      * @param sql 
  289.      *            sql语句 
  290.      * @param param 
  291.      *            参数 
  292.      * @return 封装为Map的对象 
  293.      */  
  294.     public Map<String, Object> findFirst(String sql, Object param) {  
  295.         return findFirst(sql, new Object[] { param });  
  296.     }  
  297.   
  298.     /** 
  299.      * 查询出结果集中的第一条记录,并封装成Map对象 
  300.      *  
  301.      * @param sql 
  302.      *            sql语句 
  303.      * @param params 
  304.      *            参数数组 
  305.      * @return 封装为Map的对象 
  306.      */  
  307.     public Map<String, Object> findFirst(String sql, Object[] params) {  
  308.         queryRunner = new QueryRunner(dataSource);  
  309.         Map<String, Object> map = null;  
  310.         try {  
  311.             if (params == null) {  
  312.                 map = (Map<String, Object>) queryRunner.query(sql,  
  313.                         new MapHandler());  
  314.             } else {  
  315.                 map = (Map<String, Object>) queryRunner.query(sql,  
  316.                         new MapHandler(), params);  
  317.             }  
  318.         } catch (SQLException e) {  
  319.             logger.error("Error occured while attempting to query data", e);  
  320.         }  
  321.         return map;  
  322.     }  
  323.   
  324.     /** 
  325.      * 查询某一条记录,并将指定列的数据转换为Object 
  326.      *  
  327.      * @param sql 
  328.      *            sql语句 
  329.      * @param columnName 
  330.      *            列名 
  331.      * @return 结果对象 
  332.      */  
  333.     public Object findBy(String sql, String columnName) {  
  334.         return findBy(sql, columnName, null);  
  335.     }  
  336.   
  337.     /** 
  338.      * 查询某一条记录,并将指定列的数据转换为Object 
  339.      *  
  340.      * @param sql 
  341.      *            sql语句 
  342.      * @param columnName 
  343.      *            列名 
  344.      * @param param 
  345.      *            参数 
  346.      * @return 结果对象 
  347.      */  
  348.     public Object findBy(String sql, String columnName, Object param) {  
  349.         return findBy(sql, columnName, new Object[] { param });  
  350.     }  
  351.   
  352.     /** 
  353.      * 查询某一条记录,并将指定列的数据转换为Object 
  354.      *  
  355.      * @param sql 
  356.      *            sql语句 
  357.      * @param columnName 
  358.      *            列名 
  359.      * @param params 
  360.      *            参数数组 
  361.      * @return 结果对象 
  362.      */  
  363.     public Object findBy(String sql, String columnName, Object[] params) {  
  364.         queryRunner = new QueryRunner(dataSource);  
  365.         Object object = null;  
  366.         try {  
  367.             if (params == null) {  
  368.                 object = queryRunner.query(sql, new ScalarHandler(columnName));  
  369.             } else {  
  370.                 object = queryRunner.query(sql, new ScalarHandler(columnName),  
  371.                         params);  
  372.             }  
  373.         } catch (SQLException e) {  
  374.             logger.error("Error occured while attempting to query data", e);  
  375.         }  
  376.         return object;  
  377.     }  
  378.   
  379.     /** 
  380.      * 查询某一条记录,并将指定列的数据转换为Object 
  381.      *  
  382.      * @param sql 
  383.      *            sql语句 
  384.      * @param columnIndex 
  385.      *            列索引 
  386.      * @return 结果对象 
  387.      */  
  388.     public Object findBy(String sql, int columnIndex) {  
  389.         return findBy(sql, columnIndex, null);  
  390.     }  
  391.   
  392.     public boolean exist(String sql, Object... params) {  
  393.         int x = this.findInteger(  
  394.                 StringFormat.format("SELECT COUNT(*) FROM ({0})", sql), params);  
  395.         return x <= 0 ? false : true;  
  396.     }  
  397.   
  398.     public int findInteger(String sql, Object... params) {  
  399.         Object o = findBy(sql, null, params);  
  400.         if (BigDecimal.class.equals(o.getClass()))  
  401.             return ((BigDecimal) o).intValue();  
  402.         return (Integer) o;  
  403.     }  
  404.   
  405.     /** 
  406.      * 查询某一条记录,并将指定列的数据转换为Object 
  407.      *  
  408.      * @param sql 
  409.      *            sql语句 
  410.      * @param columnIndex 
  411.      *            列索引 
  412.      * @param param 
  413.      *            参数 
  414.      * @return 结果对象 
  415.      */  
  416.     public Object findBy(String sql, int columnIndex, Object param) {  
  417.         return findBy(sql, columnIndex, new Object[] { param });  
  418.     }  
  419.   
  420.     /** 
  421.      * 查询某一条记录,并将指定列的数据转换为Object 
  422.      *  
  423.      * @param sql 
  424.      *            sql语句 
  425.      * @param columnIndex 
  426.      *            列索引 
  427.      * @param params 
  428.      *            参数数组 
  429.      * @return 结果对象 
  430.      */  
  431.     public Object findBy(String sql, int columnIndex, Object[] params) {  
  432.         queryRunner = new QueryRunner(dataSource);  
  433.         Object object = null;  
  434.         try {  
  435.             if (params == null) {  
  436.                 object = queryRunner.query(sql, new ScalarHandler(columnIndex));  
  437.             } else {  
  438.                 object = queryRunner.query(sql, new ScalarHandler(columnIndex),  
  439.                         params);  
  440.             }  
  441.         } catch (SQLException e) {  
  442.             logger.error("Error occured while attempting to query data", e);  
  443.         }  
  444.         return object;  
  445.     }  
  446.   
  447. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值