001package springdao; 002 003import java.io.Serializable; 004import java.util.Collection; 005import java.util.List; 006import java.util.Map; 007import org.apache.logging.log4j.Logger; 008import org.apache.logging.log4j.LogManager; 009import org.springframework.transaction.annotation.Propagation; 010import org.springframework.transaction.annotation.Transactional; 011 012/** 013 * Do everything that {@link DaoRepository } do, it's main purpose is 014 * transaction management.<br/> 015 * Standard JPA does not support custom isolation levels, So we must declare 016 * {@link Transactional @Transactional} here.<br/> 017 * 封裝{@link DaoRepository}的功能,只是為了交易控制. 018 * 019 * @author Kent Yeh 020 * @param <E> 021 */ 022@Transactional(readOnly = true) 023public class RepositoryManager<E> { 024 025 private DaoRepository<E> dao; 026 protected static Logger logger = LogManager.getLogger(RepositoryManager.class); 027 028 public DaoRepository<E> getDao() { 029 return dao; 030 } 031 032 public void setDao(DaoRepository<E> dao) { 033 this.dao = dao; 034 } 035 036 public E instanate() throws InstantiationException, IllegalAccessException { 037 return dao.instanate(); 038 } 039 040 public E findByPrimaryKey(Serializable primaryKey) { 041 return dao == null ? null : dao.findByPrimaryKey(primaryKey); 042 } 043 044 public E findByPrimaryKey(Serializable primaryKey, String lockMode) { 045 return dao == null ? null : dao.findByPrimaryKey(primaryKey, lockMode); 046 } 047 048 public E findByPrimaryKey(Serializable primaryKey, Map<String, Object> properties) { 049 return dao == null ? null : dao.findByPrimaryKey(primaryKey, properties); 050 } 051 052 /** 053 * @param properties Not used.不使用 054 */ 055 public E findByPrimaryKey(Serializable primaryKey, String lockMode, Map<String, Object> properties) { 056 return dao == null ? null : dao.findByPrimaryKey(primaryKey, lockMode, properties); 057 } 058 059 @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) 060 public E save(E entity) { 061 return dao == null ? null : dao.save(entity); 062 } 063 064 @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) 065 public Collection<E> save(Collection<E> entities) { 066 return dao == null ? null : dao.save(entities); 067 } 068 069 @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) 070 public E persist(E entity) { 071 return dao == null ? null : dao.persist(entity); 072 } 073 074 @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) 075 public E update(E entity) { 076 return dao == null ? null : dao.update(entity); 077 } 078 079 @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) 080 public Collection<E> update(Collection<E> entities) { 081 return dao == null ? null : dao.update(entities); 082 } 083 084 @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) 085 public E merge(E entity) { 086 return dao == null ? null : dao.merge(entity); 087 } 088 089 @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) 090 public Collection<E> merge(Collection<E> entity) { 091 return dao == null ? null : dao.merge(entity); 092 } 093 094 @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) 095 public E saveOrUpdate(E entity) { 096 return dao == null ? null : dao.saveOrUpdate(entity); 097 } 098 099 @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) 100 public Collection<E> saveOrUpdate(Collection<E> entities) { 101 return dao == null ? null : dao.saveOrUpdate(entities); 102 } 103 104 @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) 105 public void delete(Serializable primaryKey) { 106 dao.delete(primaryKey); 107 } 108 109 @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) 110 public void delete(Serializable primaryKey, String lockMode) { 111 dao.delete(primaryKey, lockMode); 112 } 113 114 @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) 115 public void delete(Collection<? extends Serializable> primaryKeys) { 116 dao.delete(primaryKeys); 117 } 118 119 @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) 120 public E remove(E entity) { 121 return dao.remove(entity); 122 } 123 124 @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) 125 public E remove(E entity, String lockMode) { 126 return dao.remove(entity, lockMode); 127 } 128 129 @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) 130 public Collection<E> remove(Collection<E> entities) { 131 return dao.remove(entities); 132 } 133 134 public E refresh(E entity) { 135 return dao == null ? null : dao.refresh(entity); 136 } 137 138 @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) 139 public E refresh(E entity, String lockMode) { 140 return dao == null ? null : dao.refresh(entity, lockMode); 141 } 142 143 @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) 144 public int sqlUpdate(String sql) { 145 return dao == null ? null : dao.sqlUpdate(sql); 146 } 147 148 @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) 149 public int sqlUpdate(String sql, Object... parameters) { 150 return dao == null ? null : dao.sqlUpdate(sql, parameters); 151 } 152 153 @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) 154 public int sqlUpdate(String sql, Map<String, ?>parameters) { 155 return dao == null ? null : dao.sqlUpdate(sql, parameters); 156 } 157 158 @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) 159 public List<Integer> sqlUpdate(List<String> sqls) { 160 return dao == null ? null : dao.sqlUpdate(sqls); 161 } 162 163 @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) 164 public int bulkUpdate(String QL) { 165 return dao == null ? null : dao.bulkUpdate(QL); 166 } 167 168 @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) 169 public List<Integer> bulkUpdate(List<String> QLs) { 170 return dao == null ? null : dao.bulkUpdate(QLs); 171 } 172 173 @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) 174 public int bulkUpdate(String QL, Object... parameters) { 175 return dao == null ? null : dao.bulkUpdate(QL, parameters); 176 } 177 178 @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) 179 public int bulkUpdate(String QL, Map<String, ?> parameters) { 180 return dao == null ? null : dao.bulkUpdate(QL, parameters); 181 } 182 183 public String getEntityName() { 184 return dao == null ? "" : dao.getEntityName(); 185 } 186 187 public String $e() { 188 return getEntityName(); 189 } 190 191 public String getAliasName() { 192 return dao == null ? "" : dao.getAliasName(); 193 } 194 195 public String $a() { 196 return getAliasName(); 197 } 198 199 public String $a(String field) { 200 return getAliasName() + "." + field; 201 } 202 203 public String $ea() { 204 return getEntityName() + " AS " + getAliasName(); 205 } 206 207 public List<E> findByCriteria(String qlCriteria) { 208 return dao == null ? null : dao.findByCriteria(qlCriteria); 209 } 210 211 public List<E> findByCriteria(String qlCriteria, Object... parameters) { 212 return dao == null ? null : dao.findByCriteria(qlCriteria, parameters); 213 } 214 215 public List<E> findByCriteria(String qlCriteria, Map<String, ?> parameters) { 216 return dao == null ? null : dao.findByCriteria(qlCriteria, parameters); 217 } 218 219 public List<E> findByCriteria(String qlCriteria, int startPageNo, int pageSize, Object... parameters) { 220 return dao == null ? null : dao.findByCriteria(qlCriteria, startPageNo, pageSize, parameters); 221 } 222 223 public List<E> findByCriteria(String qlCriteria, int startPageNo, int pageSize, Map<String, ?> parameters) { 224 return dao == null ? null : dao.findByCriteria(qlCriteria, startPageNo, pageSize, parameters); 225 } 226 227 public List<E> findByCriteria(String qlCriteria, int startPageNo, int pageSize) { 228 return dao == null ? null : dao.findByCriteria(qlCriteria, startPageNo, pageSize); 229 } 230 231 public E findFirstByCriteria(String qlCriteria) { 232 List<E> result = findByCriteria(qlCriteria, 1, 1); 233 return result.isEmpty() ? null : result.get(0); 234 } 235 236 public E findFirstByCriteria(String qlCriteria, Object... parameters) { 237 List<E> result = findByCriteria(qlCriteria, 1, 1, parameters); 238 return result.isEmpty() ? null : result.get(0); 239 } 240 241 public List<E> findByNamedQuery(String name) { 242 return dao == null ? null : dao.findByNamedQuery(name); 243 } 244 245 public List<E> findByNamedQuery(String name, Object... parameters) { 246 return dao == null ? null : dao.findByNamedQuery(name, parameters); 247 } 248 249 public List<E> findByNamedQuery(String name, Map<String, ?> parameters) { 250 return dao == null ? null : dao.findByNamedQuery(name, parameters); 251 } 252 253 public List<E> findBySQLQuery(String sql) { 254 return dao == null ? null : dao.findBySQLQuery(sql); 255 } 256 257 public List<E> findBySQLQuery(String sql, Object... parameters) { 258 return dao == null ? null : dao.findBySQLQuery(sql, parameters); 259 } 260 261 public List<E> findBySQLQuery(String sql, Map<String, ?> parameters) { 262 return dao == null ? null : dao.findBySQLQuery(sql, parameters); 263 } 264 265 public List<E> findBySQLQuery(String sql, String entityAlias) { 266 return dao == null ? null : dao.findBySQLQuery(sql, entityAlias); 267 } 268 269 public List<E> findBySQLQuery(String sql, String entityAlias, Object... parameters) { 270 return dao == null ? null : dao.findBySQLQuery(sql, entityAlias, parameters); 271 } 272 273 public <T> T findUniqueByQL(String QL) { 274 if (dao == null) { 275 return null; 276 } else { 277 return dao.findUniqueByQL(QL); 278 } 279 } 280 281 public <T> T findUniqueByQL(Class<T> clazz, String QL) { 282 return findUniqueByQL(QL); 283 } 284 285 public <T> T findUniqueByQL(String QL, Object... parameters) { 286 if (dao == null) { 287 return null; 288 } else { 289 return dao.findUniqueByQL(QL, parameters); 290 } 291 } 292 293 public <T> T findUniqueByQL(Class<T> clazz, String QL, Object... parameters) { 294 return findUniqueByQL(QL, parameters); 295 } 296 297 public <T> T findUniqueByQL(String QL, Map<String, ?> parameters) { 298 if (dao == null) { 299 return null; 300 } else { 301 return dao.findUniqueByQL(QL, parameters); 302 } 303 } 304 305 public <T> T findUniqueByQL(Class<T> clazz, String QL, Map<String, ?> parameters) { 306 return findUniqueByQL(QL, parameters); 307 } 308 309 public <T> List<T> findListByQL(String QL) { 310 if (dao == null) { 311 return null; 312 } else { 313 return dao.findListByQL(QL); 314 } 315 } 316 317 public <T> List<T> findListByQL(Class<T> clazz, String QL) { 318 return findListByQL(QL); 319 } 320 321 public <T> List<T> findListByQL(String QL, Object... parameters) { 322 if (dao == null) { 323 return null; 324 } else { 325 return dao.findListByQL(QL, parameters); 326 } 327 } 328 329 public <T> List<T> findListByQL(Class<T> clazz, String QL, Object... parameters) { 330 return findListByQL(QL, parameters); 331 } 332 333 public <T> List<T> findListByQL(String QL, Map<String, ?> parameters) { 334 if (dao == null) { 335 return null; 336 } else { 337 return dao.findListByQL(QL, parameters); 338 } 339 } 340 341 public <T> List<T> findListByQL(Class<T> clazz, String QL, Map<String, ?> parameters) { 342 return findListByQL(QL, parameters); 343 } 344 345 public <T> List<T> findListByNamedQuery(String name) { 346 if (dao == null) { 347 return null; 348 } else { 349 return dao.findListByNamedQuery(name); 350 } 351 } 352 353 public <T> List<T> findListByNamedQuery(Class<T> clazz, String name) { 354 return findListByNamedQuery(name); 355 } 356 357 public <T> List<T> findListByNamedQuery(String name, Object... parameters) { 358 if (dao == null) { 359 return null; 360 } else { 361 return dao.findListByNamedQuery(name, parameters); 362 } 363 364 } 365 366 public <T> List<T> findListByNamedQuery(Class<T> clazz, String name, Object... parameters) { 367 return findListByNamedQuery(name, parameters); 368 } 369 370 public <T> List<T> findListByNamedQuery(String name, Map<String, ?> parameters) { 371 if (dao == null) { 372 return null; 373 } else { 374 return dao.findListByNamedQuery(name, parameters); 375 } 376 377 } 378 379 public <T> List<T> findListByNamedQuery(Class<T> clazz, String name, Map<String, ?> parameters) { 380 return findListByNamedQuery(name, parameters); 381 } 382 383 public E initLazyCollection(E entity, String collectionFieldName) { 384 return dao == null ? null : dao.initLazyCollection(entity, collectionFieldName); 385 } 386 387 public void clear() { 388 if (dao != null) { 389 dao.clear(); 390 } 391 } 392}