首页 > 代码库 > OSChina底层数据库操作的类(QueryHelper)源码
OSChina底层数据库操作的类(QueryHelper)源码
OSChina 使用的是 dbutils 这个JDBC的封装类库来进行数据库操作。而 QueryHelper 则是在 dbutils 的基础上进行一级简单的封装,提供一些常用的数据库操作方法和对数据缓存的支持。
数据库连接的释放方法请看这里。
数据库连接的释放方法请看这里。
标签: OSCHINA JDBC 数据库 DbUtils
[1].[代码] QueryHelper.java 跳至 [1]
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 | package my.db; import java.io.Serializable; import java.math.BigInteger; import java.sql.*; import java.util.*; import my.cache.CacheManager; import net.oschina.Configurations; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.*; import org.apache.commons.lang.ArrayUtils; /** * 数据库查询助手 * @author Winter Lau<br> */ @SuppressWarnings ( "unchecked" ) public class QueryHelper { private final static QueryRunner _g_runner = new QueryRunner(); private final static ColumnListHandler _g_columnListHandler = new ColumnListHandler(){ @Override protected Object handleRow(ResultSet rs) throws SQLException { Object obj = super .handleRow(rs); if (obj instanceof BigInteger) return ((BigInteger)obj).longValue(); return obj; } }; private final static ScalarHandler _g_scaleHandler = new ScalarHandler(){ @Override public Object handle(ResultSet rs) throws SQLException { Object obj = super .handle(rs); if (obj instanceof BigInteger) return ((BigInteger)obj).longValue(); return obj; } }; private final static List<Class<?>> PrimitiveClasses = new ArrayList<Class<?>>(){{ add(Long. class ); add(Integer. class ); add(String. class ); add(java.util.Date. class ); add(java.sql.Date. class ); add(java.sql.Timestamp. class ); }}; private final static boolean _IsPrimitive(Class<?> cls) { return cls.isPrimitive() || PrimitiveClasses.contains(cls) ; } /** * 获取数据库连接 * @return */ public static Connection getConnection() { try { return Configurations.getConnection(); } catch (SQLException e){ throw new DBException(e); } } /** * 读取某个对象 * @param sql * @param params * @return */ @SuppressWarnings ( "rawtypes" ) public static <T> T read(Class<T> beanClass, String sql, Object...params) { try { return (T)_g_runner.query(getConnection(), sql, _IsPrimitive(beanClass)?_g_scaleHandler: new BeanHandler(beanClass), params); } catch (SQLException e){ throw new DBException(e); } } public static <T> T read_cache(Class<T> beanClass, String cache, Serializable key, String sql, Object...params) { T obj = (T)CacheManager.get(cache, key); if (obj == null ){ obj = read(beanClass, sql, params); CacheManager.set(cache, key, (Serializable)obj); } return obj; } /** * 对象查询 * @param <T> * @param beanClass * @param sql * @param params * @return */ @SuppressWarnings ( "rawtypes" ) public static <T> List<T> query(Class<T> beanClass, String sql, Object...params) { try { return (List<T>)_g_runner.query(getConnection(), sql, _IsPrimitive(beanClass)?_g_columnListHandler: new BeanListHandler(beanClass), params); } catch (SQLException e){ throw new DBException(e); } } /** * 支持缓存的对象查询 * @param <T> * @param beanClass * @param cache_region * @param key * @param sql * @param params * @return */ public static <T> List<T> query_cache(Class<T> beanClass, String cache_region, Serializable key, String sql, Object...params) { List<T> objs = (List<T>)CacheManager.get(cache_region, key); if (objs == null ){ objs = query(beanClass, sql, params); CacheManager.set(cache_region, key, (Serializable)objs); } return objs; } /** * 分页查询 * @param <T> * @param beanClass * @param sql * @param page * @param count * @param params * @return */ public static <T> List<T> query_slice(Class<T> beanClass, String sql, int page, int count, Object...params) { if (page < 0 || count < 0 ) throw new IllegalArgumentException( "Illegal parameter of ‘page‘ or ‘count‘, Must be positive." ); int from = (page - 1 ) * count; count = (count > 0 ) ? count : Integer.MAX_VALUE; return query(beanClass, sql + " LIMIT ?,?" , ArrayUtils.addAll(params, new Integer[]{from,count})); } /** * 支持缓存的分页查询 * @param <T> * @param beanClass * @param cache * @param cache_key * @param cache_obj_count * @param sql * @param page * @param count * @param params * @return */ public static <T> List<T> query_slice_cache(Class<T> beanClass, String cache, Serializable cache_key, int cache_obj_count, String sql, int page, int count, Object...params) { List<T> objs = (List<T>)CacheManager.get(cache, cache_key); if (objs == null ) { objs = query_slice(beanClass, sql, 1 , cache_obj_count, params); CacheManager.set(cache, cache_key, (Serializable)objs); } if (objs == null || objs.size()== 0 ) return objs; int from = (page - 1 ) * count; if (from < 0 ) return null ; if ((from+count) > cache_obj_count) //超出缓存的范围 return query_slice(beanClass, sql, page, count, params); int end = Math.min(from + count, objs.size()); if (from >= end) return null ; return objs.subList(from, end); } /** * 执行统计查询语句,语句的执行结果必须只返回一个数值 * @param sql * @param params * @return */ public static long stat(String sql, Object...params) { try { Number num = (Number)_g_runner.query(getConnection(), sql, _g_scaleHandler, params); return (num!= null )?num.longValue():- 1 ; } catch (SQLException e){ throw new DBException(e); } } /** * 执行统计查询语句,语句的执行结果必须只返回一个数值 * @param cache_region * @param key * @param sql * @param params * @return */ public static long stat_cache(String cache_region, Serializable key, String sql, Object...params) { Number value = http://www.mamicode.com/(Number)CacheManager.get(cache_region, key); if (value =http://www.mamicode.com/= null ){ value = http://www.mamicode.com/stat(sql, params); CacheManager.set(cache_region, key, value); } return value.longValue(); } /** * 执行INSERT/UPDATE/DELETE语句 * @param sql * @param params * @return */ public static int update(String sql, Object...params) { try { return _g_runner.update(getConnection(), sql, params); } catch (SQLException e){ throw new DBException(e); } } /** * 批量执行指定的SQL语句 * @param sql * @param params * @return */ public static int [] batch(String sql, Object[][] params) { try { return _g_runner.batch(getConnection(), sql, params); } catch (SQLException e){ throw new DBException(e); } } } |
OSChina底层数据库操作的类(QueryHelper)源码
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。