Commit 085176f3a6f75f5a780b62fdd4ac8346632fbc55

Authored by 王彬
1 parent 460ec6a3

1.add find by class methods

@@ -19,12 +19,15 @@ mainClassName = 'com.taover.repository.UtilsString' @@ -19,12 +19,15 @@ mainClassName = 'com.taover.repository.UtilsString'
19 19
20 dependencies { 20 dependencies {
21 compile("org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.2.Final") 21 compile("org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.2.Final")
22 - compile('org.springframework:spring-jdbc:5.1.9.RELEAS') 22 + compile('org.springframework:spring-jdbc:5.1.9.RELEASE')
23 compile('mysql:mysql-connector-java:5.1.47') 23 compile('mysql:mysql-connector-java:5.1.47')
24 } 24 }
25 25
26 repositories { 26 repositories {
27 jcenter() 27 jcenter()
  28 + maven{ url 'http://repository.sonatype.org/content/groups/public/' }
  29 + maven{ url 'https://repository.jboss.org/nexus/content/groups/public/' }
  30 + maven{ url 'http://47.93.122.69:9001/repository/maven-releases/' }
28 } 31 }
29 32
30 task sourcesJar(type: Jar, dependsOn: classes) { 33 task sourcesJar(type: Jar, dependsOn: classes) {
src/main/java/com/taover/repository/CustomJdbcTemplate.java
@@ -622,4 +622,184 @@ public class CustomJdbcTemplate<T, ID extends Serializable> { @@ -622,4 +622,184 @@ public class CustomJdbcTemplate<T, ID extends Serializable> {
622 countData = this.jdbcTemplateRead.queryForMap(countSql); 622 countData = this.jdbcTemplateRead.queryForMap(countSql);
623 return UtilsSql.createPage(page, Integer.valueOf(countData.get("rows").toString()), queryData); 623 return UtilsSql.createPage(page, Integer.valueOf(countData.get("rows").toString()), queryData);
624 } 624 }
  625 +
  626 +
  627 + /**
  628 + * 按主键查询
  629 + */
  630 + public <E> E findBeanByID(ID id, Class<E> beanClass) {
  631 + return findBeanByID(id, true, false, beanClass);
  632 + }
  633 +
  634 + /**
  635 + * 按主键查询
  636 + * isLock 是否锁定, 默认不锁
  637 + * fromWriteDB 是否从写库读写,默认从读库查询
  638 + */
  639 + public <E> E findBeanByID(ID id, boolean fromWriteDB, boolean isLock, Class<E> beanClass) {
  640 + StringBuffer sql = new StringBuffer("SELECT "+this.tableFieldNameListGapWithComma+" FROM "+this.getTableSql());
  641 + StringBuffer pql = new StringBuffer(sql.toString());
  642 + sql.append(" WHERE "+idTableFieldName+" = ?");
  643 + pql.append(" WHERE "+idTableFieldName+" = " + id);
  644 + if (isLock) {
  645 + sql.append(" FOR UPDATE");
  646 + pql.append(" FOR UPDATE");
  647 + }
  648 + return (E) (fromWriteDB ? jdbcTemplateWrite : jdbcTemplateRead).queryForObject(sql.toString(), new CustomJdbcTemplateRowMapper(beanClass, this.tableToBeanField), id);
  649 + }
  650 +
  651 + /**
  652 + * 根据条件List<Object[]>查询
  653 + * Object[]数组长度是3
  654 + * Object[], 第一个参数是列名,第二个参数是操作符,第三个参数是查询条件的值。
  655 + */
  656 + public <E> E findBeanByCondition(List<Object[]> condition, Class<E> beanClass) throws Exception {
  657 + List<E> tempList = findBeanListByCondition(condition, null, false, beanClass);
  658 + if(tempList == null || tempList.size() == 0){
  659 + return null;
  660 + }
  661 + if(tempList != null && tempList.size() == 1){
  662 + return tempList.get(0);
  663 + }else{
  664 + throw new Exception("数据库存在多条记录满足条件");
  665 + }
  666 + }
  667 +
  668 + /**
  669 + * 根据条件sql查询
  670 + * sqlCondition 为where 后面的条件。
  671 + */
  672 + public <E> E findBeanBySql(String sqlCondition, Class<E> beanClass) throws Exception{
  673 + List<E> tempList = findBeanListBySql(sqlCondition, false, beanClass);
  674 + if(tempList == null || tempList.size() == 0){
  675 + return null;
  676 + }
  677 + if(tempList != null && tempList.size() == 1){
  678 + return tempList.get(0);
  679 + }else{
  680 + throw new Exception("数据库存在多条记录满足条件");
  681 + }
  682 + }
  683 +
  684 + /**
  685 + * 根据条件List<Object[]>查询
  686 + * Object[]数组长度是3
  687 + * Object[], 第一个参数是列名,第二个参数是操作符,第三个参数是查询条件的值。
  688 + */
  689 + public <E> List<E> findBeanListByCondition(List<Object[]> condition, Class<E> beanClass) {
  690 + return findBeanListByCondition(condition, null, false, beanClass);
  691 + }
  692 +
  693 + /**
  694 + * 根据条件List<Object[]>查询
  695 + * Object[]数组长度是3
  696 + * Object[], 第一个参数是列名,第二个参数是操作符,第三个参数是查询条件的值。
  697 + */
  698 + public <E> List<E> findBeanListByCondition(List<Object[]> condition, String sortCondition, boolean fromWriteDB, Class<E> beanClass) {
  699 + StringBuffer sql = new StringBuffer("SELECT "+this.tableFieldNameListGapWithComma+" FROM "+this.getTableSql());
  700 + StringBuffer pql = new StringBuffer(sql.toString());
  701 + List<Object> list = new ArrayList<Object>();
  702 + this.appendWhereCondition(sql, pql, list, condition);
  703 + if(sortCondition != null && !sortCondition.equals("")){
  704 + sql.append(" " + sortCondition + " ");
  705 + pql.append(" " + sortCondition + " ");
  706 + }
  707 + return (List<E>)(fromWriteDB ? jdbcTemplateWrite : jdbcTemplateRead).query(sql.toString(), new CustomJdbcTemplateRowMapper(beanClass, this.tableToBeanField), list.toArray());
  708 + }
  709 +
  710 + /**
  711 + * 根据条件sql查询
  712 + * sqlCondition 为where 后面的条件。
  713 + */
  714 + public <E> List<E> findBeanListBySql(String sqlCondition, Class<E> beanClass) {
  715 + return findBeanListBySql(sqlCondition, false, beanClass);
  716 + }
  717 +
  718 + /**
  719 + * 根据条件sql查询
  720 + * sqlCondition 为where 后面的条件。
  721 + */
  722 + public <E> List<E> findBeanListBySql(String sqlCondition, boolean fromWriteDB, Class<E> beanClass) {
  723 + StringBuffer sql = new StringBuffer("SELECT "+this.tableFieldNameListGapWithComma+" FROM "+this.getTableSql()+" WHERE " + sqlCondition);
  724 + return (List<E>)(fromWriteDB ? jdbcTemplateWrite : jdbcTemplateRead).query(sql.toString(), new CustomJdbcTemplateRowMapper(beanClass, this.tableToBeanField));
  725 + }
  726 +
  727 + /**
  728 + * 按条件分页查询
  729 + * Object[]数组长度是3
  730 + * Object[], 第一个参数是列名,第二个参数是操作符,第三个参数是查询条件的值。
  731 + */
  732 + public <E> Map<String, Object> findBeanPageByCondition(List<Object[]> condition, int page, int pageSize, Class<E> beanClass) {
  733 + return findBeanPageByCondition(condition, null , page, pageSize, false, beanClass);
  734 + }
  735 +
  736 + /**
  737 + * 按条件分页查询
  738 + * Object[]数组长度是3
  739 + * Object[]第一个参数是列名,第二个参数是操作符,第三个参数是查询条件的值。
  740 + * boolean isUseCache, 是否用缓存,默认用。
  741 + * boolean isAddCache, 是否添加缓存,默认添加。
  742 + */
  743 + public <E> Map<String, Object> findBeanPageByCondition(List<Object[]> condition,String sortCondition, int page, int pageSize, boolean fromWriteDB, Class<E> beanClass) {
  744 + StringBuffer sql = new StringBuffer("SELECT "+this.tableFieldNameListGapWithComma+" FROM "+this.getTableSql());
  745 + StringBuffer pql = new StringBuffer(sql.toString());
  746 + StringBuffer sqlCount = new StringBuffer("SELECT COUNT(1) rowCount FROM "+this.getTableSql());
  747 +
  748 + List<Object> count_list = new ArrayList<Object>();
  749 + List<Object> page_list = new ArrayList<Object>();
  750 + this.appendWhereConditionForCount(sqlCount, condition);
  751 + this.appendWhereCondition(sql, pql, count_list, condition);
  752 + for (int i = 0; i < count_list.size(); i++)
  753 + page_list.add(count_list.get(i));
  754 +
  755 + page_list.add((page - 1) * pageSize);
  756 + page_list.add(pageSize);
  757 +
  758 + if(sortCondition != null && !sortCondition.equals("")){
  759 + sql.append(" " + sortCondition + " ");
  760 + pql.append(" " + sortCondition + " ");
  761 + }
  762 +
  763 + String pageSql = sql.toString() + " limit ?, ?";
  764 +
  765 + Map<String, Object> totalRowsMap = (fromWriteDB ? jdbcTemplateWrite : jdbcTemplateRead).queryForMap(sqlCount.toString(), count_list.toArray()) ;
  766 +
  767 + Map<String, Object> resultMap = new HashMap<String, Object>();
  768 + resultMap.put("page", page);
  769 + resultMap.put("total", totalRowsMap.get("rowCount"));
  770 + List<E> resultList = null;
  771 + resultList = (fromWriteDB ? jdbcTemplateWrite : jdbcTemplateRead).query(pageSql.toString(), new CustomJdbcTemplateRowMapper(beanClass, this.tableToBeanField), page_list.toArray());
  772 + resultMap.put("rows", resultList);
  773 + return resultMap;
  774 + }
  775 +
  776 + /**
  777 + * 按sql分页查询, sqlCondition为where 后条件sql
  778 + */
  779 + public <E> Map<String, Object> findBeanPageBySql(String sqlCondition, int page, int pageSize, Class<E> beanClass) {
  780 + return findBeanPageBySql(sqlCondition, page, pageSize, false, beanClass);
  781 + }
  782 +
  783 + /**
  784 + * 按sql分页查询, sqlCondition为where 后条件sql
  785 + */
  786 + public <E> Map<String, Object> findBeanPageBySql(String sqlCondition, int page, int pageSize,boolean fromWriteDB, Class<E> beanClass) {
  787 + StringBuffer sql = new StringBuffer("SELECT "+this.tableFieldNameListGapWithComma+" FROM "+this.getTableSql()+" WHERE " + sqlCondition );
  788 + StringBuffer sqlCount = new StringBuffer("SELECT count(1) rowCount FROM "+this.getTableSql()+" WHERE " + sqlCondition);
  789 + String pageSql = sql.toString() + " limit ?, ?";
  790 + String pagePql = sql.toString() + " limit " + ((page -1) * pageSize) + ", " + (page * pageSize);
  791 + List<Object> page_list = new ArrayList<Object>();
  792 + page_list.add((page - 1) * pageSize);
  793 + page_list.add(page * pageSize);
  794 +
  795 + Map<String, Object> totalRowsMap = (fromWriteDB ? jdbcTemplateWrite : jdbcTemplateRead).queryForMap(sqlCount.toString());
  796 +
  797 + Map<String, Object> resultMap = new HashMap<String, Object>();
  798 + resultMap.put("page", page);
  799 + resultMap.put("total", totalRowsMap.get("rowCount"));
  800 + List<E> resultList = null;
  801 + resultList = (fromWriteDB ? jdbcTemplateWrite : jdbcTemplateRead).query(pageSql.toString(), new CustomJdbcTemplateRowMapper(beanClass, this.tableToBeanField), page_list.toArray());
  802 + resultMap.put("rows", resultList);
  803 + return resultMap;
  804 + }
625 } 805 }