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
原创粉丝点击