spring多数据源3
来源:互联网 发布:五子棋最强软件 编辑:程序博客网 时间:2024/06/06 01:29
@Repositorypublic abstract class DaoTemplate{protected abstract Session getSession(); private String type ; public String getType() {return type;}protected void setType(String type){ this.type = type ;};private void sqlQueryInit(SQLQuery sqlQuery , SQLParam sp){ String sql = sp.getSql().toString() ; String[] para = sql.replace("," , "").split(" ") ;String father = "" ;List<String> columes = new ArrayList<String>() ;for(String s : para){if(s == null || s.trim().equals("")) continue ;s = s.trim() ;if(s.equals("as")){father = "as" ;}else if(father.equals("as")){ columes.add(s) ; father = s ;}} for(String colume : columes) { sqlQuery.addScalar(colume , StandardBasicTypes.STRING) ;} countQueryInit(sqlQuery , sp) ; } private void countQueryInit(SQLQuery sqlQuery , SQLParam sp){for(Map.Entry<String , String> e : sp.getSetStrings().entrySet()){sqlQuery.setString(e.getKey() , e.getValue()) ;}for(Map.Entry<String , Date> e : sp.getSetDates().entrySet()){sqlQuery.setDate(e.getKey() , e.getValue()) ;}for(Map.Entry<String , Date> e : sp.getSetTimestamps().entrySet()){sqlQuery.setTimestamp(e.getKey() , e.getValue()) ;}for(Map.Entry<String, Long> e : sp.getSetlongs().entrySet()){sqlQuery.setLong(e.getKey() , e.getValue()) ;}for(Map.Entry<String, Integer> e : sp.getSetIntegers().entrySet()){sqlQuery.setInteger(e.getKey() , e.getValue()) ;} }public DataWrapper<List<Map<String , String>>> getBySQLParam(SQLParam sp){DataWrapper<List<Map<String , String>>> retDw = new DataWrapper<List<Map<String , String>>>() ;Session session = getSession() ;SQLQuery query = session.createSQLQuery( sp.getQuerySql() ) ;sqlQueryInit(query, sp) ;if(sp.getNumberPerPage() > 0 && sp.getPageNumber() > 0){query.setMaxResults(sp.getNumberPerPage()) ;query.setFirstResult((sp.getPageNumber() - 1) * sp.getNumberPerPage()) ;@SuppressWarnings("unchecked")List<Map<String , String>> data = query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).list() ;if(data.size()==0||data==null){data = new ArrayList<Map<String , String>>();}retDw.setData(data) ;SQLQuery countQuery = session.createSQLQuery( sp.getCountSql() ) ;countQueryInit(countQuery, sp) ;int totalItemNum = 0;if("pg".equals(getType())){totalItemNum = ((java.math.BigInteger)countQuery.list().get(0)).intValue() ;}else if("oracle".equals(getType())){totalItemNum = ((java.math.BigDecimal)countQuery.list().get(0)).intValue() ;}int totalPageNum = DaoUtils.getTotalPageNumber(totalItemNum, sp.getNumberPerPage() ) ;retDw.setTotalNumber(totalItemNum) ;retDw.setTotalPage(totalPageNum) ;retDw.setCurrentPage(sp.getPageNumber()) ;retDw.setNumberPerPage(sp.getNumberPerPage()) ;}else{@SuppressWarnings("unchecked")List<Map<String , String>> data = query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).list() ;if(data.size()==0||data==null){data = new ArrayList<Map<String , String>>();}retDw.setData(data) ;}return retDw ;}public Integer getCountBySQLParam(SQLParam sp){Session session = getSession() ;SQLQuery countQuery = session.createSQLQuery( sp.getCountSql() ) ; countQueryInit(countQuery, sp) ;return ((java.math.BigInteger)countQuery.list().get(0)).intValue() ;} public void save(Object entity) { Session session = getSession(); try{ session.beginTransaction(); session.save(entity); session.getTransaction().commit(); session.flush(); }catch(Exception e){ session.getTransaction().rollback(); } } public void delete(Object entity) { Session session = getSession(); try{ session.beginTransaction(); session.delete(entity); session.getTransaction().commit(); session.flush(); }catch(Exception e){ session.getTransaction().rollback(); } }}@Servicepublic class OracleDao extends DaoTemplate{@Autowired @Resource(name="oracleSessionFactory") protected SessionFactory sessionFactory;protected Session getSession() { return sessionFactory.getCurrentSession(); }@PostConstructvoid init(){super.setType("oracle") ;}}@Servicepublic class PgDao extends DaoTemplate{@Autowired @Resource(name="pgSessionFactory") protected SessionFactory sessionFactory;protected Session getSession() { return sessionFactory.getCurrentSession(); }@PostConstructvoid init(){super.setType("pg") ;}}public class SQLParam{ private List<String> addScalars ; private Map<String , String> setStrings ;private Map<String , Date> setDates ;private Map<String , Long> setLongs ;private Map<String , Integer> setIntegers ;private Map<String , Date> setTimestamps ;private StringBuffer sql ;private StringBuffer condition ;private StringBuffer orderBy ;private Integer numberPerPage ;private Integer pageNumber ; private String toCountTable ; public SQLParam() { addScalars = new ArrayList<String>() ; setStrings = new HashMap<String , String>() ; setDates = new HashMap<String , Date>() ; setLongs = new HashMap<String , Long>() ; setIntegers = new HashMap<String , Integer>() ; setTimestamps = new HashMap<String , Date>() ; sql = null ; condition = null ; orderBy = null ; toCountTable = null ; numberPerPage = -1 ; pageNumber = -1 ; } public void addScalar(String... keys){ for(String key : keys) addScalars.add(key) ; } public void setString(String key , String value){ setStrings.put(key, value) ; } public void setLong(String key , Long value){ setLongs.put(key, value) ; } public void setDate(String key , Date value){ setDates.put(key, value) ; } public void setInteger(String key , Integer value){ setIntegers.put(key, value) ; } public void setTimestamp(String key , Date value){ setTimestamps.put(key, value) ; } public Map<String, Date> getSetTimestamps() {return setTimestamps;}public List<String> getAddScalars() { return addScalars; } public Map<String, String> getSetStrings() { return setStrings; } public Map<String, Long> getSetlongs() { return setLongs ; } public Map<String, Integer> getSetIntegers() { return setIntegers ; } public Map<String, Date> getSetDates() { return setDates; }public void setSql(StringBuffer sql) {this.sql = sql;}public StringBuffer getSql() {return sql;}public void setCondition(StringBuffer condition) {this.condition = condition;}public void setOrderBy(StringBuffer orderBy) {this.orderBy = orderBy;}public Integer getNumberPerPage() {return numberPerPage;}public void setNumberPerPage(Integer numberPerPage) {this.numberPerPage = numberPerPage;}public Integer getPageNumber() {return pageNumber;}public void setPageNumber(Integer pageNumber) {this.pageNumber = pageNumber;}public String getToCountTable() {return toCountTable;}public void setToCountTable(String toCountTable) {this.toCountTable = toCountTable;}public String getQuerySql(){return new StringBuffer( sql ).append( condition ).append( orderBy == null ? "" : orderBy ).toString() ;}public String getCountSql(){if(toCountTable == null) return new StringBuffer( "select count(1) " ).append( condition ).toString() ;else return new StringBuffer( "select count(" + toCountTable + ") " ).append( condition ).toString() ;}}
0 0
- spring多数据源3
- spring多数据源
- spring 多数据源
- spring 多数据源
- spring多数据源
- Spring多数据源解决方案
- Spring多数据源解决方案
- Spring+Hibernate多数据源
- spring配置多数据源
- Spring多数据源配置
- spring 多数据源链接
- Spring多数据源解决方案
- 多数据源与Spring
- Spring多数据源配置
- spring 多数据源切换
- spring多数据源配置
- SPRING IBATIS 多数据源
- spring mybatis 多数据源
- Tushare + pyalgotrade + pandas 环境搭建(MAC环境)
- 获取页面的最终更新时间
- java——interface
- 字符串补0代码
- 转:基于http方式的git服务器搭建
- spring多数据源3
- RedisDesktopManager连接不上redis
- Spring Boot Junit单元测试
- 完全理解Python迭代对象、迭代器、生成器
- CF 70E Information Reform
- Java中关于字符串对象一些易错的点
- RunTime交换方法的实现
- xcode 8 widget 真机调试
- array_key_exists() 与 isset() 的区别