JDBC輔助類封裝 及應用

 

一:代碼圖解:

image

二:配置文件:

  1 driverClassName=com.mysql.jdbc.Driver
  2 url=jdbc\:mysql\://127.0.0.1\:3306/xlzj_sh_new?useUnicode\=true&characterEncoding\=UTF-8&zeroDateTimeBehavior\=convertToNull
  3 username=root
  4 password=123456
  5 filters=stat
  6 initialSize=10
  7 maxActive=200
  8 maxWait=60000
  9 #maxIdle=15
 10 minIdle=10
 11 timeBetweenEvictionRunsMillis=60000
 12 minEvictableIdleTimeMillis=300000
 13 validationQuery=SELECT 'x'
 14 testWhileIdle=true
 15 testOnBorrow=false
 16 testOnReturn=false
 17 poolPreparedStatements=false
 18 maxPoolPreparedStatementPerConnectionSize=20
 19 #\u7981\u7528\u5BF9\u4E8E\u957F\u65F6\u95F4\u4E0D\u4F7F\u7528\u7684\u8FDE\u63A5\u5F3A\u5236\u5173\u95ED\u7684\u529F\u80FD
 20 removeAbandoned=false
 21 #\u8D85\u8FC730\u5206\u949F\u5F00\u59CB\u5173\u95ED\u7A7A\u95F2\u8FDE\u63A5\uFF0C\u7531\u4E8EremoveAbandoned\u4E3Afalse\uFF0C\u8FD9\u4E2A\u8BBE\u7F6E\u9879\u4E0D\u518D\u8D77\u4F5C\u7528
 22 removeAbandonedTimeout=1800
 23 #\u5C06\u5F53\u524D\u5173\u95ED\u52A8\u4F5C\u8BB0\u5F55\u5230\u65E5\u5FD7\uFF0C\u7531\u4E8EremoveAbandoned\u4E3Afalse\uFF0C\u8FD9\u4E2A\u8BBE\u7F6E\u9879\u4E0D\u518D\u8D77\u4F5C\u7528
 24 logAbandoned=true
 25 

三:獲取配置文件信息

image

PathUtil.java

  1 package com.jacezhu.framework.utils.BeanUtil.pathUtil;
  2 
  3 import java.io.BufferedInputStream;
  4 import java.io.FileInputStream;
  5 import java.io.InputStream;
  6 import java.net.URL;
  7 import java.util.Properties;
  8 
  9 /**
 10  *
 11 *      12 * 項目名稱:text     13 * 類名稱:PathUtil     14 * 類描述:   獲取文件路徑
 15 * 建立人: 劉軍/shall_liu   16 * 建立時間:2015年11月17日 下午4:10:31     17 * 修改人:Administrator     18 * 修改時間:2015年11月17日 下午4:10:31     19 * 修改備註:     20 * @version      21 *      22  */
 23 public class PathUtil {
 24 	/**
 25 	 * 獲取  獲取人蔘文件的 路徑
 26 	 * @return
 27 	 */
 28     public static String getPath(String fileName){
 29     	String path=getPath(getFileUrl(),  fileName);
 30 		return path;
 31     }
 32      /**
 33       * 獲取:入參 properties配置文件裏面的值(key_value)
 34       * @param FileName(*.properties <配置文件名稱.properties>)
 35       * @return  properties 對象
 36       */
 37     public static Properties returnPropertiesValue(String FileName){
 38 		return readData(getPath(FileName));
 39 	}
 40 
 41 
 42     /**
 43      *
 44     * @Title: getPath   45     * @Description: (根據URl 獲取指定文件的路徑)
 46     * @param @param url
 47     * @param @return    設定文件   48     * @return String    返回類型   49     * @throws   50     * 建立者:劉軍/shall_liu
 51     * 建立時間:2015年11月18日下午2:06:50
 52      */
 53     public static String getPath(URL url,String fileName){
 54 		String path = (url + fileName );
 55         int index=lookindex(path,'/');
 56         String newPath=path.substring(index+1, path.length());
 57 		return newPath;
 58     }
 59     /**
 60      *
 61     * @Title: getFileUrl   62     * @Description: (獲取根目錄路徑)
 63     * @param @return    設定文件   64     * @return URL    返回類型   65     * @throws   66     * 建立者:劉軍/shall_liu
 67     * 建立時間:2015年11月18日下午2:04:23
 68      */
 69     public static URL getFileUrl(){
 70     	URL url = ClassLoader.getSystemClassLoader().getResource("./");
 71 		return url;
 72     }
 73 
 74     /**
 75      * 獲取 某個字符在某個字符串第一次出現的位置
 76      * @param string
 77      * @param s
 78      * @return
 79      */
 80 	public static int lookindex(String string, char s) {
 81 
 82 		int number = 0;
 83 		int index=-1;//-1 表示沒有找到 
 84 		char arr[] = string.toCharArray();
 85 		for (int i = 0; i < arr.length; i++) {
 86 			if (arr[i] == s) {
 87 				number++;
 88 			}
 89 			if (number == 1) {
 90 				 index=i;
 91 				  return i;
 92 			}
 93 		}
 94 		return index;
 95 	}
 96 	/**
 97 	 *
 98 	* @Title: lookindex   99 	* @Description: (判斷字符 c在 字符串 string中指定出現的index次數時該字符c在字符串string中的位置)
100 	* @param @param string
101 	* @param @param s
102 	* @param @param indexs
103 	* @param @return    設定文件  104 	* @return int    返回類型  105 	* @throws  106 	* 建立者:劉軍/shall_liu
107 	* 建立時間:2015年11月18日下午1:59:27
108 	 */
109 	public static int lookindex(String string, char s,int indexs) {
110 		int number = 0;
111 		int index=-1;//-1 表示沒有找到 
112 		char arr[] = string.toCharArray();
113 		for (int i = 0; i < arr.length; i++) {
114 			if (arr[i] == s) {
115 				number++;
116 			}
117 			if (number ==indexs) {
118 				 index=i;
119 				  return i;
120 			}
121 		}
122 		return index;
123 	}
124 	/**
125 	 *
126 	* @Title: counter  127 	* @Description: ( 判斷字符串c在 字符串source中出現的總次數)
128 	* @param @param source
129 	* @param @param c
130 	* @param @return    設定文件  131 	* @return int    返回類型  132 	* @throws  133 	* 建立者:劉軍/shall_liu
134 	* 建立時間:2015年11月18日下午1:57:29
135 	 */
136 	public static int counter(String source,String c){
137 		 int counter=0;
138 		 if(c ==null||c.trim().equals("")){
139 			   counter=0;
140 		 }else{
141 			if(!source.trim().equals("")&&source!=null){
142 				String[] newArray=source.split(c);
143 				counter=newArray.length-1;
144 			}
145 		 }
146 		return counter;
147 		}
148 
149 	public static void main(String[] args) {
150 		String path=getPath("dabase.properties");
151 		System.out.println(path);
152 	}
153 
154 
155 	/**
156 	 * 獲取整個配置文件中的屬性
157 	 *
158 	 * @param filePath
159 	 *            文件路徑,即文件所在包的路徑,例如:java/util/config.properties
160 	 */
161 	public static Properties readData(String filePath) {
162 		Properties props = new Properties();
163 		try {
164 			InputStream in = new BufferedInputStream(new FileInputStream(
165 					filePath));
166 			props.load(in);
167 			in.close();
168 			return props;
169 		} catch (Exception e) {
170 			e.printStackTrace();
171 			return null;
172 		}
173 	}
174 
175 
176 
177 }
178 

PropertiesConfig.java

  1 package com.jacezhu.framework.utils.BeanUtil.pathUtil;
  2 
  3 import java.io.InputStream;
  4 import java.util.Properties;
  5 
  6 /**
  7  * 主題:讀取Config文件工具類 P
  8  *
  9  * @author 劉軍/shell_liu 2015-4-14
 10  */
 11 public class PropertiesConfig {
 12 
 13 
 14 	/**
 15 	 *
 16 	 * @Title: getProperties   17 	 * @Description:
 18 	 *               (TestProperties.class.getClassLoader().getResourceAsStream
 19 	 *               ("db.properties" );
 20 	 *               類名.class.類加載器.從文件流中獲取資源("放在程序根目錄下的properties文件中的內容")
 21 	 *               loader: 載入程序;裝貨設備;裝填器)   22 	 * @param @param fileName
 23 	 * @param @return    設定文件   24 	 * @return Properties    返回類型   25 	 * @throws   26 	 */
 27 	public static Properties getProperties(String fileName) {
 28 		/*
 29 		 * 從properties文件中讀取文件思路: 1:聲明對象:Properties props=new Properties();
 30 		 * 2:調用獲取properties文件內容的流方法:props.load(inStream); 3:將src
 31 		 * /db.propreties以InputStream方式載入 inStream=
 32 		 * TestProperties.class.getClassLoader
 33 		 * ().getResourceAsStream("db.properties"); 4://讀取props中文件信息 String
 34 		 * name=props.getProperty("uesrname");
 35 		 */
 36 		Properties props = new Properties();
 37 		try {
 38 			// 將src /db.propreties以InputStream方式載入
 39 			InputStream inStream = PropertiesConfig.class
 40 					.getResourceAsStream(fileName);
 41 			props.load(inStream);
 42 
 43 		} catch (Exception e) {
 44 			e.printStackTrace();
 45 		}
 46 		return props;
 47 	}
 48 
 49 
 50 	public static void main(String[] args) {
 51 		Properties properties = new Properties();
 52 		properties = getProperties("/dabase.properties");
 53 		System.out.println(properties);
 54 	}
 55 }
 56 

PropertyReadUtil.java

  1 package com.jacezhu.framework.utils.BeanUtil.pathUtil;
  2 
  3 import java.io.BufferedInputStream;
  4 import java.io.FileInputStream;
  5 import java.io.InputStream;
  6 import java.util.Iterator;
  7 import java.util.Properties;
  8 
  9 /**
 10  * 主題: *.properties 配置文件內容讀取工具
 11  * @author 劉軍/shell_liu
 12  * 2015-9-8
 13  */
 14 
 15 public class PropertyReadUtil {
 16 	 //獲取項目根文件路徑地址
 17 	static String path = Thread.currentThread().getContextClassLoader() .getResource("").getPath();
 18 	/**
 19 	 *
 20 	 * @param propertiesName  須要被讀取的配置文件
 21 	 * @return   Properties對象
 22 	 * @描述   :*.properties 配置文件內容讀取  方法
 23 	 * @author 劉軍/shell_liu
 24 	 * @建立日期 2015-9-8
 25 	 * @建立時間 下午5:31:05
 26 	 *
 27 	 */
 28 	 public static Properties getProperties(String propertiesName){
 29 		 Properties prop = new Properties();
 30 		 InputStream in;
 31 		try {
 32 			in = new BufferedInputStream (new FileInputStream(path+propertiesName));
 33 			prop.load(in); ///加載屬性列表
 34 		}  catch(Exception e){
 35             System.out.println(e);
 36         }
 37 
 38 		return prop;
 39 
 40 
 41 	 }
 42 
 43 
 44 	public static void main(String[] args) {
 45         Properties prop = new Properties();
 46         prop=getProperties("database.properties");
 47         Iterator<String> it=prop.stringPropertyNames().iterator();
 48         while(it.hasNext()){
 49             String key=it.next();
 50             System.out.println(key+":"+prop.getProperty(key));
 51         }
 52 
 53 
 54     }
 55 }
 56 

四:JDBC 獲取鏈接的封裝

 

阿里巴巴開源的數據庫鏈接jar 鏈接工具類 :DruidDataSourceUtil.java

  1 package com.jacezhu.framework.connectUtil;
  2 
  3 import java.io.BufferedInputStream;
  4 import java.io.File;
  5 import java.io.FileInputStream;
  6 import java.io.IOException;
  7 import java.io.InputStream;
  8 import java.util.Properties;
  9 
 10 import javax.sql.DataSource;
 11 
 12 import com.alibaba.druid.pool.DruidDataSourceFactory;
 13 
 14 /**
 15  * The Class DruidDataSource.
 16  */
 17 public class DruidDataSourceUtil {
 18 
 19     /** 使用配置文件構建Druid數據源. */
 20     public static final int DRUID_MYSQL_SOURCE = 0;
 21 
 22     /** 使用配置文件構建Druid數據源. */
 23     public static final int DRUID_MYSQL_SOURCE2 = 1;
 24 
 25     /** 使用配置文件構建Dbcp數據源. */
 26     public static final int DBCP_SOURCE = 4;
 27     public static String confile = "jdbc.properties";
 28     public static Properties p = null;
 29 
 30     static {
 31         p = new Properties();
 32         InputStream inputStream = null;
 33         try {
 34             //java應用  
 35             confile = DruidDataSourceUtil.class.getClassLoader().getResource("").getPath()+ confile;
 36             System.out.println(confile);
 37             File file = new File(confile);
 38             inputStream = new BufferedInputStream(new FileInputStream(file));
 39             p.load(inputStream);
 40         } catch (Exception e) {
 41             e.printStackTrace();
 42         } finally {
 43             try {
 44                 if (inputStream != null) {
 45                     inputStream.close();
 46                 }
 47             } catch (IOException e) {
 48                 e.printStackTrace();
 49             }
 50         }
 51     }
 52 
 53     /**
 54      * 根據類型獲取數據源
 55      *
 56      * @param sourceType
 57      *            數據源類型
 58      * @return druid或者dbcp數據源
 59      * @throws Exception
 60      *             the exception
 61      */
 62     public static final DataSource getDataSource(int sourceType) throws Exception {
 63         DataSource dataSource = null;
 64         switch (sourceType) {
 65         case DRUID_MYSQL_SOURCE:
 66             dataSource = DruidDataSourceFactory.createDataSource(p);
 67             break;
 68         case DRUID_MYSQL_SOURCE2:
 69             dataSource = DruidDataSourceFactory.createDataSource(p);
 70             break;
 71         case DBCP_SOURCE:
 72             // dataSource = BasicDataSourceFactory.createDataSource(  
 73             // MySqlConfigProperty.getInstance().getProperties());  
 74             break;
 75         }
 76         return dataSource;
 77     }
 78 	public static void main(String[] args) throws Exception {
 79 		int dbType=0;
 80 		DataSource dataSource=DruidDataSourceUtil.getDataSource(dbType);
 81 
 82 	}
 83 }
 84 

 

c3p0鏈接池管理類  DataSourceConnUtil.java

  1 package com.jacezhu.framework.connectUtil;
  2 
  3 import java.sql.Connection;
  4 import java.sql.SQLException;
  5 import java.util.Properties;
  6 
  7 import javax.sql.DataSource;
  8 
  9 import com.mchange.v2.c3p0.DataSources;
 10 
 11 /**
 12  *
 13 *      14 * 項目名稱:s4h4s2s     15 * 類名稱:DataSourceConnUtil     16 * 類描述: c3p0鏈接池管理類    17 * 建立人:劉軍/jun liu     18 * 建立時間:2015-12-19 下午11:40:35     19 * 修改人:劉軍/shall_liu     20 * 修改時間:2015-12-19 下午11:40:35     21 * 修改備註:     22 * @version      23 *      24  */
 25 public class DataSourceConnUtil {
 26 
 27 	private static final String JDBC_DRIVER = "driverClass";
 28 	private static final String JDBC_URL = "jdbcUrl";
 29 
 30 	private static DataSource ds;
 31 	/**
 32 	 * 初始化鏈接池代碼塊
 33 	 */
 34 	static{
 35 		initDBSource();
 36 	}
 37 
 38 	/**
 39 	 * 初始化c3p0鏈接池
 40 	 */
 41 	private static final void initDBSource(){
 42 		Properties c3p0Pro = new Properties();
 43 		try {
 44 			//加載配置文件
 45 			c3p0Pro.load(DataSourceConnUtil.class.getResourceAsStream("/config.properties"));
 46 			//c3p0Pro.load(new FileInputStream(PathUtil.getPath("dabase.properties")));
 47 		} catch (Exception e) {
 48 			e.printStackTrace();
 49 		}
 50 
 51 		String drverClass = c3p0Pro.getProperty(JDBC_DRIVER);
 52 		if(drverClass != null){
 53 			try {
 54 				//加載驅動類
 55 				Class.forName(drverClass);
 56 			} catch (ClassNotFoundException e) {
 57 				e.printStackTrace();
 58 			}
 59 
 60 		}
 61 
 62 		Properties jdbcpropes = new Properties();
 63 		Properties c3propes = new Properties();
 64 		for(Object key:c3p0Pro.keySet()){
 65 			String skey = (String)key;
 66 			if(skey.startsWith("c3p0.")){
 67 				c3propes.put(skey, c3p0Pro.getProperty(skey));
 68 			}else{
 69 				jdbcpropes.put(skey, c3p0Pro.getProperty(skey));
 70 			}
 71 		}
 72 
 73 		try {
 74 			//創建鏈接池
 75 			DataSource unPooled = DataSources.unpooledDataSource(c3p0Pro.getProperty(JDBC_URL),jdbcpropes);
 76 			ds = DataSources.pooledDataSource(unPooled,c3propes);
 77 
 78 		} catch (SQLException e) {
 79 			e.printStackTrace();
 80 		}
 81 	}
 82 
 83 	/**
 84 	 * 獲取數據庫鏈接對象
 85 	 * @return 數據鏈接對象
 86 	 * @throws SQLException
 87 	 */
 88 	public static synchronized Connection getConnection() {
 89 		  Connection conn = null;
 90 		  try {
 91 			conn = ds.getConnection();
 92 			conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
 93 			conn.setAutoCommit(false);//取消 事務管理:事務提交機制
 94 		} catch (SQLException e) {
 95 			e.printStackTrace();
 96 		}
 97 		  return conn;
 98 	}
 99 }
100 

普通的 數據庫鏈接  ConnUtil.java

  1 package com.jacezhu.framework.connectUtil;
  2 
  3 import java.sql.Connection;
  4 import java.sql.DriverManager;
  5 import java.sql.PreparedStatement;
  6 import java.sql.ResultSet;
  7 import java.sql.SQLException;
  8 import java.util.Properties;
  9 
 10 import javax.servlet.ServletException;
 11 
 12 
 13 /**
 14  *
 15 *      16 * 項目名稱:s4h4s2s     17 * 類名稱:ConnUtil     18 * 類描述:  主題:數據庫鏈接工具類——包含取得鏈接和關閉資源; 沒有數據庫鏈接池     19 * 建立人:劉軍/jun liu     20 * 建立時間:2015-12-19 下午11:40:21     21 * 修改人:劉軍/shall_liu     22 * 修改時間:2015-12-19 下午11:40:21     23 * 修改備註:     24 * @version      25 *      26  */
 27 public class ConnUtil {
 28 	private static Connection conn = null;
 29 	private static String DRIVER_NAME;
 30 	private static String URL;
 31 	private static String USER_NAME;
 32 	private static String PASSWORD;
 33 
 34 
 35 	static {
 36 		try {
 37 			getConn();
 38 		} catch (Exception e) {
 39 			e.printStackTrace();
 40 		}
 41 	}
 42 
 43 	/**
 44 	 * 獲得鏈接(沒有入參)
 45 	 *
 46 	 * @return
 47 	 */
 48 	public static Connection getConn() {
 49 		try {
 50 			if (conn == null || conn.isValid(10) == false) {
 51 				ConnUtil connInfo = getConnectInfo();
 52 				conn = getConn(connInfo);
 53 			}
 54 			return conn;
 55 		} catch (Exception e) {
 56 			e.printStackTrace();
 57 			return null;
 58 		}finally{
 59 
 60 			try {
 61 				conn.close();
 62 			} catch (SQLException e) {
 63 				e.printStackTrace();
 64 			}
 65 		}
 66 	}
 67 
 68 	/**
 69 	 * 獲取:ConnUtil 數據庫鏈接參數的值
 70 	 *
 71 	 * @return MerchatInfo 對象
 72 	 * @描述 :從 dabase.properties配置文件獲取 value 的值賦值給Properties 對象
 73 	 * @author 劉軍/shell_liu
 74 	 * @建立日期 2015-9-8
 75 	 * @建立時間 下午9:04:32
 76 	 *
 77 	 */
 78 	public static ConnUtil getConnectInfo() {
 79 		ConnUtil connInfo = new ConnUtil();
 80 		try {
 81 			Properties  properties=new Properties();
 82 			//獲取 配置文件的key-value
 83  	     	properties.load(ConnUtil.class.getResourceAsStream("/config.properties"));
 84 			//properties = PathUtil.returnPropertiesValue("dabase.properties");
 85 
 86 			ConnUtil.setDRIVER_NAME(properties.getProperty("driverClass"));
 87 			ConnUtil.setURL(properties.getProperty("jdbcUrl"));
 88 			ConnUtil.setUSER_NAME(properties.getProperty("user"));
 89 			ConnUtil.setPASSWORD(properties.getProperty("password"));
 90 			return connInfo;
 91 		} catch (Exception e) {
 92 			  try {
 93 					throw new ServletException("加載數據庫連接參數失敗");
 94 
 95 				} catch (ServletException e1) {
 96 					e1.printStackTrace();
 97 					return null;
 98 				}
 99 		}
100 	}
101 
102 	/**
103 	 * 獲得鏈接
104 	 *
105 	 * @param connUtil
106 	 *            (數據庫鏈接須要的值)
107 	 * @return
108 	 */
109 	@SuppressWarnings("static-access")
110 	public static Connection getConn(ConnUtil connUtil) {
111 		try {
112 			Class.forName(connUtil.getDRIVER_NAME());
113 			conn = DriverManager.getConnection(connUtil.getURL(),
114 					connUtil.getUSER_NAME(), connUtil.getPASSWORD());
115 			conn.setAutoCommit(false);//取消 事務管理:事務提交機制
116 		} catch (Exception e) {
117 			  try {
118 				throw new ServletException("連接數據庫失敗!");
119 			} catch (ServletException e1) {
120 				e1.printStackTrace();
121 			}
122 		}
123 		return conn;
124 	}
125 
126 	/**
127 	 * 關閉鏈接
128 	 *
129 	 * @param conn
130 	 * @throws SQLException
131 	 */
132 	public static void close(Connection conn) throws SQLException {
133 		if (conn != null) {
134 			conn.close();
135 			conn = null;
136 		}
137 	}
138 
139 	/**
140 	 * 關閉PreparedStatement
141 	 *
142 	 * @param pstmt
143 	 * @throws SQLException
144 	 */
145 	public static void close(PreparedStatement pstmt) throws SQLException {
146 		if (pstmt != null) {
147 			pstmt.close();
148 			pstmt = null;
149 		}
150 	}
151 
152 	/**
153 	 * 關閉結果集
154 	 *
155 	 * @param rs
156 	 * @throws SQLException
157 	 */
158 	public static void close(ResultSet rs) throws SQLException {
159 		if (rs != null) {
160 			rs.close();
161 			rs = null;
162 		}
163 	}
164 
165 
166 	//----------------------get set-------------------------------------------------
167 	/**
168 	 *
169 	* @Title: getDRIVER_NAME  170 	* @Description: ()  171 	* @param @return    設定文件  172 	* @return String    返回類型  173 	* @throws  174 	 */
175 	public static String getDRIVER_NAME() {
176 		return DRIVER_NAME;
177 	}
178 
179 	public static void setDRIVER_NAME(String dRIVER_NAME) {
180 		DRIVER_NAME = dRIVER_NAME;
181 	}
182 
183 	public static String getURL() {
184 		return URL;
185 	}
186 
187 	public static void setURL(String uRL) {
188 		URL = uRL;
189 	}
190 
191 	public static String getUSER_NAME() {
192 		return USER_NAME;
193 	}
194 
195 	public static void setUSER_NAME(String uSER_NAME) {
196 		USER_NAME = uSER_NAME;
197 	}
198 
199 	public static String getPASSWORD() {
200 		return PASSWORD;
201 	}
202 
203 	public static void setPASSWORD(String pASSWORD) {
204 		PASSWORD = pASSWORD;
205 	}
206    //--------------------main 方法----------------------------------------------
207 	/**
208 	 * 測試 鏈接是否成功
209 	 *
210 	 * @param args
211 	 */
212 	public static void main(String[] args) {
213 		getConn();
214 	}
215 }

SqlParameter.java

  1 package com.jacezhu.framework.connectUtil.jdbcUtl;
  2 /**
  3  *
  4 * @Title: SqlParameter.java    5 * @Package com.jacezhu.framework.connectUtil.jdbcUtl    6 * @Description: (存儲過程參數類型)    7 * @author  劉軍
  8 * @date 2016-3-19 下午2:47:02    9 * @version V1.0    10  */
 11 public class SqlParameter {
 12 
 13 	/**
 14      * 參數名稱
 15      */
 16     public String Name;
 17     /**
 18      * 參數值
 19      */
 20     public Object Value;
 21     /**
 22      * true表示參數爲輸出類型
 23      */
 24     public boolean OutPut;
 25     /**
 26      * 參數類型
 27      */
 28     public int Type;
 29     /**
 30      * 輸入類型參數的構造函數
 31      * @param name 存儲過程 輸入類型 參數名稱
 32      * @param value 存儲過程 輸入類型 參數值
 33      */
 34     public SqlParameter(String name,Object value){
 35         this.Name = name;
 36         this.Value= value;
 37     }
 38     /**
 39      * 輸出類型參數的構造函數
 40      * @param type 存儲過程 輸出類型 參數類型
 41      * @param name 存儲過程 輸出類型 參數名稱
 42      */
 43     public SqlParameter(int type,String name){
 44         this.Name = name;
 45         this.OutPut = true;
 46         this.Type = type;
 47     }
 48     /**
 49      * 返回類型參數的構造函數
 50      * @param type 存儲過程 返回類型
 51      */
 52     public SqlParameter(int type){
 53         this.Name = "";
 54         this.OutPut = true;
 55         this.Type = type;
 56     }
 57 }
 58 

PageModel.java

  1 package com.jacezhu.framework.connectUtil.jdbcUtl;
  2 import java.util.List;
  3 /**
  4  * 分頁封裝類
  5 *       6 * 項目名稱:s4h4s2s      7 * 類名稱:PageModel      8 * 類描述:      9 * 建立人:劉軍/jun liu     10 * 建立時間:2015-12-20 下午2:40:55     11 * 修改人:Administrator     12 * 修改時間:2015-12-20 下午2:40:55     13 * 修改備註:     14 * @version      15 *      16  */
 17 public class PageModel<T> {
 18 
 19 	//結果集
 20 	private List<T> list;
 21 
 22 	//記錄數
 23 	private int totalRecords;
 24 
 25 	//每頁多少條數據
 26 	private int pageSize;
 27 
 28 	//第幾頁
 29 	private int pageNo;
 30 	//總共多少頁
 31 	private int countPageNo;
 32 
 33 	/**
 34 	 * 返回總頁數
 35 	 * @return
 36 	 */
 37 	public int getTotalPages() {
 38 		return (totalRecords + pageSize - 1) / pageSize;
 39 	}
 40 
 41 	/**
 42 	 * 首頁
 43 	 * @return
 44 	 */
 45 	public int getTopPageNo() {
 46 		return 1;
 47 	}
 48 
 49 	/**
 50 	 * 上一頁
 51 	 * @return
 52 	 */
 53 	public int getPreviousPageNo() {
 54 		if (this.pageNo <= 1) {
 55 			return 1;
 56 		}
 57 		return this.pageNo - 1;
 58 	}
 59 
 60 	/**
 61 	 * 下一頁
 62 	 * @return
 63 	 */
 64 	public int getNextPageNo() {
 65 		if (this.pageNo >= getButtomPageNo()) {
 66 			return getButtomPageNo();
 67 		}
 68 		return this.pageNo + 1;
 69 	}
 70 
 71 	/**
 72 	 * 尾頁
 73 	 * @return
 74 	 */
 75 	public int getButtomPageNo() {
 76 		return getTotalPages();
 77 	}
 78 
 79 	public List<T> getList() {
 80 		return list;
 81 	}
 82 
 83 	public void setList(List<T> list) {
 84 		this.list = list;
 85 	}
 86 
 87 	public int getTotalRecords() {
 88 		return totalRecords;
 89 	}
 90 
 91 	public void setTotalRecords(int totalRecords) {
 92 		this.totalRecords = totalRecords;
 93 	}
 94 
 95 	public int getPageSize() {
 96 		return pageSize;
 97 	}
 98 
 99 	public void setPageSize(int pageSize) {
100 		this.pageSize = pageSize;
101 	}
102 
103 	public int getPageNo() {
104 		return pageNo;
105 	}
106 
107 	public void setPageNo(int pageNo) {
108 		this.pageNo = pageNo;
109 	}
110 
111 	public int getCountPageNo() {
112 		return countPageNo;
113 	}
114 
115 	public void setCountPageNo(int countPageNo) {
116 		this.countPageNo = countPageNo;
117 	}
118 
119 }
120 

ObjectMapper.java

  1 package com.jacezhu.framework.connectUtil.jdbcUtl;
  2 
  3 import java.sql.ResultSet;
  4 /**
  5  *
  6 * @Title: ObjectMapper.java    7 * @Package com.jacezhu.framework.connectUtil.jdbcUtl    8 * @Description: (用於轉換數據結果集 )    9 * @author  劉軍
 10 * @date 2016-3-19 上午9:52:18   11 * @version V1.0    12  */
 13 public interface ObjectMapper {
 14 	public Object mapping(ResultSet rs);
 15 
 16 }

 

 

 

五:JDBC 封裝層:dao層

BaseDaoI.java

  1 package com.jacezhu.dao;
  2 
  3 import java.io.Serializable;
  4 import java.math.BigInteger;
  5 import java.util.List;
  6 import java.util.Map;
  7 
  8 public interface BaseDaoI<T> {
  9 
 10 	public Serializable save(T o);
 11 
 12 	public void delete(T o);
 13 
 14 	public void update(T o);
 15 
 16 	public void saveOrUpdate(T o);
 17 
 18 	public T get(Class<T> c, Serializable id);
 19 
 20 	public T get(String hql);
 21 
 22 	public T get(String hql, Map<String, Object> params);
 23 
 24 	public List<T> find(String hql);
 25 
 26 	public List<T> find(String hql, Map<String, Object> params);
 27 
 28 	public List<T> find(String hql, int page, int rows);
 29 
 30 	public List<T> find(String hql, Map<String, Object> params, int page,
 31 			int rows);
 32 
 33 	public Long count(String hql);
 34 
 35 	public Long count(String hql, Map<String, Object> params);
 36 
 37 	public int executeHql(String hql);
 38 
 39 	public int executeHql(String hql, Map<String, Object> params);
 40 
 41 	public List<Object[]> findBySql(String sql);
 42 
 43 	public List<Object[]> findBySql(String sql, int page, int rows);
 44 
 45 	public List<Object[]> findBySql(String sql, Map<String, Object> params);
 46 
 47 	public List<Object[]> findBySql(String sql, Map<String, Object> params,
 48 			int page, int rows);
 49 
 50 	public int executeSql(String sql);
 51 
 52 	public int executeSql(String sql, Map<String, Object> params);
 53 
 54 	public BigInteger countBySql(String sql);
 55 
 56 	public BigInteger countBySql(String sql, Map<String, Object> params);
 57 
 58 	public void refresh(T o);
 59 
 60 	public void merge(T o);
 61 }
 62 

JdbcBaseDao.java

  1 package com.jacezhu.dao;
  2 
  3 import java.sql.Connection;
  4 import java.sql.PreparedStatement;
  5 import java.sql.ResultSet;
  6 import java.sql.SQLException;
  7 import java.lang.reflect.Field;
  8 import java.sql.Statement;
  9 import java.sql.CallableStatement;
 10 import java.sql.ResultSetMetaData;
 11 import java.util.ArrayList;
 12 import java.util.HashMap;
 13 import java.util.List;
 14 import java.util.Map;
 15 import java.sql.*;
 16 import java.lang.reflect.*;
 17 
 18 
 19 import com.jacezhu.framework.connectUtil.ConnUtil;
 20 import com.jacezhu.framework.connectUtil.DataSourceConnUtil;
 21 import com.jacezhu.framework.connectUtil.jdbcUtl.ObjectMapper;
 22 import com.jacezhu.framework.connectUtil.jdbcUtl.SqlParameter;
 23 
 24 
 25 public interface JdbcBaseDao {
 26 
 27     /**
 28      *
 29     * @author  劉軍
 30     * @date 2016-3-19 上午11:14:17   31     * @version V1.0    32     * @Title: getStatement   33     * @Description: ( )   34     * @param @return
 35     * @param @throws SQLException    設定文件   36     * @return Connection    返回類型   37     * @throws   38      */
 39 	public Connection getStatement() throws SQLException;
 40 
 41 	/**
 42 	 *
 43 	 * @Title: update   44 	 * @Description: (更新:update)   45 	 * @param @param sql
 46 	 * @param @param obj
 47 	 * @param @param isGenerateKey
 48 	 * @param @return    設定文件   49 	 * @return boolean    返回類型   50 	 * @throws   51 	 */
 52 	public boolean update(String sql, Object[] obj, boolean isGenerateKey) ;
 53 	/**
 54 	 *
 55 	 * @Title: updateByPreparedStatement  增長、刪除、改
 56 	 * @Description: (增長、刪除、改)   57 	 * @param @param sql
 58 	 * @param @param params
 59 	 * @param @return    設定文件   60 	 * @return boolean    返回類型   61 	 * @throws   62 	 */
 63 	public boolean updateByPreparedStatement(String sql, List<Object> params) ;
 64 
 65 
 66 
 67 	/**
 68 	 * insert update delete SQL語句的執行的統一方法
 69 	 *
 70 	 * @param sql
 71 	 *            SQL語句
 72 	 * @param params
 73 	 *            參數數組,若沒有參數則爲null
 74 	 * @return 受影響的行數
 75 	 */
 76 	public int executeUpdate(String sql, Object[] params) ;
 77 
 78 
 79 	/**
 80 	 *
 81 	 * @Title: query   82 	 * @Description: ( )   83 	 * @param @param sql
 84 	 * @param @param obj
 85 	 * @param @param mapper
 86 	 * @param @return    設定文件   87 	 * @return List<? extends Object>    返回類型   88 	 * @throws   89 	 */
 90 	public List<? extends Object> query(String sql, Object[] obj,
 91 			ObjectMapper mapper) ;
 92 
 93 	/**
 94 	 *
 95 	* @author   liujun<1136808529@qq.coom>
 96 	* @date 2016-5-12 下午1:58:12   97 	* @version V1.0    98 	* @Title: query   99 	* @Description: (
100 	 *
101 	 *)  102 	* @param @param sql
103 	* @param @param obj
104 	* @param @param mapper
105 	* @param @return    設定文件  106 	* @return List<? extends Object>    返回類型  107 	* @throws  108 	 */
109 	public List<? extends Object> query(String sql, List obj,
110 			ObjectMapper mapper) ;
111 
112 
113 
114 
115      /**
116       *
117      * @Title: returnTableCount  118      * @Description: ( select count(*)from table 的總數據條數)  119      * @param @param table
120      * @param @return    設定文件  121      * @return int    返回類型  122      * @throws  123       */
124 	public int returnTableCount(String table);
125 	/**
126 	 *
127 	* @author   liujun<1136808529@qq.coom>
128 	* @date 2016-5-12 下午11:19:59  129 	* @version V1.0   130 	* @Title: Count  131 	* @Description: (
132 	 * 返回 統計count 數據的數量
133 	 *)  134 	* @param @param sql
135 	* @param @return    設定文件  136 	* @return int    返回類型  137 	* @throws  138 	 */
139 	public long  Count(String sql);
140 	/**
141 	 *
142 	 * @Title: findSimpleResult  獲取最後一條(單條)記錄
143 	 * @Description: (查詢單條記錄)  144 	 * @param @param sql
145 	 * @param @param params
146 	 * @param @return    設定文件  147 	 * @return Map<String,Object>    返回類型  148 	 * @throws  149 	 */
150 	public Map<String, Object> findSimpleResult(String sql, List<Object> params);
151 	/**
152 	 * 獲取結果集,並將結果放在List中
153 	 *
154 	 * @param sql
155 	 *            SQL語句
156 	 * @return List 結果集
157 	 */
158 	public List<Object> excuteQuery(String sql, Object[] params) ;
159 
160      /**
161 	 *
162 	 * @Title: findModeResult  查詢多條記錄
163 	 * @Description: (查詢多條記錄)  164 	 * @param @param sql
165 	 * @param @param params
166 	 * @param @return
167 	 * @param @throws SQLException    設定文件  168 	 * @return List<Map<String,Object>>    返回類型  169 	 * @throws  170 	 */
171 	public List<Map<String, Object>> findModeResult(String sql,	List<Object> params) ;
172 
173 	/**
174 	 * SQL 查詢將查詢結果:一行一列
175 	 *
176 	 * @param sql
177 	 *            SQL語句
178 	 * @param params
179 	 *            參數數組,若沒有參數則爲null
180 	 * @return 結果集
181 	 */
182 	public Object executeQuerySingle(String sql, Object[] params) ;
183 
184 
185 	/**
186 	 *
187 	 * @Title: findSimpleRefResult  經過反射機制查詢單條記錄
188 	 * @Description: (經過反射機制查詢單條記錄)  189 	 * @param @param sql
190 	 * @param @param params
191 	 * @param @param cls
192 	 * @param @return
193 	 * @param @throws Exception    設定文件  194 	 * @return T    返回類型  195 	 * @throws  196 	 */
197 	public    <T> T  findSimpleRefResult(String sql, List<Object> params,Class<T> cls) ;
198 	/**
199 	 * 經過反射機制查詢多條記錄
200 	 *
201 	 * @param sql
202 	 * @param params
203 	 * @param cls
204 	 * @return
205 	 * @throws Exception
206 	 */
207 	public <T> List<T> findMoreRefResult(String sql, List<Object> params,
208 			Class<T> cls) ;
209 
210 	/**
211 	 *
212 	 * @Title: find  213 	 * @Description: ( 查詢一條記錄)  214 	 * @param @param sql
215 	 * @param @param obj
216 	 * @param @param mapper
217 	 * @param @return    設定文件  218 	 * @return Object    返回類型  219 	 * @throws  220 	 */
221 	public Object find(String sql, Object[] obj, ObjectMapper mapper)  ;
222 	/**
223 	 *
224 	* @author   liujun<1136808529@qq.coom>
225 	* @date 2016-5-14 下午1:18:51  226 	* @version V1.0   227 	* @Title: find  228 	* @Description: (
229 	 *  查詢一條記錄
230 	 *)  231 	* @param @param sql
232 	* @param @param obj
233 	* @param @param mapper
234 	* @param @return    設定文件  235 	* @return Object    返回類型  236 	* @throws  237 	 */
238 	public Object find(String sql, List obj, ObjectMapper mapper);
239 	/**
240 	 *
241 	 * @Title: executeQuery  統一的select語句,爲了可以訪問結果集,將結果集放入ArrayList,這樣能夠直接關閉資源
242 	 * @Description: (統一的select語句,爲了可以訪問結果集,將結果集放入ArrayList,這樣能夠直接關閉資源)  243 	 * @param @param sql
244 	 * @param @param parameters
245 	 * @param @return    設定文件  246 	 * @return ArrayList    返回類型  247 	 * @throws  248 	 */
249 	@SuppressWarnings({ "rawtypes", "unchecked" })
250 	public ArrayList executeQuery(String sql, String[] parameters);
251 
252 	/**
253 	 *
254 	 * @Title: executeQuery  by statement
255 	 * @Description: (執行 查詢sql 獲取結果集)  256 	 * @param @param sql
257 	 * @param @return statement resultSet
258 	 * @param @throws SQLException    設定文件  259 	 * @return ResultSet    返回類型  260 	 * @throws  261 	 */
262 	public ResultSet executeQuery(String sql);
263 
264 
265 	//-------------------------------------------對象化---------------
266 
267 
268 
269 
270 
271 
272 
273 
274 //----------------------存儲過程調用-------------------------------------------
275 
276 
277 	/**
278 	 * 存儲過程帶有一個輸出參數的方法
279 	 *
280 	 * @param sql
281 	 *            存儲過程語句
282 	 * @param params
283 	 *            參數數組
284 	 * @param outParamPos
285 	 *            輸出參數位置
286 	 * @param SqlType
287 	 *            輸出參數類型
288 	 * @return 輸出參數的值
289 	 */
290 	public Object executeQuery(String sql, Object[] params, int outParamPos,
291 			int SqlType) ;
292 
293     /**
294      * 執行不返回結果集的存儲過程
295      *
296      * @param sql
297      *            存儲過程名稱
298      * @param params
299      *            存儲過程參數
300      * @throws ClassNotFoundException
301      * @throws SQLException
302      */
303     public   void executeNonQuery(String sql, SqlParameter... params) ;
304 
305     /**
306      * 執行Insert語句,返回Insert成功以後標識列的值
307      *
308      * @param sql
309      * @return
310      * @throws ClassNotFoundException
311      * @throws SQLException
312      */
313     public   int executeIdentity(String sql) ;
314     /**
315      * 執行不返回結果集的存儲過程
316      *
317      * @param sql
318      *            存儲過程名稱
319      * @param params
320      *            存儲過程參數
321      * @throws ClassNotFoundException
322      * @throws SQLException
323      */
324     public   void executeNonQuery1(String sql, SqlParameter... params) ;
325     /**
326      * 執行返回聚合函數的操做
327      *
328      * @param sql
329      *            含有聚合函數的SQL語句
330      * @return 聚合函數的執行結果
331      * @throws SQLException
332      * @throws ClassNotFoundException
333      */
334     public   int executeScalar(String sql) ;
335     /**
336      * 執行返回泛型集合的SQL語句
337      *
338      * @param cls
339      *            泛型類型
340      * @param sql
341      *            查詢SQL語句
342      * @return 泛型集合
343      * @throws ClassNotFoundException
344      * @throws SQLException
345      * @throws InstantiationException
346      * @throws IllegalAccessException
347      */
348     public   <T> List<T> executeList(Class<T> cls, String sql) ;
349     /**
350      * 執行返回泛型集合的存儲過程
351      *
352      * @param cls
353      *            泛型類型
354      * @param sql
355      *            存儲過程名稱
356      * @param params
357      *            存儲過程參數
358      * @return 泛型集合
359      * @throws ClassNotFoundException
360      * @throws SQLException
361      * @throws InstantiationException
362      * @throws IllegalAccessException
363      */
364     public   <T> List<T> executeList(Class<T> cls, String sql,
365             SqlParameter... params)  ;
366     /**
367      * 執行返回泛型類型對象的SQL語句
368      *
369      * @param cls
370      *            泛型類型
371      * @param sql
372      *            SQL語句
373      * @return 泛型類型對象
374      * @throws SQLException
375      * @throws ClassNotFoundException
376      * @throws InstantiationException
377      * @throws IllegalAccessException
378      */
379     public   <T> T executeEntity(Class<T> cls, String sql)  ;
380     /**
381      * 執行返回泛型類型對象的存儲過程
382      *
383      * @param cls
384      *            泛型類型
385      * @param sql
386      *            SQL語句
387      * @param params
388      *            存儲過程參數
389      * @return 泛型類型對象
390      * @throws SQLException
391      * @throws ClassNotFoundException
392      * @throws InstantiationException
393      * @throws IllegalAccessException
394      */
395     public   <T> T executeEntity(Class<T> cls, String sql,
396             SqlParameter... params) ;
397 
398 	/**
399 	 *
400 	 * @Title: executeUpdate  by statement
401 	 * @Description: (更新結果集)  402 	 * @param @param sql
403 	 * @param @return
404 	 * @param @throws SQLException    設定文件  405 	 * @return int    返回類型  406 	 * @throws  407 	 */
408 	@SuppressWarnings("null")
409 	public int executeUpdate(String sql)  ;
410 
411 
412 
413 
414 	/**
415 	 *
416 	* @author   liujun<1136808529@qq.coom>
417 	* @date 2016-5-17 上午11:33:28  418 	* @version V1.0   419 	* @Title: getSeq  420 	* @Description:  (
421 	 *  獲取sequence 序列號
422 	 *)  423 	* @param @param sequenceName
424 	* @param @return    設定文件  425 	* @return int    返回類型  426 	* @throws  427 	 */
428 	public int getSeq(String sequenceName) ;
429 }
430 

jdbc.java

  1 package com.jacezhu.dao;
  2 
  3 import java.util.ArrayList;
  4 import java.util.List;
  5 import java.util.Map;
  6 
  7 import com.jacezhu.framework.connectUtil.jdbcUtl.ObjectMapper;
  8 import com.jacezhu.framework.connectUtil.jdbcUtl.PageModel;
  9 
 10 /**
 11  *
 12 * @Title: JdbcUtil.java   13 * @Package com.jacezhu.framework.connectUtil.jdbcUtl   14 * @Description: (JdbcUtil)   15 * @author  劉軍
 16 * @date 2016-3-17 下午11:04:19   17 * @version V1.0    18  */
 19 public interface JdbcDao  {
 20 
 21 
 22 	/**
 23 	 *
 24 	* @Title: insert   25 	* @Description: (插入單挑數據)   26 	* @param @param sql 查詢sql
 27 	* @param @param obj 參數數組
 28 	* @param @param isGenerateKey (true  false)
 29 	* @param @return    設定文件   30 	* @return boolean    返回類型   31 	* @throws   32 	 */
 33 	public boolean insert(String sql, Object[] obj);
 34 	/**
 35 	 *
 36 	* @author  劉軍
 37 	* @date 2016-3-19 下午2:23:42   38 	* @version V1.0    39 	* @Title: insertLines   40 	* @Description: (新增)   41 	* @param @param sql
 42 	* @param @param obj
 43 	* @param @return    設定文件   44 	* @return int    返回類型   45 	* @throws   46 	 */
 47 	public int insertLines(String sql, Object[] obj);
 48 	/**
 49 	 *
 50 	* @author  劉軍
 51 	* @date 2016-3-19 下午2:05:19   52 	* @version V1.0    53 	* @Title: insert   54 	* @Description: (新增)   55 	* @param @param sql
 56 	* @param @param obj
 57 	* @param @return    設定文件   58 	* @return boolean    返回類型   59 	* @throws   60 	 */
 61 	public boolean insertByList(String sql, List<Object> obj);
 62 
 63 	/**
 64 	 *
 65 	* @Title: delete   66 	* @Description: (刪除單挑數據)   67 	* @param @param sql 刪除sql
 68 	* @param @param obj 參數數組
 69 	* @param @param isGenerateKey (true  false)
 70 	* @param @return    設定文件   71 	* @return boolean    返回類型   72 	* @throws   73 	 */
 74 	public boolean delete(String sql, Object[] obj);
 75 	/**
 76 	 *
 77 	* @author  劉軍
 78 	* @date 2016-3-19 下午2:19:20   79 	* @version V1.0    80 	* @Title: delete   81 	* @Description: (刪除單挑數據)   82 	* @param @param sql
 83 	* @param @param obj
 84 	* @param @return    設定文件   85 	* @return boolean    返回類型   86 	* @throws   87 	 */
 88 	public boolean delete(String sql,List<Object> obj);
 89 
 90 	 /**
 91 	  *
 92 	 * @Title: deleteALL   93 	 * @Description: (批量刪除數據)   94 	 * @param @param sql
 95 	 * @param @param obj
 96 	 * @param @return    設定文件   97 	 * @return boolean    返回類型   98 	 * @throws   99 	  */
100 	public boolean deleteALL(String sql, Object[] obj);
101 	/**
102 	 *
103 	* @author  劉軍
104 	* @date 2016-3-19 下午2:20:56  105 	* @version V1.0   106 	* @Title: deleteALL  107 	* @Description: (刪除 批量刪除 )  108 	* @param @param sql
109 	* @param @param obj
110 	* @param @return    設定文件  111 	* @return boolean    返回類型  112 	* @throws  113 	 */
114 	public boolean deleteALL(String sql,List<Object> obj);
115 	 /**
116 	  *
117 	 * @Title: update  118 	 * @Description: (更新單挑數據記錄)  119 	 * @param @param sql
120 	 * @param @param obj
121 	 * @param @return    設定文件  122 	 * @return boolean    返回類型  123 	 * @throws  124 	  */
125 	public boolean update(String sql, Object[] obj);
126 	/**
127 	 *
128 	* @author  劉軍
129 	* @date 2016-3-19 下午2:21:45  130 	* @version V1.0   131 	* @Title: update  132 	* @Description: (修改 )  133 	* @param @param sql
134 	* @param @param obj
135 	* @param @return    設定文件  136 	* @return boolean    返回類型  137 	* @throws  138 	 */
139 	public boolean update(String sql, List<Object> obj);
140 	 /**
141 	  *
142 	 * @Title: queryFrist  143 	 * @Description: (查詢出第一條數據記錄)  144 	 * @param @param tale
145 	 * @param @param objParams
146 	 * @param @return    設定文件  147 	 * @return Object    返回類型  148 	 * @throws  149 	  */
150 	 public Object queryFrist(String tale,Object[] objParams,ObjectMapper mapper);
151 	 /**
152 	  *
153 	 * @author  劉軍
154 	 * @date 2016-3-19 上午9:41:06  155 	 * @version V1.0   156 	 * @Title: find  157 	 * @Description: (查詢一條記錄 )  158 	 * @param @param sql
159 	 * @param @param obj
160 	 * @param @param mapper
161 	 * @param @return    設定文件  162 	 * @return Object    返回類型  163 	 * @throws  164 	  */
165 	 public	 Object find(String sql, Object[] obj, ObjectMapper mapper);
166 	 /**
167 		 *
168 		* @author   liujun<1136808529@qq.coom>
169 		* @date 2016-5-14 下午1:18:51  170 		* @version V1.0   171 		* @Title: find  172 		* @Description: (
173 		 *  查詢一條記錄
174 		 *)  175 		* @param @param sql
176 		* @param @param obj
177 		* @param @param mapper
178 		* @param @return    設定文件  179 		* @return Object    返回類型  180 		* @throws  181 		 */
182 		public Object find(String sql, List obj, ObjectMapper mapper);
183 	/**
184 	 *
185 	* @Title: query  186 	* @Description: ( 查詢全部的數據記錄;並以list 集合(或者:Object 對象)返回 )  187 	* @param @param sql
188 	* @param @param obj
189 	* @param @param mapper
190 	* @param @return    設定文件  191 	* @return List<? extends Object>    返回類型  192 	* @throws  193 	 */
194 	public List<? extends Object> query(String sql, Object[] obj,
195 			ObjectMapper mapper) ;
196 	/**
197 	 *
198 	* @author   liujun<1136808529@qq.coom>
199 	* @date 2016-5-12 下午2:03:54  200 	* @version V1.0   201 	* @Title: query  202 	* @Description: (
203 	 *
204 	 *)  205 	* @param @param sql
206 	* @param @param obj
207 	* @param @param mapper
208 	* @param @return    設定文件  209 	* @return List<? extends Object>    返回類型  210 	* @throws  211 	 */
212 	public List<? extends Object> query(String sql, List obj,
213 			ObjectMapper mapper) ;
214 	/**
215 	 *
216 	* @author   liujun<1136808529@qq.coom>
217 	* @date 2016-5-12 下午11:19:59  218 	* @version V1.0   219 	* @Title: Count  220 	* @Description: (
221 	 * 返回 統計count 數據的數量
222 	 *)  223 	* @param @param sql
224 	* @param @return    設定文件  225 	* @return int    返回類型  226 	* @throws  227 	 */
228 	public long  Count(String sql);
229 	/**
230 	 *
231 	* @Title: CountNum  232 	* @Description: ( select count(*)from table 的總數據條數)
233 	* @param @param tableName (數據庫表名)
234 	* @param @return    設定文件  235 	* @return int    返回類型  236 	* @throws  237 	 */
238 	public int CountNum (String tableName);
239 	/**
240 	 *
241 	* @Title: queryPageNumber  242 	* @Description: (分頁查詢)  243 	* @param @param pageNo 第幾頁
244 	* @param @param pageSize  一頁顯示多少條數據
245 	* @param @param table  查詢哪一個表
246 	* 全表無條件查詢
247 	*  {select * from ( tablea a,tableb b where a.id=b.id)limt numStrat,numStop}
248 	* 全表 帶條件模糊查詢:
249 	*SELECT * FROM  demo a ,demo b WHERE a.id=b.id AND  a.id LIKE "1%" LIMIT 0,15;
250 	* @param @return    設定文件  251 	* @return PageModel    返回類型  252 	* @throws  253 	 */
254 	public PageModel queryPageNumber(int pageNo, int pageSize,String table) ;
255 	/**
256 	 *
257 	 * @Title: findSimpleResult  獲取最後一條(單條)記錄
258 	 * @Description: (查詢單條記錄)  259 	 * @param @param sql
260 	 * @param @param params
261 	 * @param @return    設定文件  262 	 * @return Map<String,Object>    返回類型  263 	 * @throws  264 	 */
265 	public Map<String, Object> findSimpleResult(String sql, List<Object> params);
266 	/**
267 	 *
268 	* @author  劉軍
269 	* @date 2016-3-19 上午12:30:02  270 	* @version V1.0   271 	* @Title: findModeResult  查詢多條記錄
272 	* @Description: (查詢多條記錄)  273 	* @param @param sql
274 	* @param @param params
275 	* @param @return    設定文件  276 	* @return List<Map<String,Object>>    返回類型  277 	* @throws  278 	 */
279 	public List<Map<String, Object>> findModeResult(String sql,	List<Object> params);
280 	/**
281 	 *
282 	* @author  劉軍
283 	* @date 2016-3-19 上午8:43:07  284 	* @version V1.0   285 	* @Title: executeQuerySingle  286 	* @Description: (SQL 查詢將查詢結果:一行一列)  287 	* @param @param sql
288 	* @param @param params
289 	* @param @return    設定文件  290 	* @return Object    返回類型  291 	* @throws  292 	 */
293 	public Object executeQuerySingle(String sql, Object[] params);
294 
295 	/**
296 	 *
297 	* @author  劉軍
298 	* @date 2016-3-19 上午9:08:05  299 	* @version V1.0   300 	* @Title: findSimpleRefResult  301 	* @Description: (經過反射機制查詢單條記錄
302 	*   若是須要調用:請調用jdbcBaseUtil
303 	* )  304 	* @param @param sql
305 	* @param @param params
306 	* @param @param cls
307 	* @param @return    設定文件  308 	* @return T    返回類型  309 	* @throws  310 	 */
311 	public <T> T findSimpleRefResult(String sql, List<Object> params,Class<T> cls) ;
312 	/**
313 	 *
314 	* @author  劉軍
315 	* @date 2016-3-19 上午9:13:39  316 	* @version V1.0   317 	* @Title: findMoreRefResult  318 	* @Description: ( 經過反射機制查詢多條記錄)  319 	* @param @param sql
320 	* @param @param params
321 	* @param @param cls
322 	* @param @return    設定文件  323 	* @return List<T>    返回類型  324 	* @throws  325 	 */
326 	public <T> List<T> findMoreRefResult(String sql, List<Object> params,
327 			Class<T> cls);
328 	/**
329 	 *
330 	* @author  劉軍
331 	* @date 2016-3-19 上午11:03:06  332 	* @version V1.0   333 	* @Title: excuteQuery  334 	* @Description: (獲取結果集,並將結果放在List中)  335 	* @param @param sql
336 	* @param @param params
337 	* @param @return    設定文件  338 	* @return List<Object>    返回類型  339 	* @throws  340 	 */
341 	public List<Object> excuteQuery(String sql, Object[] params);
342 	/**
343 	 *
344 	* @author  劉軍
345 	* @date 2016-3-19 上午11:03:03  346 	* @version V1.0   347 	* @Title: executeQuery  348 	* @Description: (統一的select語句,爲了可以訪問結果集,將結果集放入ArrayList,)  349 	* @param @param sql
350 	* @param @param parameters
351 	* @param @return    設定文件  352 	* @return ArrayList    返回類型  353 	* @throws  354 	 */
355 	public ArrayList executeQuery(String sql, String[] parameters) ;
356 
357 	/**
358 	 *
359 	* @author   liujun<1136808529@qq.coom>
360 	* @date 2016-5-17 上午11:33:28  361 	* @version V1.0   362 	* @Title: getSeq  363 	* @Description:  (
364 	 *  獲取sequence 序列號
365 	 *)  366 	* @param @param sequenceName
367 	* @param @return    設定文件  368 	* @return int    返回類型  369 	* @throws  370 	 */
371 	public int getSeq(String sequenceName);
372 }
373 

BaseDaoImpl.java

  1 package com.jacezhu.dao.impl;
  2 
  3 import java.io.Serializable;
  4 import java.math.BigInteger;
  5 import java.util.List;
  6 import java.util.Map;
  7 
  8 import com.jacezhu.dao.BaseDaoI;
  9 
 10 import org.hibernate.Query;
 11 import org.hibernate.SQLQuery;
 12 import org.hibernate.Session;
 13 import org.hibernate.SessionFactory;
 14 import org.springframework.beans.factory.annotation.Autowired;
 15 import org.springframework.stereotype.Repository;
 16 
 17 @Repository
 18 public class BaseDaoImpl<T> implements BaseDaoI<T> {
 19 
 20 	@Autowired
 21 	private SessionFactory sessionFactory;
 22 
 23 	/**
 24 	 * 得到當前事物的session
 25 	 *
 26 	 * @return org.hibernate.Session
 27 	 */
 28 	public Session getCurrentSession() {
 29 		return this.sessionFactory.getCurrentSession();
 30 	}
 31 
 32 	@Override
 33 	public Serializable save(T o) {
 34 		if (o != null) {
 35 			return this.getCurrentSession().save(o);
 36 		}
 37 		return null;
 38 	}
 39 
 40 	@Override
 41 	public T get(Class<T> c, Serializable id) {
 42 		return (T) this.getCurrentSession().get(c, id);
 43 	}
 44 
 45 	@Override
 46 	public T get(String hql) {
 47 		Query q = this.getCurrentSession().createQuery(hql);
 48 		List<T> l = q.list();
 49 		if ((l != null) && (l.size() > 0)) {
 50 			return l.get(0);
 51 		}
 52 		return null;
 53 	}
 54 
 55 	@Override
 56 	public T get(String hql, Map<String, Object> params) {
 57 		Query q = this.getCurrentSession().createQuery(hql);
 58 		if ((params != null) && !params.isEmpty()) {
 59 			for (String key : params.keySet()) {
 60 				q.setParameter(key, params.get(key));
 61 			}
 62 		}
 63 		List<T> l = q.list();
 64 		if ((l != null) && (l.size() > 0)) {
 65 			return l.get(0);
 66 		}
 67 		return null;
 68 	}
 69 
 70 	@Override
 71 	public void delete(T o) {
 72 		if (o != null) {
 73 			this.getCurrentSession().delete(o);
 74 		}
 75 	}
 76 
 77 	@Override
 78 	public void update(T o) {
 79 		if (o != null) {
 80 			this.getCurrentSession().update(o);
 81 		}
 82 	}
 83 
 84 	@Override
 85 	public void saveOrUpdate(T o) {
 86 		if (o != null) {
 87 			this.getCurrentSession().saveOrUpdate(o);
 88 		}
 89 	}
 90 
 91 	@Override
 92 	public List<T> find(String hql) {
 93 		Query q = this.getCurrentSession().createQuery(hql);
 94 		return q.list();
 95 	}
 96 
 97 	@Override
 98 	public List<T> find(String hql, Map<String, Object> params) {
 99 		Query q = this.getCurrentSession().createQuery(hql);
100 		if ((params != null) && !params.isEmpty()) {
101 			for (String key : params.keySet()) {
102 				q.setParameter(key, params.get(key));
103 			}
104 		}
105 		return q.list();
106 	}
107 
108 	@Override
109 	public List<T> find(String hql, Map<String, Object> params, int page,
110 			int rows) {
111 		Query q = this.getCurrentSession().createQuery(hql);
112 		if ((params != null) && !params.isEmpty()) {
113 			for (String key : params.keySet()) {
114 				q.setParameter(key, params.get(key));
115 			}
116 		}
117 		return q.setFirstResult((page - 1) * rows).setMaxResults(rows).list();
118 	}
119 
120 	@Override
121 	public List<T> find(String hql, int page, int rows) {
122 		Query q = this.getCurrentSession().createQuery(hql);
123 		return q.setFirstResult((page - 1) * rows).setMaxResults(rows).list();
124 	}
125 
126 	@Override
127 	public Long count(String hql) {
128 		Query q = this.getCurrentSession().createQuery(hql);
129 		return (Long) q.uniqueResult();
130 	}
131 
132 	@Override
133 	public Long count(String hql, Map<String, Object> params) {
134 		Query q = this.getCurrentSession().createQuery(hql);
135 		if ((params != null) && !params.isEmpty()) {
136 			for (String key : params.keySet()) {
137 				q.setParameter(key, params.get(key));
138 			}
139 		}
140 		return (Long) q.uniqueResult();
141 	}
142 
143 	@Override
144 	public int executeHql(String hql) {
145 		Query q = this.getCurrentSession().createQuery(hql);
146 		return q.executeUpdate();
147 	}
148 
149 	@Override
150 	public int executeHql(String hql, Map<String, Object> params) {
151 		Query q = this.getCurrentSession().createQuery(hql);
152 		if ((params != null) && !params.isEmpty()) {
153 			for (String key : params.keySet()) {
154 				q.setParameter(key, params.get(key));
155 			}
156 		}
157 		return q.executeUpdate();
158 	}
159 
160 	@Override
161 	public List<Object[]> findBySql(String sql) {
162 		SQLQuery q = this.getCurrentSession().createSQLQuery(sql);
163 		return q.list();
164 	}
165 
166 	@Override
167 	public List<Object[]> findBySql(String sql, int page, int rows) {
168 		SQLQuery q = this.getCurrentSession().createSQLQuery(sql);
169 		return q.setFirstResult((page - 1) * rows).setMaxResults(rows).list();
170 	}
171 
172 	@Override
173 	public List<Object[]> findBySql(String sql, Map<String, Object> params) {
174 		SQLQuery q = this.getCurrentSession().createSQLQuery(sql);
175 		if ((params != null) && !params.isEmpty()) {
176 			for (String key : params.keySet()) {
177 				q.setParameter(key, params.get(key));
178 			}
179 		}
180 		return q.list();
181 	}
182 
183 	@Override
184 	public List<Object[]> findBySql(String sql, Map<String, Object> params,
185 			int page, int rows) {
186 		SQLQuery q = this.getCurrentSession().createSQLQuery(sql);
187 		if ((params != null) && !params.isEmpty()) {
188 			for (String key : params.keySet()) {
189 				q.setParameter(key, params.get(key));
190 			}
191 		}
192 		return q.setFirstResult((page - 1) * rows).setMaxResults(rows).list();
193 	}
194 
195 	@Override
196 	public int executeSql(String sql) {
197 		SQLQuery q = this.getCurrentSession().createSQLQuery(sql);
198 		return q.executeUpdate();
199 	}
200 
201 	@Override
202 	public int executeSql(String sql, Map<String, Object> params) {
203 		SQLQuery q = this.getCurrentSession().createSQLQuery(sql);
204 		if ((params != null) && !params.isEmpty()) {
205 			for (String key : params.keySet()) {
206 				q.setParameter(key, params.get(key));
207 			}
208 		}
209 		return q.executeUpdate();
210 	}
211 
212 	@Override
213 	public BigInteger countBySql(String sql) {
214 		SQLQuery q = this.getCurrentSession().createSQLQuery(sql);
215 		return (BigInteger) q.uniqueResult();
216 	}
217 
218 	@Override
219 	public BigInteger countBySql(String sql, Map<String, Object> params) {
220 		SQLQuery q = this.getCurrentSession().createSQLQuery(sql);
221 		if ((params != null) && !params.isEmpty()) {
222 			for (String key : params.keySet()) {
223 				q.setParameter(key, params.get(key));
224 			}
225 		}
226 		return (BigInteger) q.uniqueResult();
227 	}
228 
229 	@Override
230 	public void refresh(T o) {
231 		this.getCurrentSession().refresh(o);
232 
233 	}
234 
235 	@Override
236 	public void merge(T o) {
237 		this.getCurrentSession().merge(o);
238 	}
239 }
240 

JdbcBaseDaoImpl.java

  1 package com.jacezhu.dao.impl;
  2 
  3 import java.lang.reflect.Field;
  4 import java.sql.CallableStatement;
  5 import java.sql.Connection;
  6 import java.sql.PreparedStatement;
  7 import java.sql.ResultSet;
  8 import java.sql.ResultSetMetaData;
  9 import java.sql.SQLException;
 10 import java.sql.Statement;
 11 import java.util.ArrayList;
 12 import java.util.HashMap;
 13 import java.util.List;
 14 import java.util.Map;
 15 
 16 import javax.sql.DataSource;
 17 
 18 import org.springframework.stereotype.Repository;
 19 import com.jacezhu.dao.JdbcBaseDao;
 20 import com.jacezhu.framework.connectUtil.ConnUtil;
 21 import com.jacezhu.framework.connectUtil.DataSourceConnUtil;
 22 import com.jacezhu.framework.connectUtil.DruidDataSourceUtil;
 23 import com.jacezhu.framework.connectUtil.jdbcUtl.ObjectMapper;
 24 import com.jacezhu.framework.connectUtil.jdbcUtl.SqlParameter;
 25 
 26 @Repository
 27 public class JdbcBaseDaoImpl implements JdbcBaseDao {
 28 	/**
 29 	 * 獲取鏈接
 30 	 */
 31 	static {
 32 		getConnection();
 33 	}
 34     /**
 35     * @author  劉軍
 36     * @date 2016-3-19 上午11:14:17   37     * @version V1.0    38     * @Title: getStatement   39     * @Description: ( )   40     * @param @return
 41     * @param @throws SQLException    設定文件   42     * @return Connection    返回類型   43     * @throws   44      */
 45 	public Connection getStatement() throws SQLException {
 46 		Connection connection = null;
 47 		Statement statement = null;
 48 		// 僅當statement失效時才從新建立
 49 		if (statement == null || statement.isClosed() == true) {
 50 			statement = connection.createStatement(
 51 					ResultSet.TYPE_SCROLL_INSENSITIVE,
 52 					ResultSet.CONCUR_READ_ONLY);
 53 		}
 54 		return connection;
 55 	}
 56 
 57 	/**
 58 	 *
 59 	 * @Title: getConnection   60 	 * @Description: (獲得數據庫鏈接)   61 	 * @param @return    設定文件   62 	 * @return Connection    返回類型   63 	 * @throws   64 	 */
 65 	public static Connection getConnection() {
 66 		Connection connection = null;
 67 		try {
 68 			/**
 69 			 *  從 阿里巴巴 開源的數據庫鏈接池中獲取鏈接
 70 			 */
 71 			int dbType=0;
 72 			DataSource dataSource=DruidDataSourceUtil.getDataSource(dbType);
 73 			connection = dataSource.getConnection();
 74 			if (connection == null) {
 75 				/**
 76 				 *  鏈接C3P0 鏈接池
 77 				 */
 78 				connection = DataSourceConnUtil.getConnection();
 79 			}
 80 			if (connection == null) {
 81 				/**
 82 				 * 直接鏈接數據庫
 83 				 */
 84 				connection = ConnUtil.getConn();
 85 			}
 86 		} catch (Exception e) {
 87 			e.printStackTrace();
 88 		}
 89 		return connection;
 90 	}
 91 
 92 
 93 	/**
 94 	 *
 95 	 * @Title: update   96 	 * @Description: (更新:update)   97 	 * @param @param sql
 98 	 * @param @param obj
 99 	 * @param @param isGenerateKey
100 	 * @param @return    設定文件  101 	 * @return boolean    返回類型  102 	 * @throws  103 	 */
104 	public boolean update(String sql, Object[] obj, boolean isGenerateKey) {
105 		Connection conn = null;
106 		PreparedStatement pstmt = null;
107 		boolean bFlag = false;
108 		try {
109 			conn = JdbcBaseDaoImpl.getConnection();
110 			pstmt = isGenerateKey ? conn.prepareStatement(sql,
111 					Statement.RETURN_GENERATED_KEYS) : conn
112 					.prepareStatement(sql);
113 			for (int i = 0; i < obj.length; i++) {
114 				pstmt.setObject(i + 1, obj[i]);
115 			}
116 			conn.setAutoCommit(false);//JDBC 事務管理
117 			int i = pstmt.executeUpdate();
118 			conn.commit();//JDBC 事務管理
119 			if (i > 0)
120 				bFlag = true;
121 		} catch (SQLException ex) {
122 			ex.printStackTrace();
123 			try {
124 				conn.rollback();//JDBC 事務管理
125 			} catch (SQLException e) {
126 				e.printStackTrace();
127 			}
128 		} finally {
129 			try {
130 				conn.close();
131 				pstmt.close();
132 			} catch (SQLException ex) {
133 				ex.printStackTrace();
134 			}
135 		}
136 		return bFlag;
137 	}
138 	/**
139 	 *
140 	 * @Title: updateByPreparedStatement  增長、刪除、改
141 	 * @Description: (增長、刪除、改)  142 	 * @param @param sql
143 	 * @param @param params
144 	 * @param @return    設定文件  145 	 * @return boolean    返回類型  146 	 * @throws  147 	 */
148 	public boolean updateByPreparedStatement(String sql, List<Object> params) {
149 		boolean flag = false;
150 		Connection connection = null;
151 		PreparedStatement pstmt = null;
152 		int result = -1;
153 		try {
154 			connection = JdbcBaseDaoImpl.getConnection();
155 			pstmt = connection.prepareStatement(sql);
156 			int index = 1;
157 			if (params != null && !params.isEmpty()) {
158 				for (int i = 0; i < params.size(); i++) {
159 					pstmt.setObject(index++, params.get(i));
160 				}
161 			}
162 			result = pstmt.executeUpdate();
163 			connection.commit();//JDBC 事務管理
164 			flag = result > 0 ? true : false;
165 		} catch (SQLException e) {
166 			try {
167 				connection.rollback();//JDBC 事務管理
168 			} catch (SQLException e1) {
169 				e1.printStackTrace();
170 			}
171 			e.printStackTrace();
172 		} finally {
173 			try {
174 				pstmt.close();
175 				connection.close();
176 			} catch (SQLException e) {
177 				e.printStackTrace();
178 			}
179 
180 		}
181 		return flag;
182 	}
183 
184 
185 
186 	/**
187 	 * insert update delete SQL語句的執行的統一方法
188 	 *
189 	 * @param sql
190 	 *            SQL語句
191 	 * @param params
192 	 *            參數數組,若沒有參數則爲null
193 	 * @return 受影響的行數
194 	 */
195 	public int executeUpdate(String sql, Object[] params) {
196 		PreparedStatement preparedStatement = null;
197 		// 受影響的行數
198 		int affectedLine = 0;
199 		Connection connection = null;
200 		try {
201 			// 得到鏈接
202 			connection = JdbcBaseDaoImpl.getConnection();
203 			// 調用SQL
204 			preparedStatement = connection.prepareStatement(sql);
205 			// 參數賦值
206 			if (params != null) {
207 				for (int i = 0; i < params.length; i++) {
208 					preparedStatement.setObject(i + 1, params[i]);
209 				}
210 			}
211 			// 執行
212 			affectedLine = preparedStatement.executeUpdate();
213 			connection.commit();// 提交事務
214 		} catch (SQLException e) {
215 			System.out.println(e.getMessage());
216 			try {
217 				connection.rollback();//JDBC 事務管理
218 			} catch (SQLException e1) {
219 				e1.printStackTrace();
220 			}
221 		} finally {
222 			// 釋放資源
223 			close(connection, preparedStatement, null);
224 		}
225 		return affectedLine;
226 	}
227 
228 
229 
230 	/**
231 	 *
232 	 * @Title: query  233 	 * @Description: (這裏用一句話描述這個方法的做用)  234 	 * @param @param sql
235 	 * @param @param obj
236 	 * @param @param mapper
237 	 * @param @return    設定文件  238 	 * @return List<? extends Object>    返回類型  239 	 * @throws  240 	 */
241 	public List<? extends Object> query(String sql, Object[] obj,
242 			ObjectMapper mapper) {
243 		Object o = null;
244 		List<Object> list = new ArrayList<Object>();
245 		Connection conn = null;
246 		PreparedStatement pstmt = null;
247 		try {
248 			conn = JdbcBaseDaoImpl.getConnection();
249 			pstmt = conn.prepareStatement(sql);
250 			for (int i = 0; i < obj.length; i++) {
251 				pstmt.setObject(i + 1, obj[i]);
252 			}
253 			ResultSet rs = pstmt.executeQuery();
254 			while (rs.next()) {
255 				o = mapper.mapping(rs);
256 				list.add(o);
257 			}
258 		} catch (SQLException ex) {
259 			ex.printStackTrace();
260 		} finally {
261 			try {
262 				pstmt.close();
263 				conn.close();
264 			} catch (SQLException ex) {
265 				ex.printStackTrace();
266 			}
267 		}
268 		return list;
269 	}
270 	/**
271 	 *
272 	* @author   liujun<1136808529@qq.coom>
273 	* @date 2016-5-12 下午1:54:42  274 	* @version V1.0   275 	* @Title: query  276 	* @Description: (
277 	 *
278 	 *)  279 	* @param @param sql
280 	* @param @param obj
281 	* @param @param mapper
282 	* @param @return    設定文件  283 	* @return List<? extends Object>    返回類型  284 	* @throws  285 	 */
286 	public List<? extends Object> query(String sql, List obj,
287 			ObjectMapper mapper) {
288 		Object o = null;
289 		List<Object> list = new ArrayList<Object>();
290 		Connection conn = null;
291 		PreparedStatement pstmt = null;
292 		try {
293 			conn = JdbcBaseDaoImpl.getConnection();
294 			pstmt = conn.prepareStatement(sql);
295 			for (int i = 0; i < obj.size(); i++) {
296 				pstmt.setObject(i + 1, obj.get(i));
297 			}
298 			ResultSet rs = pstmt.executeQuery();
299 			while (rs.next()) {
300 				o = mapper.mapping(rs);
301 				list.add(o);
302 			}
303 		} catch (SQLException ex) {
304 			ex.printStackTrace();
305 		} finally {
306 			try {
307 				pstmt.close();
308 				conn.close();
309 			} catch (SQLException ex) {
310 				ex.printStackTrace();
311 			}
312 		}
313 		return list;
314 	}
315 
316      /**
317       *
318      * @Title: returnTableCount  319      * @Description: ( select count(*)from table 的總數據條數)  320      * @param @param table
321      * @param @return    設定文件  322      * @return int    返回類型  323      * @throws  324       */
325 	public int returnTableCount(String table){
326 		String sql="select count(*) as counts from "+table+"";
327 		Connection conn = null;
328 		ResultSet resultSet = null;
329 		Statement pstmt = null;
330 		int count=0;
331 		try {
332 			conn = JdbcBaseDaoImpl.getConnection();
333 			pstmt = conn.createStatement();
334 			resultSet=pstmt.executeQuery(sql);
335 			if(resultSet.next()){
336 				count=resultSet.getInt("counts");
337 			}
338 		} catch (Exception e) {
339 			e.printStackTrace();
340 		}finally{
341 			try {
342 				resultSet.close();
343 				pstmt.close();
344 				conn.close();
345 			} catch (SQLException ex) {
346 				ex.printStackTrace();
347 			}
348 		}
349 		return count;
350 
351 	}
352 	/**
353 	 *
354 	* @author   liujun<1136808529@qq.coom>
355 	* @date 2016-5-12 下午11:19:02  356 	* @version V1.0   357 	* @Title: Count  358 	* @Description: (
359 	 *  統計有多少記錄
360 	 *)  361 	* @param @param sql
362 	* @param @return    設定文件  363 	* @return int    返回類型  364 	* @throws  365 	 */
366 	public long  Count(String sql){
367 		if(sql==null || sql==""){
368 			 return (long)0;
369 		}
370 		Connection conn = null;
371 		ResultSet resultSet = null;
372 		Statement pstmt = null;
373 		long count=0;
374 		try {
375 			conn = JdbcBaseDaoImpl.getConnection();
376 			pstmt = conn.createStatement();
377 			resultSet=pstmt.executeQuery(sql);
378 			if(resultSet.next()){
379 				count=resultSet.getInt("counts");
380 			}
381 		} catch (Exception e) {
382 			e.printStackTrace();
383 		}finally{
384 			try {
385 				resultSet.close();
386 				pstmt.close();
387 				conn.close();
388 			} catch (SQLException ex) {
389 				ex.printStackTrace();
390 			}
391 		}
392 		return count;
393 
394 	}
395 
396 	/**
397 	 *
398 	 * @Title: findSimpleResult  獲取最後一條(單條)記錄
399 	 * @Description: (查詢單條記錄)  400 	 * @param @param sql
401 	 * @param @param params
402 	 * @param @return    設定文件  403 	 * @return Map<String,Object>    返回類型  404 	 * @throws  405 	 */
406 	public Map<String, Object> findSimpleResult(String sql, List<Object> params) {
407 		Map<String, Object> map = new HashMap<String, Object>();
408 		Connection connection = null;
409 		PreparedStatement pstmt = null;
410 		ResultSet resultSet = null;
411 		int index = 1;
412 		try {
413 			connection = JdbcBaseDaoImpl.getConnection();
414 			pstmt = connection.prepareStatement(sql);
415 			if (params != null && !params.isEmpty()) {
416 				for (int i = 0; i < params.size(); i++) {
417 					pstmt.setObject(index++, params.get(i));
418 				}
419 			}
420 			resultSet = pstmt.executeQuery();// 返回查詢結果
421 			ResultSetMetaData metaData = resultSet.getMetaData();
422 			int col_len = metaData.getColumnCount();
423 			while (resultSet.next()) {
424 			 	for (int i = 0; i < col_len; i++) {
425 					String cols_name = metaData.getColumnName( i +  1);
426 					Object cols_value = resultSet.getObject(cols_name);
427 					if (cols_value == null) {
428 						cols_value = "";
429 					}
430 					map.put(cols_name, cols_value);
431 			 	}
432 			}
433 		} catch (SQLException e) {
434 			e.printStackTrace();
435 		} finally {
436 			try {
437 				resultSet.close();
438 				pstmt.close();
439 				connection.close();
440 			} catch (SQLException e) {
441 				e.printStackTrace();
442 			}
443 		}
444 		return map;
445 	}
446 	/**
447 	 * 獲取結果集,並將結果放在List中
448 	 *
449 	 * @param sql
450 	 *            SQL語句
451 	 * @return List 結果集
452 	 */
453 	public List<Object> excuteQuery(String sql, Object[] params) {
454 		// 建立List
455 		List<Object> list = new ArrayList<Object>();
456 		Connection connection = null;
457 		ResultSet rs = null;
458 		// 建立ResultSetMetaData對象
459 		ResultSetMetaData rsmd = null;
460 		// 結果集列數
461 		int columnCount = 0;
462 		try {
463 			// 得到鏈接
464 			connection = JdbcBaseDaoImpl.getConnection();
465 			// 執行SQL得到結果集
466 			rs = executeQueryRS(sql, params);
467 			// 將ResultSet的結果保存到List中
468 			while (rs.next()) {
469 				rsmd = rs.getMetaData();
470 				// 得到結果集列數
471 				columnCount = rsmd.getColumnCount();
472 				Map<String, Object> map = new HashMap<String, Object>();
473 				for (int i = 1; i <= columnCount; i++) {
474 					map.put(rsmd.getColumnLabel(i), rs.getObject(i));
475 				}
476 				list.add(map);
477 			}
478 		} catch (SQLException e) {
479 			e.printStackTrace();
480 			System.out.println(e.getMessage());
481 		} finally {
482 			// 關閉全部資源
483 			try {
484 				rs.close();
485 				connection.close();
486 			} catch (Exception e) {
487 				e.printStackTrace();
488 			}
489 
490 		}
491 		return list;
492 	}
493 
494 	/**
495 	 * SQL 查詢將查詢結果直接放入ResultSet中
496 	 *
497 	 * @param sql
498 	 *            SQL語句
499 	 * @param params
500 	 *            參數數組,若沒有參數則爲null
501 	 * @return 結果集
502 	 */
503 	private ResultSet executeQueryRS(String sql, Object[] params) {
504 		Connection connection = null;
505 		PreparedStatement preparedStatement = null;
506 		ResultSet resultSet = null;
507 		try {
508 			// 得到鏈接
509 			connection = JdbcBaseDaoImpl.getConnection();
510 			// 調用SQL
511 			preparedStatement = connection.prepareStatement(sql);
512 			// 參數賦值
513 			if (params != null) {
514 				for (int i = 0; i < params.length; i++) {
515 					preparedStatement.setObject(i + 1, params[i]);
516 				}
517 			}
518 			// 執行
519 			resultSet = preparedStatement.executeQuery();
520 
521 		} catch (SQLException e) {
522 			System.out.println(e.getMessage());
523 		} finally {
524 			try {
525 				resultSet.close();
526 				preparedStatement.close();
527 				connection.close();
528 			} catch (SQLException e) {
529 				e.printStackTrace();
530 			}
531 		}
532 
533 		return resultSet;
534 	}
535 
536 	/**
537 	 *
538 	 * @Title: findModeResult  查詢多條記錄
539 	 * @Description: (查詢多條記錄)  540 	 * @param @param sql
541 	 * @param @param params
542 	 * @param @return
543 	 * @param @throws SQLException    設定文件  544 	 * @return List<Map<String,Object>>    返回類型  545 	 * @throws  546 	 */
547 	public List<Map<String, Object>> findModeResult(String sql,
548 			List<Object> params) {
549 		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
550 		Connection connection = null;
551 		PreparedStatement pstmt = null;
552 		ResultSet resultSet = null;
553 		int index = 1;
554 		try {
555 			connection = JdbcBaseDaoImpl.getConnection();
556 			pstmt = connection.prepareStatement(sql);
557 			if (params != null && !params.isEmpty()) {
558 				for (int i = 0; i < params.size(); i++) {
559 					pstmt.setObject(index++, params.get(i));
560 				}
561 			}
562 			resultSet = pstmt.executeQuery();
563 			ResultSetMetaData metaData = resultSet.getMetaData();
564 			int cols_len = metaData.getColumnCount();
565 			while (resultSet.next()) {
566 				Map<String, Object> map = new HashMap<String, Object>();
567 				for (int i = 0; i < cols_len; i++) {
568 					String cols_name = metaData.getColumnName(i + 1);
569 					Object cols_value = resultSet.getObject(cols_name);
570 					if (cols_value == null) {
571 						cols_value = "";
572 					}
573 					map.put(cols_name, cols_value);
574 				}
575 				list.add(map);
576 			}
577 		} catch (SQLException e) {
578 			e.printStackTrace();
579 		} finally {
580 			try {
581 				resultSet.close();
582 				pstmt.close();
583 				connection.close();
584 			} catch (SQLException e) {
585 				e.printStackTrace();
586 			}
587 		}
588 
589 		return list;
590 	}
591 
592 	/**
593 	 * SQL 查詢將查詢結果:一行一列
594 	 *
595 	 * @param sql
596 	 *            SQL語句
597 	 * @param params
598 	 *            參數數組,若沒有參數則爲null
599 	 * @return 結果集
600 	 */
601 	public Object executeQuerySingle(String sql, Object[] params) {
602 		Object object = null;
603 		Connection connection = null;
604 		PreparedStatement preparedStatement = null;
605 		ResultSet resultSet = null;
606 		try {
607 			// 得到鏈接
608 			connection = JdbcBaseDaoImpl.getConnection();
609 			// 調用SQL
610 			preparedStatement = connection.prepareStatement(sql);
611 			// 參數賦值
612 			if (params != null) {
613 				for (int i = 0; i < params.length; i++) {
614 					preparedStatement.setObject(i + 1, params[i]);
615 				}
616 			}
617 			// 執行
618 			resultSet = preparedStatement.executeQuery();
619 			if (resultSet.next()) {
620 				object = resultSet.getObject(1);
621 			}
622 		} catch (SQLException e) {
623 			System.out.println(e.getMessage());
624 		} finally {
625 			close(connection, preparedStatement, resultSet);
626 		}
627 		return object;
628 	}
629 
630 
631 
632 	/**
633 	 *
634 	 * @Title: findSimpleRefResult  經過反射機制查詢單條記錄
635 	 * @Description: (經過反射機制查詢單條記錄)  636 	 * @param @param sql
637 	 * @param @param params
638 	 * @param @param cls
639 	 * @param @return
640 	 * @param @throws Exception    設定文件  641 	 * @return T    返回類型  642 	 * @throws  643 	 */
644 	public   <T> T findSimpleRefResult(String sql, List<Object> params,
645 			Class<T> cls) {
646 		T resultObject = null;
647 		Connection connection = null;
648 		PreparedStatement pstmt = null;
649 		ResultSet resultSet = null;
650 		int index = 1;
651 		try {
652 			connection = JdbcBaseDaoImpl.getConnection();
653 			pstmt = connection.prepareStatement(sql);
654 			if (params != null && !params.isEmpty()) {
655 				for (int i = 0; i < params.size(); i++) {
656 					pstmt.setObject(index++, params.get(i));
657 				}
658 			}
659 			resultSet = pstmt.executeQuery();
660 			ResultSetMetaData metaData = resultSet.getMetaData();
661 			int cols_len = metaData.getColumnCount();
662 			while (resultSet.next()) {
663 				// 經過反射機制建立一個實例
664 				resultObject = cls.newInstance();
665 				for (int i = 0; i < cols_len; i++) {
666 					String cols_name = metaData.getColumnName(i + 1);
667 					Object cols_value = resultSet.getObject(cols_name);
668 					if (cols_value == null) {
669 						cols_value = "";
670 					}
671 					Field field = cls.getDeclaredField(cols_name);
672 					field.setAccessible(true); // 打開javabean的訪問權限
673 					field.set(resultObject, cols_value);
674 				}
675 			}
676 		} catch (Exception e) {
677 			e.printStackTrace();
678 		} finally {
679 			try {
680 				resultSet.close();
681 				pstmt.close();
682 				connection.close();
683 			} catch (SQLException e) {
684 				e.printStackTrace();
685 			}
686 		}
687 		return resultObject;
688 
689 	}
690 
691 	/**
692 	 * 經過反射機制查詢多條記錄
693 	 *
694 	 * @param sql
695 	 * @param params
696 	 * @param cls
697 	 * @return
698 	 * @throws Exception
699 	 */
700 	public <T> List<T> findMoreRefResult(String sql, List<Object> params,
701 			Class<T> cls) {
702 		List<T> list = new ArrayList<T>();
703 		Connection connection = null;
704 		PreparedStatement pstmt = null;
705 		ResultSet resultSet = null;
706 		int index = 1;
707 		try {
708 			connection = JdbcBaseDaoImpl.getConnection();
709 			pstmt = connection.prepareStatement(sql);
710 			if (params != null && !params.isEmpty()) {
711 				for (int i = 0; i < params.size(); i++) {
712 					pstmt.setObject(index++, params.get(i));
713 				}
714 			}
715 			resultSet = pstmt.executeQuery();
716 			ResultSetMetaData metaData = resultSet.getMetaData();
717 			int cols_len = metaData.getColumnCount();
718 			while (resultSet.next()) {
719 				// 經過反射機制建立一個實例
720 				T resultObject = cls.newInstance();
721 				for (int i = 0; i < cols_len; i++) {
722 					String cols_name = metaData.getColumnName(i + 1);
723 					Object cols_value = resultSet.getObject(cols_name);
724 					if (cols_value == null) {
725 						cols_value = "";
726 					}
727 					Field field = cls.getDeclaredField(cols_name);
728 					field.setAccessible(true); // 打開javabean的訪問權限
729 					field.set(resultObject, cols_value);
730 				}
731 				list.add(resultObject);
732 			}
733 		} catch (Exception e) {
734 			e.printStackTrace();
735 		} finally {
736 			try {
737 				resultSet.close();
738 				pstmt.close();
739 				connection.close();
740 			} catch (SQLException e) {
741 				e.printStackTrace();
742 			}
743 
744 		}
745 		return list;
746 	}
747 
748 	/**
749 	 *
750 	 * @Title: find  751 	 * @Description: (查詢一條記錄)  752 	 * @param @param sql
753 	 * @param @param obj
754 	 * @param @param mapper
755 	 * @param @return    設定文件  756 	 * @return Object    返回類型  757 	 * @throws  758 	 */
759 	public Object find(String sql, Object[] obj, ObjectMapper mapper) {
760 		Object o = null;
761 		Connection conn = null;
762 		PreparedStatement pstmt = null;
763 		try {
764 			conn = JdbcBaseDaoImpl.getConnection();
765 			pstmt = conn.prepareStatement(sql);
766 			for (int i = 0; i < obj.length; i++) {
767 				pstmt.setObject(i + 1, obj[i]);
768 				ResultSet rs = pstmt.executeQuery();
769 				if (rs.next()) {
770 					o = mapper.mapping(rs);
771 				}
772 			}
773 		} catch (Exception ex) {
774 			ex.printStackTrace();
775 		} finally {
776 			try {
777 				pstmt.close();
778 				conn.close();
779 			} catch (SQLException ex) {
780 				ex.printStackTrace();
781 			}
782 		}
783 		return o;
784 	}
785 	/**
786 	 *
787 	* @author   liujun<1136808529@qq.coom>
788 	* @date 2016-5-14 下午1:17:28  789 	* @version V1.0   790 	* @Title: find  791 	* @Description: (
792 	 *  查詢一條記錄
793 	 *)  794 	* @param @param sql
795 	* @param @param obj
796 	* @param @param mapper
797 	* @param @return    設定文件  798 	* @return Object    返回類型  799 	* @throws  800 	 */
801 	public Object find(String sql, List obj, ObjectMapper mapper) {
802 		Object o = null;
803 		Connection conn = null;
804 		PreparedStatement pstmt = null;
805 		try {
806 			conn = JdbcBaseDaoImpl.getConnection();
807 			pstmt = conn.prepareStatement(sql);
808 			for (int i = 0; i < obj.size(); i++) {
809 				pstmt.setObject(i + 1, obj.get(i));
810 				ResultSet rs = pstmt.executeQuery();
811 				if (rs.next()) {
812 					o = mapper.mapping(rs);
813 				}
814 			}
815 		} catch (Exception ex) {
816 			ex.printStackTrace();
817 		} finally {
818 			try {
819 				pstmt.close();
820 				conn.close();
821 			} catch (SQLException ex) {
822 				ex.printStackTrace();
823 			}
824 		}
825 		return o;
826 	}
827 
828 
829 	/**
830 	 *
831 	 * @Title: executeQuery  統一的select語句,爲了可以訪問結果集,將結果集放入ArrayList,這樣能夠直接關閉資源
832 	 * @Description: (統一的select語句,爲了可以訪問結果集,將結果集放入ArrayList,這樣能夠直接關閉資源)  833 	 * @param @param sql
834 	 * @param @param parameters
835 	 * @param @return    設定文件  836 	 * @return ArrayList    返回類型  837 	 * @throws  838 	 */
839 	@SuppressWarnings({ "rawtypes", "unchecked" })
840 	public ArrayList executeQuery(String sql, String[] parameters) {
841 		ArrayList results = new ArrayList();
842 		// 定義須要的變量
843 		Connection conn = null;
844 		PreparedStatement ps = null;
845 		ResultSet rs = null;
846 
847 		try {
848 			// 得到鏈接
849 			conn = JdbcBaseDaoImpl.getConnection();
850 			ps = conn.prepareStatement(sql);
851 
852 			if (parameters != null) {
853 				for (int i = 0; i < parameters.length; i++) {
854 					ps.setString(i + 1, parameters[i]);
855 				}
856 			}
857 			rs = ps.executeQuery();
858 			ResultSetMetaData rsmd = rs.getMetaData();
859 			int column = rsmd.getColumnCount();
860 			while (rs.next()) {
861 				Object[] objects = new Object[column];
862 				for (int i = 1; i <= column; i++) {
863 					objects[i - 1] = rs.getObject(i);
864 				}
865 				results.add(objects);
866 			}
867 		} catch (SQLException e) {
868 			e.printStackTrace();
869 			throw new RuntimeException(e.getMessage());
870 		} finally {
871 			try {
872 				rs.close();
873 				ps.close();
874 				conn.close();
875 			} catch (SQLException e) {
876 				e.printStackTrace();
877 			}
878 		}
879 		return results;
880 	}
881 
882 
883 	/**
884 	 *
885 	 * @Title: executeQuery  by statement
886 	 * @Description: (執行 查詢sql 獲取結果集)  887 	 * @param @param sql
888 	 * @param @return statement resultSet
889 	 * @param @throws SQLException    設定文件  890 	 * @return ResultSet    返回類型  891 	 * @throws  892 	 */
893 	public ResultSet executeQuery(String sql) {
894 		Statement statement = null;
895 		ResultSet resultSet = null;
896 		Connection connection = null;
897 		try {
898 			connection = getStatement();
899 			if (resultSet != null && resultSet.isClosed() == false) {
900 				resultSet.close();
901 			}
902 			resultSet = null;
903 			resultSet = statement.executeQuery(sql);
904 		} catch (Exception e) {
905 			e.printStackTrace();
906 		} finally {
907 
908 		}
909 		return resultSet;
910 	}
911 
912 
913 	//-------------------------------------------對象化---------------
914 	  /**
915      * 將一條記錄轉成一個對象
916      *
917      * @param cls
918      *            泛型類型
919      * @param rs
920      *            ResultSet對象
921      * @return 泛型類型對象
922      * @throws InstantiationException
923      * @throws IllegalAccessException
924      * @throws SQLException
925      */
926     private static <T> T executeResultSet(Class<T> cls, ResultSet rs)
927             throws InstantiationException, IllegalAccessException, SQLException {
928         T obj = cls.newInstance();
929         ResultSetMetaData rsm = rs.getMetaData();
930         int columnCount = rsm.getColumnCount();
931         // Field[] fields = cls.getFields();
932         Field[] fields = cls.getDeclaredFields();
933         for (int i = 0; i < fields.length; i++) {
934             Field field = fields[i];
935             String fieldName = field.getName();
936             for (int j = 1; j <= columnCount; j++) {
937                 String columnName = rsm.getColumnName(j);
938                 if (fieldName.equalsIgnoreCase(columnName)) {
939                     Object value = rs.getObject(j);
940                     field.setAccessible(true);
941                     field.set(obj, value);
942                     break;
943                 }
944             }
945         }
946         return obj;
947     }
948 
949 
950 
951 	/**
952 	 *
953 	* @author   liujun<1136808529@qq.coom>
954 	* @date 2016-5-17 上午11:33:28  955 	* @version V1.0   956 	* @Title: getSeq  957 	* @Description:  (
958 	 *  獲取sequence 序列號
959 	 *)  960 	* @param @param sequenceName
961 	* @param @return    設定文件  962 	* @return int    返回類型  963 	* @throws  964 	 */
965     public   int getSeq(String sequenceName){
966 		 int count = 0;
967 		  Connection conn = getConnection();
968 		  String sql = "SELECT nextval('"+sequenceName+"');";
969 		  PreparedStatement ptmt = null;
970 		  ResultSet rs = null;
971 		  try {
972 		    ptmt = conn.prepareStatement(sql);
973 		    rs = ptmt.executeQuery();
974 		    while (rs.next()) {
975 		      count = rs.getInt(1);
976 		    }
977 		    System.out.println(count);
978 		  } catch (SQLException e) {
979 		    e.printStackTrace();
980 		  } finally {
981 			  try {
982 				  rs.close();
983 				  ptmt.close();
984 				  conn.close();
985 			} catch (SQLException e) {
986 				e.printStackTrace();
987 			}
988 
989 		  }
990 
991 		return count;
992 	}
993 
994 
995 
996 
997 
998 
999 //----------------------存儲過程調用-------------------------------------------
1000 
1001 
1002 	/**
1003 	 * 存儲過程帶有一個輸出參數的方法
1004 	 *
1005 	 * @param sql
1006 	 *            存儲過程語句
1007 	 * @param params
1008 	 *            參數數組
1009 	 * @param outParamPos
1010 	 *            輸出參數位置
1011 	 * @param SqlType
1012 	 *            輸出參數類型
1013 	 * @return 輸出參數的值
1014 	 */
1015 	public Object executeQuery(String sql, Object[] params, int outParamPos,
1016 			int SqlType) {
1017 		Connection connection = null;
1018 		Statement statement = null;
1019 		Object object = null;
1020 		CallableStatement callableStatement = null;
1021 		try {
1022 			connection = JdbcBaseDaoImpl.getConnection();
1023 			// 調用存儲過程
1024 			callableStatement = connection.prepareCall(sql);
1025 			// 給參數賦值
1026 			if (params != null) {
1027 				for (int i = 0; i < params.length; i++) {
1028 					callableStatement.setObject(i + 1, params[i]);
1029 				}
1030 			}
1031 			// 註冊輸出參數
1032 			callableStatement.registerOutParameter(outParamPos, SqlType);
1033 			// 執行
1034 			callableStatement.execute();
1035 			// 獲得輸出參數
1036 			object = callableStatement.getObject(outParamPos);
1037 		} catch (SQLException e) {
1038 			System.out.println(e.getMessage());
1039 		} finally {
1040 			// 釋放資源
1041 			closeAll(connection, null, callableStatement, null);
1042 		}
1043 		return object;
1044 	}
1045 
1046     /**
1047      * 執行不返回結果集的存儲過程
1048      *
1049      * @param sql
1050      *            存儲過程名稱
1051      * @param params
1052      *            存儲過程參數
1053      * @throws ClassNotFoundException
1054      * @throws SQLException
1055      */
1056     public   void executeNonQuery(String sql, SqlParameter... params) {
1057         Connection con = null;
1058         CallableStatement cs = null;
1059         try {
1060             con = getConnection();
1061             cs = con.prepareCall(sql);
1062             setSqlParameter(cs, params);
1063             cs.executeUpdate();
1064             getSqlParameter(cs, params);
1065         } catch (Exception e) {
1066             e.printStackTrace();
1067         } finally {
1068         	close3(con, cs, null);
1069         }
1070     }
1071 
1072     /**
1073      * 執行Insert語句,返回Insert成功以後標識列的值
1074      *
1075      * @param sql
1076      * @return
1077      * @throws ClassNotFoundException
1078      * @throws SQLException
1079      */
1080     public   int executeIdentity(String sql) {
1081         int identity = -1;
1082         Connection con = null;
1083         Statement ps = null;
1084         ResultSet rs = null;
1085         try {
1086             con = getConnection();
1087             ps = con.createStatement();
1088             ps.executeUpdate(sql, Statement.RETURN_GENERATED_KEYS);
1089             rs = ps.getGeneratedKeys();
1090             if (rs.next()) {
1091                 // identity = rs.getInt("GENERATED_KEYS");
1092                 identity = rs.getInt(1);
1093             }
1094         } catch (Exception e) {
1095             e.printStackTrace();
1096         } finally {
1097             close3(con, ps, null);
1098         }
1099         return identity;
1100     }
1101     /**
1102      * 執行不返回結果集的存儲過程
1103      *
1104      * @param sql
1105      *            存儲過程名稱
1106      * @param params
1107      *            存儲過程參數
1108      * @throws ClassNotFoundException
1109      * @throws SQLException
1110      */
1111     public   void executeNonQuery1(String sql, SqlParameter... params) {
1112         Connection con = null;
1113         CallableStatement cs = null;
1114         try {
1115             con = getConnection();
1116             cs = con.prepareCall(sql);
1117             setSqlParameter(cs, params);
1118             cs.executeUpdate();
1119             getSqlParameter(cs, params);
1120         } catch (Exception e) {
1121             e.printStackTrace();
1122         } finally {
1123             close3(con, cs, null);
1124         }
1125     }
1126     /**
1127      * 執行返回聚合函數的操做
1128      *
1129      * @param sql
1130      *            含有聚合函數的SQL語句
1131      * @return 聚合函數的執行結果
1132      * @throws SQLException
1133      * @throws ClassNotFoundException
1134      */
1135     public   int executeScalar(String sql) {
1136         int result = -1;
1137         Connection con = null;
1138         PreparedStatement ps = null;
1139         ResultSet rs = null;
1140         try {
1141             con = getConnection();
1142             ps = con.prepareStatement(sql);
1143             rs = ps.executeQuery();
1144             if (rs.next()) {
1145                 result = rs.getInt(1);
1146             }
1147         } catch (Exception e) {
1148             e.printStackTrace();
1149         } finally {
1150             close3(con, ps, rs);
1151         }
1152         return result;
1153     }
1154     /**
1155      * 執行返回泛型集合的SQL語句
1156      *
1157      * @param cls
1158      *            泛型類型
1159      * @param sql
1160      *            查詢SQL語句
1161      * @return 泛型集合
1162      * @throws ClassNotFoundException
1163      * @throws SQLException
1164      * @throws InstantiationException
1165      * @throws IllegalAccessException
1166      */
1167     public   <T> List<T> executeList(Class<T> cls, String sql) {
1168         List<T> list = new ArrayList<T>();
1169         Connection con = null;
1170         PreparedStatement ps = null;
1171         ResultSet rs = null;
1172         try {
1173             con = getConnection();
1174             ps = con.prepareStatement(sql);
1175             rs = ps.executeQuery();
1176             while (rs.next()) {
1177                 T obj = executeResultSet(cls, rs);
1178                 list.add(obj);
1179             }
1180         } catch (Exception e) {
1181             e.printStackTrace();
1182         } finally {
1183             close3(con, ps, rs);
1184         }
1185         return list;
1186     }
1187     /**
1188      * 執行返回泛型集合的存儲過程
1189      *
1190      * @param cls
1191      *            泛型類型
1192      * @param sql
1193      *            存儲過程名稱
1194      * @param params
1195      *            存儲過程參數
1196      * @return 泛型集合
1197      * @throws ClassNotFoundException
1198      * @throws SQLException
1199      * @throws InstantiationException
1200      * @throws IllegalAccessException
1201      */
1202     public   <T> List<T> executeList(Class<T> cls, String sql,
1203             SqlParameter... params) {
1204         List<T> list = new ArrayList<T>();
1205         Connection con = null;
1206         CallableStatement cs = null;
1207         ResultSet rs = null;
1208         try {
1209             con = getConnection();
1210             cs = con.prepareCall(sql);
1211             setSqlParameter(cs, params);
1212             rs = cs.executeQuery();
1213             while (rs.next()) {
1214                 T obj = executeResultSet(cls, rs);
1215                 list.add(obj);
1216             }
1217         } catch (Exception e) {
1218             e.printStackTrace();
1219         } finally {
1220             close3(con, cs, rs);
1221         }
1222         return list;
1223     }
1224     /**
1225      * 執行返回泛型類型對象的SQL語句
1226      *
1227      * @param cls
1228      *            泛型類型
1229      * @param sql
1230      *            SQL語句
1231      * @return 泛型類型對象
1232      * @throws SQLException
1233      * @throws ClassNotFoundException
1234      * @throws InstantiationException
1235      * @throws IllegalAccessException
1236      */
1237     public   <T> T executeEntity(Class<T> cls, String sql) {
1238         T obj = null;
1239         Connection con = null;
1240         PreparedStatement ps = null;
1241         ResultSet rs = null;
1242         try {
1243             con = getConnection();
1244             ps = con.prepareStatement(sql);
1245             rs = ps.executeQuery();
1246             while (rs.next()) {
1247                 obj = executeResultSet(cls, rs);
1248                 break;
1249             }
1250         } catch (Exception e) {
1251             e.printStackTrace();
1252         } finally {
1253             close3(con, ps, rs);
1254         }
1255         return obj;
1256     }
1257     /**
1258      * 執行返回泛型類型對象的存儲過程
1259      *
1260      * @param cls
1261      *            泛型類型
1262      * @param sql
1263      *            SQL語句
1264      * @param params
1265      *            存儲過程參數
1266      * @return 泛型類型對象
1267      * @throws SQLException
1268      * @throws ClassNotFoundException
1269      * @throws InstantiationException
1270      * @throws IllegalAccessException
1271      */
1272     public   <T> T executeEntity(Class<T> cls, String sql,
1273             SqlParameter... params) {
1274         T obj = null;
1275         Connection con = null;
1276         CallableStatement cs = null;
1277         ResultSet rs = null;
1278         try {
1279             con = getConnection();
1280             cs = con.prepareCall(sql);
1281             setSqlParameter(cs, params);
1282             rs = cs.executeQuery();
1283             while (rs.next()) {
1284                 obj = executeResultSet(cls, rs);
1285                 break;
1286             }
1287         } catch (Exception e) {
1288             e.printStackTrace();
1289         } finally {
1290             close3(con, cs, rs);
1291         }
1292         return obj;
1293     }
1294 
1295     /**
1296      * 設置存儲過程參數名稱,參數值,參數方向
1297      *
1298      * @param cs
1299      * @param params
1300      * @throws SQLException
1301      */
1302     private   void setSqlParameter(CallableStatement cs,
1303             SqlParameter... params) throws SQLException {
1304         if (params != null) {
1305             for (SqlParameter param : params) {
1306                 if (param.OutPut) {
1307                     String paramName = param.Name;
1308                     if (paramName == null || paramName.equals("")) {
1309                         cs.registerOutParameter(1, param.Type);// 設置返回類型參數
1310                     } else {
1311                         cs.registerOutParameter(paramName, param.Type);// 設置輸出類型參數
1312                     }
1313                 } else {
1314                     cs.setObject(param.Name, param.Value);// 設置輸入類型參數
1315                 }
1316             }
1317         }
1318     }
1319     /**
1320      * 獲得存儲過程參數執行結果
1321      *
1322      * @param cs
1323      * @param params
1324      * @throws SQLException
1325      */
1326     private   void getSqlParameter(CallableStatement cs,
1327             SqlParameter... params) throws SQLException {
1328         for (SqlParameter param : params) {
1329             if (param.OutPut) {
1330                 String paramName = param.Name;
1331                 if (paramName == null || paramName.equals("")) {
1332                     param.Value = cs.getObject(1);// 返回類型參數值
1333                 } else {
1334                     param.Value = cs.getObject(paramName);// 輸出類型參數值
1335                 }
1336             }
1337         }
1338     }
1339 
1340 	/**
1341 	 *
1342 	 * @Title: executeUpdate  by statement
1343 	 * @Description: (更新結果集)  1344 	 * @param @param sql
1345 	 * @param @return
1346 	 * @param @throws SQLException    設定文件  1347 	 * @return int    返回類型  1348 	 * @throws  1349 	 */
1350 	@SuppressWarnings("null")
1351 	public int executeUpdate(String sql) {
1352 		Statement statement = null;
1353 		Connection connection = null;
1354 		int result = 0;
1355 		try {
1356 			connection = getStatement();
1357 			result = statement.executeUpdate(sql);
1358 			connection.commit();//JDBC 事務管理
1359 		} catch (Exception e) {
1360 			e.printStackTrace();
1361 			try {
1362 				connection.rollback();//JDBC 事務管理
1363 			} catch (SQLException e1) {
1364 				e1.printStackTrace();
1365 			}
1366 		} finally {
1367 			try {
1368 				statement.close();
1369 				connection.close();
1370 			} catch (SQLException e) {
1371 				e.printStackTrace();
1372 			}
1373 
1374 		}
1375 		return result;
1376 	}
1377 
1378 
1379 
1380 
1381 
1382 	//-----------------------資源關閉---------------------------------------------
1383 	/**
1384 	 * 關閉全部資源
1385 	 *
1386 	 * @param statement
1387 	 */
1388 	private void closeAll(Connection connection,
1389 			PreparedStatement preparedStatement,
1390 			CallableStatement callableStatement, ResultSet resultSet) {
1391 		// 關閉結果集對象
1392 		if (resultSet != null) {
1393 			try {
1394 				resultSet.close();
1395 			} catch (SQLException e) {
1396 				System.out.println(e.getMessage());
1397 			}
1398 		}
1399 
1400 		// 關閉PreparedStatement對象
1401 		if (preparedStatement != null) {
1402 			try {
1403 				preparedStatement.close();
1404 			} catch (SQLException e) {
1405 				System.out.println(e.getMessage());
1406 			}
1407 		}
1408 
1409 		// 關閉CallableStatement 對象
1410 		if (callableStatement != null) {
1411 			try {
1412 				callableStatement.close();
1413 			} catch (SQLException e) {
1414 				System.out.println(e.getMessage());
1415 			}
1416 		}
1417 
1418 		// 關閉Connection 對象
1419 		if (connection != null) {
1420 			try {
1421 				connection.close();
1422 			} catch (SQLException e) {
1423 				System.out.println(e.getMessage());
1424 			}
1425 		}
1426 	}
1427 
1428 	/**
1429 	 *
1430 	 * @Title: close  1431 	 * @Description: (關閉全部的鏈接)  1432 	 * @param @throws SQLException    設定文件  1433 	 * @return void    返回類型  1434 	 * @throws  1435 	 */
1436 	public void close(Connection connection, Statement statement,
1437 			ResultSet resultSet) {
1438 		try {
1439 			if (resultSet != null) {
1440 				resultSet.close();
1441 				resultSet = null;
1442 			}
1443 			if (statement != null) {
1444 				statement.close();
1445 				statement = null;
1446 			}
1447 			if (connection != null) {
1448 				connection.close();
1449 				connection = null;
1450 			}
1451 		} catch (Exception e) {
1452 			e.printStackTrace();
1453 		}
1454 	}
1455 	 /**
1456      * 關閉JDBC對象,釋放資源。
1457      *
1458      * @param con
1459      *            鏈接對象
1460      * @param ps
1461      *            命令對象
1462      * @param rs
1463      *            結果集對象
1464      * @throws SQLException
1465      */
1466     private static void close3(Connection con, Statement ps, ResultSet rs) {
1467         try {
1468             rs.close();
1469             if (rs != null) {
1470 
1471                 rs = null;
1472             }
1473             if (ps != null) {
1474                 ps.close();
1475                 ps = null;
1476             }
1477             if (con != null) {
1478                 con.close();
1479                 con = null;
1480             }
1481         } catch (SQLException e) {
1482             //  Auto-generated catch block
1483             e.printStackTrace();
1484         }
1485     }
1486 
1487 	  //--------------------main 方法----------------------------------------------
1488 		/**
1489 		 * 測試 鏈接是否成功
1490 		 *
1491 		 * @param args
1492 		 */
1493 		public static void main(String[] args) {
1494 			getConnection();
1495 		}
1496 
1497 
1498 }
1499 

JdbcDaoImpl.java

  1 package com.jacezhu.dao.impl;
  2 
  3 import java.util.ArrayList;
  4 import java.util.List;
  5 import java.util.Map;
  6 
  7 import com.jacezhu.dao.JdbcBaseDao;
  8 import com.jacezhu.dao.JdbcDao;
  9 import com.jacezhu.framework.connectUtil.jdbcUtl.ObjectMapper;
 10 import com.jacezhu.framework.connectUtil.jdbcUtl.PageModel;
 11 import com.jacezhu.model.demo.vo.Demo;
 12 import com.jacezhu.service.demo.impl.DemoMapper;
 13 
 14 import org.springframework.beans.factory.annotation.Autowired;
 15 import org.springframework.stereotype.Repository;
 16 @Repository
 17 public class JdbcDaoImpl extends Object implements JdbcDao{
 18 	@Autowired
 19     private   JdbcBaseDaoImpl jdbcBaseUtil =new JdbcBaseDaoImpl();
 20 
 21 	public JdbcBaseDaoImpl getJdbcBaseUtil() {
 22 		return jdbcBaseUtil;
 23 	}
 24 	public void setJdbcBaseUtil(JdbcBaseDaoImpl jdbcBaseUtil) {
 25 		this.jdbcBaseUtil = jdbcBaseUtil;
 26 	}
 27 	/**
 28 	 *
 29 	* @Title: insert   30 	* @Description: (插入單挑數據)   31 	* @param @param sql 查詢sql
 32 	* @param @param obj 參數數組
 33 	* @param @param isGenerateKey (true  false)
 34 	* @param @return    設定文件   35 	* @return boolean    返回類型   36 	* @throws   37 	 */
 38 	public boolean insert(String sql, Object[] obj){
 39 
 40 		return jdbcBaseUtil.update(sql, obj, false);
 41 	 }
 42 	/**
 43 	 *
 44 	* @author  劉軍
 45 	* @date 2016-3-19 下午2:23:42   46 	* @version V1.0    47 	* @Title: insertLines   48 	* @Description: (新增)   49 	* @param @param sql
 50 	* @param @param obj
 51 	* @param @return    設定文件   52 	* @return int    返回類型   53 	* @throws   54 	 */
 55 	public int insertLines(String sql, Object[] obj){
 56 
 57 		return jdbcBaseUtil.executeUpdate(sql, obj);
 58 	 }
 59 	/**
 60 	 *
 61 	* @author  劉軍
 62 	* @date 2016-3-19 下午2:05:19   63 	* @version V1.0    64 	* @Title: insert   65 	* @Description: (新增)   66 	* @param @param sql
 67 	* @param @param obj
 68 	* @param @return    設定文件   69 	* @return boolean    返回類型   70 	* @throws   71 	 */
 72 	public boolean insertByList(String sql, List<Object> obj){
 73 
 74 		return jdbcBaseUtil.updateByPreparedStatement(sql, obj);
 75 	 }
 76 
 77 	/**
 78 	 *
 79 	* @Title: delete   80 	* @Description: (刪除單挑數據)   81 	* @param @param sql 刪除sql
 82 	* @param @param obj 參數數組
 83 	* @param @param isGenerateKey (true  false)
 84 	* @param @return    設定文件   85 	* @return boolean    返回類型   86 	* @throws   87 	 */
 88 	public boolean delete(String sql, Object[] obj){
 89 
 90 		return jdbcBaseUtil.update(sql, obj, false);
 91 	 }
 92 	/**
 93 	 *
 94 	* @author  劉軍
 95 	* @date 2016-3-19 下午2:19:20   96 	* @version V1.0    97 	* @Title: delete   98 	* @Description: (刪除單挑數據)   99 	* @param @param sql
100 	* @param @param obj
101 	* @param @return    設定文件  102 	* @return boolean    返回類型  103 	* @throws  104 	 */
105 	public boolean delete(String sql,List<Object> obj){
106 
107 		return jdbcBaseUtil.updateByPreparedStatement(sql, obj);
108 	 }
109 
110 	 /**
111 	  *
112 	 * @Title: deleteALL  113 	 * @Description: (批量刪除數據)  114 	 * @param @param sql
115 	 * @param @param obj
116 	 * @param @return    設定文件  117 	 * @return boolean    返回類型  118 	 * @throws  119 	  */
120 	public boolean deleteALL(String sql, Object[] obj){
121 		StringBuffer sbStr = new StringBuffer();
122 		for (int i = 0; i < obj.length; i++) {
123 			sbStr.append("?,");
124 		}
125 		String sqls =sql+"("+ sbStr.substring(0, sbStr.length() - 1) + ")";
126 		return jdbcBaseUtil.update(sqls, obj, false);
127 	 }
128 	/**
129 	 *
130 	* @author  劉軍
131 	* @date 2016-3-19 下午2:20:56  132 	* @version V1.0   133 	* @Title: deleteALL  134 	* @Description: (刪除 批量刪除 )  135 	* @param @param sql
136 	* @param @param obj
137 	* @param @return    設定文件  138 	* @return boolean    返回類型  139 	* @throws  140 	 */
141 	public boolean deleteALL(String sql,List<Object> obj){
142 		StringBuffer sbStr = new StringBuffer();
143 		for (int i = 0; i < obj.size(); i++) {
144 			sbStr.append("?,");
145 		}
146 		String sqls =sql+"("+ sbStr.substring(0, sbStr.length() - 1) + ")";
147 		return jdbcBaseUtil.updateByPreparedStatement(sqls, obj);
148 	 }
149 	 /**
150 	  *
151 	 * @Title: update  152 	 * @Description: (更新單挑數據記錄)  153 	 * @param @param sql
154 	 * @param @param obj
155 	 * @param @return    設定文件  156 	 * @return boolean    返回類型  157 	 * @throws  158 	  */
159 	public boolean update(String sql, Object[] obj){
160 
161 		return jdbcBaseUtil.update(sql, obj, false);
162 	 }
163 	/**
164 	 *
165 	* @author  劉軍
166 	* @date 2016-3-19 下午2:21:45  167 	* @version V1.0   168 	* @Title: update  169 	* @Description: (修改 )  170 	* @param @param sql
171 	* @param @param obj
172 	* @param @return    設定文件  173 	* @return boolean    返回類型  174 	* @throws  175 	 */
176 	public boolean update(String sql, List<Object> obj){
177 
178 		return jdbcBaseUtil.updateByPreparedStatement(sql, obj);
179 	 }
180 	 /**
181 	  *
182 	 * @Title: queryFrist  183 	 * @Description: (查詢出第一條數據記錄)  184 	 * @param @param tale
185 	 * @param @param objParams
186 	 * @param @return    設定文件  187 	 * @return Object    返回類型  188 	 * @throws  189 	  */
190 	 public Object queryFrist(String tale,Object[] objParams,ObjectMapper mapper){
191 
192 		 String sql = "select * from "+tale+"";
193 			Object[] obj = objParams;
194 		   return (Object) query(sql, obj, mapper).get(0);
195 	 }
196 	 /**
197 	  *
198 	 * @author  劉軍
199 	 * @date 2016-3-19 上午9:41:06  200 	 * @version V1.0   201 	 * @Title: find  202 	 * @Description: (查詢一條記錄 )  203 	 * @param @param sql
204 	 * @param @param obj
205 	 * @param @param mapper
206 	 * @param @return    設定文件  207 	 * @return Object    返回類型  208 	 * @throws  209 	  */
210 	 public	 Object find(String sql, Object[] obj, ObjectMapper mapper){
211 		return jdbcBaseUtil. find( sql,  obj,  mapper) ;
212 
213 	 }
214 
215 	 /**
216 	  *
217 	 * @author  劉軍
218 	 * @date 2016-3-19 上午9:41:06  219 	 * @version V1.0   220 	 * @Title: find  221 	 * @Description: (查詢一條記錄 )  222 	 * @param @param sql
223 	 * @param @param obj
224 	 * @param @param mapper
225 	 * @param @return    設定文件  226 	 * @return Object    返回類型  227 	 * @throws  228 	  */
229 	 public Object find(String sql,List obj,ObjectMapper mapper){
230 
231 		 return jdbcBaseUtil. find( sql,  obj,  mapper) ;
232 	 }
233 	/**
234 	 *
235 	* @Title: query  236 	* @Description: ( 查詢全部的數據記錄;並以list 集合(或者:Object 對象)返回 )  237 	* @param @param sql
238 	* @param @param obj
239 	* @param @param mapper
240 	* @param @return    設定文件  241 	* @return List<? extends Object>    返回類型  242 	* @throws  243 	 */
244 	public List<? extends Object> query(String sql, Object[] obj,
245 			ObjectMapper mapper) {
246 
247 		 return jdbcBaseUtil.query(sql, obj, mapper);
248 	}
249 	/**
250 	 *
251 	* @author   liujun<1136808529@qq.coom>
252 	* @date 2016-5-12 下午1:55:08  253 	* @version V1.0   254 	* @Title: query  255 	* @Description: (
256 	 *查詢全部的數據記錄;並以list 集合(或者:Object 對象)返回
257 	 *)  258 	* @param @param sql
259 	* @param @param obj
260 	* @param @param mapper
261 	* @param @return    設定文件  262 	* @return List<? extends Object>    返回類型  263 	* @throws  264 	 */
265 	public List<? extends Object> query(String sql, List obj,
266 			ObjectMapper mapper) {
267 
268 		 return jdbcBaseUtil.query(sql, obj, mapper);
269 	}
270 	/**
271 	 *
272 	* @Title: CountNum  273 	* @Description: ( select count(*)from table 的總數據條數)
274 	* @param @param tableName (數據庫表名)
275 	* @param @return    設定文件  276 	* @return int    返回類型  277 	* @throws  278 	 */
279 	public int CountNum (String tableName){
280 		return jdbcBaseUtil.returnTableCount(tableName);
281 	}
282 
283 	/**
284 	 *
285 	* @author   liujun<1136808529@qq.coom>
286 	* @date 2016-5-12 下午11:19:59  287 	* @version V1.0   288 	* @Title: Count  289 	* @Description: (
290 	 * 返回 統計count 數據的數量
291 	 *)  292 	* @param @param sql
293 	* @param @return    設定文件  294 	* @return int    返回類型  295 	* @throws  296 	 */
297 	public long  Count(String sql){
298 		return jdbcBaseUtil.Count(sql);
299 	};
300 	/**
301 	 *
302 	* @Title: queryPageNumber  303 	* @Description: (分頁查詢)  304 	* @param @param pageNo 第幾頁
305 	* @param @param pageSize  一頁顯示多少條數據
306 	* @param @param table  查詢哪一個表
307 	* 全表無條件查詢
308 	*  {select * from ( tablea a,tableb b where a.id=b.id)limt numStrat,numStop}
309 	* 全表 帶條件模糊查詢:
310 	*SELECT * FROM  demo a ,demo b WHERE a.id=b.id AND  a.id LIKE "1%" LIMIT 0,15;
311 	* @param @return    設定文件  312 	* @return PageModel    返回類型  313 	* @throws  314 	 */
315 	public PageModel queryPageNumber(int pageNo, int pageSize,String table) {
316 		//oracle  分頁
317 		//String sql="select * from (select j.*,rownum rn from (select * from "+table+") j where rownum<=?) where rn>?";
318 		//mysql  分頁
319 		String sql="SELECT * FROM "+table+" LIMIT ?,?;";
320 		return  queryPageNumber( pageNo, pageSize, table, sql);
321 
322 	}
323 
324 
325 	@SuppressWarnings({ "rawtypes", "unchecked" })
326 	public PageModel queryPageNumber(int pageNo, int pageSize,String table,String sql) {
327 		int countTotal=CountNum(table);
328 		Object[] obj = {(pageNo - 1) * pageSize,  pageNo * pageSize};
329 		List<Demo> list = (List<Demo>) query(sql, obj,new DemoMapper());
330 		PageModel pagemodel = new PageModel();
331 		pagemodel.setPageNo(pageNo);
332 		pagemodel.setPageSize(pageSize);
333 		pagemodel.setList(list);
334 		pagemodel.setTotalRecords(countTotal);
335 		if(pageSize!=0){
336 		 pagemodel.setCountPageNo(countTotal/pageSize);
337 		}
338 		return pagemodel;
339 
340 	}
341 	/**
342 	 *
343 	 * @Title: findSimpleResult  獲取最後一條(單條)記錄
344 	 * @Description: (查詢單條記錄)  345 	 * @param @param sql
346 	 * @param @param params
347 	 * @param @return    設定文件  348 	 * @return Map<String,Object>    返回類型  349 	 * @throws  350 	 */
351 	public Map<String, Object> findSimpleResult(String sql, List<Object> params){
352 
353 		return jdbcBaseUtil.findSimpleResult(sql, params);
354 	}
355 	/**
356 	 *
357 	* @author  劉軍
358 	* @date 2016-3-19 上午12:30:02  359 	* @version V1.0   360 	* @Title: findModeResult  查詢多條記錄
361 	* @Description: (查詢多條記錄)  362 	* @param @param sql
363 	* @param @param params
364 	* @param @return    設定文件  365 	* @return List<Map<String,Object>>    返回類型  366 	* @throws  367 	 */
368 	public List<Map<String, Object>> findModeResult(String sql,	List<Object> params){
369 		return jdbcBaseUtil.findModeResult(sql,params);
370 	}
371 	/**
372 	 *
373 	* @author  劉軍
374 	* @date 2016-3-19 上午8:43:07  375 	* @version V1.0   376 	* @Title: executeQuerySingle  377 	* @Description: (SQL 查詢將查詢結果:一行一列)  378 	* @param @param sql
379 	* @param @param params
380 	* @param @return    設定文件  381 	* @return Object    返回類型  382 	* @throws  383 	 */
384 	public Object executeQuerySingle(String sql, Object[] params){
385 		return jdbcBaseUtil.executeQuerySingle(sql, params);
386 	}
387 
388 	/**
389 	 *
390 	* @author  劉軍
391 	* @date 2016-3-19 上午9:08:05  392 	* @version V1.0   393 	* @Title: findSimpleRefResult  394 	* @Description: (經過反射機制查詢單條記錄)  395 	* @param @param sql
396 	* @param @param params
397 	* @param @param cls
398 	* @param @return    設定文件  399 	* @return T    返回類型  400 	* @throws  401 	 */
402 	public <T> T findSimpleRefResult(String sql, List<Object> params,Class<T> cls) {
403 
404 		//return  JdbcBaseUtil.findSimpleRefResult(sql,  params, cls);
405 		return null;
406 	}
407 	/**
408 	 *
409 	* @author  劉軍
410 	* @date 2016-3-19 上午9:13:39  411 	* @version V1.0   412 	* @Title: findMoreRefResult  413 	* @Description: ( 經過反射機制查詢多條記錄)  414 	* @param @param sql
415 	* @param @param params
416 	* @param @param cls
417 	* @param @return    設定文件  418 	* @return List<T>    返回類型  419 	* @throws  420 	 */
421 	public <T> List<T> findMoreRefResult(String sql, List<Object> params,
422 			Class<T> cls) {
423 		return jdbcBaseUtil.findMoreRefResult(sql, params, cls);
424 	}
425 	/**
426 	 *
427 	* @author  劉軍
428 	* @date 2016-3-19 上午11:03:06  429 	* @version V1.0   430 	* @Title: excuteQuery  431 	* @Description: (獲取結果集,並將結果放在List中)  432 	* @param @param sql
433 	* @param @param params
434 	* @param @return    設定文件  435 	* @return List<Object>    返回類型  436 	* @throws  437 	 */
438 	public List<Object> excuteQuery(String sql, Object[] params){
439 		return jdbcBaseUtil.excuteQuery( sql,  params);
440 	}
441 	/**
442 	 *
443 	* @author  劉軍
444 	* @date 2016-3-19 上午11:03:03  445 	* @version V1.0   446 	* @Title: executeQuery  447 	* @Description: (統一的select語句,爲了可以訪問結果集,將結果集放入ArrayList,)  448 	* @param @param sql
449 	* @param @param parameters
450 	* @param @return    設定文件  451 	* @return ArrayList    返回類型  452 	* @throws  453 	 */
454 	public ArrayList executeQuery(String sql, String[] parameters){
455 		return jdbcBaseUtil.executeQuery( sql,  parameters);
456 	}
457 
458 	/**
459 	 *
460 	* @author   liujun<1136808529@qq.coom>
461 	* @date 2016-5-17 上午11:33:28  462 	* @version V1.0   463 	* @Title: getSeq  464 	* @Description:  (
465 	 *  獲取sequence 序列號
466 	 *)  467 	* @param @param sequenceName
468 	* @param @return    設定文件  469 	* @return int    返回類型  470 	* @throws  471 	 */
472 	public int getSeq(String sequenceName){
473 		return jdbcBaseUtil.getSeq(sequenceName);
474 	}
475 }
476 

六:實例參考

控制層頂層:BaseController.java

  1 package com.jacezhu.controller.base;
  2 
  3 import java.text.SimpleDateFormat;
  4 import java.util.Date;
  5 
  6 import com.jacezhu.framework.utils.StringEscapeEditor;
  7 
  8 import org.springframework.beans.propertyeditors.CustomDateEditor;
  9 import org.springframework.stereotype.Controller;
 10 import org.springframework.web.bind.ServletRequestDataBinder;
 11 import org.springframework.web.bind.annotation.InitBinder;
 12 import org.springframework.web.bind.annotation.PathVariable;
 13 import org.springframework.web.bind.annotation.RequestMapping;
 14 
 15 @Controller
 16 @RequestMapping("/base")
 17 public class BaseController {
 18 
 19 	protected int page = 1;// 當前頁
 20 	protected int rows = 10;// 每頁顯示記錄數
 21 	protected String sort;// 排序字段
 22 	protected String order = "asc";// asc/desc
 23 
 24 	protected String ids;// 主鍵集合,逗號分割
 25 
 26 	@InitBinder
 27 	public void initBinder(ServletRequestDataBinder binder) {
 28 		/**
 29 		 * 自動轉換日期類型的字段格式
 30 		 */
 31 		binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"), true));
 32 
 33 		/**
 34 		 * 防止XSS***
 35 		 */
 36 		binder.registerCustomEditor(String.class, new StringEscapeEditor(true, false));
 37 	}
 38 
 39 	/**
 40 	 * 用戶跳轉JSP頁面
 41 	 *
 42 	 * 此方法不考慮權限控制
 43 	 * produces = "text/html;charset=UTF-8"
 44 	 * @param folder
 45 	 *            路徑
 46 	 * @param jspName
 47 	 *            JSP名稱(不加後綴)
 48 	 * @return 指定JSP頁面
 49 	 */
 50 	@RequestMapping("/{folder}/{jspName}")
 51 	public String redirectJsp(@PathVariable String folder, @PathVariable String jspName) {
 52 		return "/" + folder + "/" + jspName;
 53 	}
 54 
 55 }
 56 

控制層實現層:StudentinfoController.java

  1 package com.jacezhu.controller.businessCore.CustomerManagement;
  2 
  3 import javax.servlet.http.HttpServletRequest;
  4 
  5 import org.springframework.beans.BeanUtils;
  6 import org.springframework.beans.factory.annotation.Autowired;
  7 import org.springframework.stereotype.Controller;
  8 import org.springframework.web.bind.annotation.RequestMapping;
  9 import org.springframework.web.bind.annotation.ResponseBody;
 10 
 11 import com.jacezhu.controller.base.BaseController;
 12 import com.jacezhu.framework.utils.BeanUtil.dateUtils.DateUtils;
 13 import com.jacezhu.model.base.pageModel.Grid;
 14 import com.jacezhu.model.base.pageModel.Json;
 15 import com.jacezhu.model.base.pageModel.PageFilter;
 16 import com.jacezhu.model.businessCore.CustomerManagement.TStudentinfo;
 17 import com.jacezhu.model.businessCore.CustomerManagement.vo.StudentInfo;
 18 import com.jacezhu.service.businessCore.CustomerManagement.StudentinfoServiceI;
 19 /**
 20  *
 21 * @Title: StudentinfoController.java   22 * @Package com.jacezhu.controller.businessCore.CustomerManagement   23 * @Description: ( 客戶管理:學生信息管理)   24 * @author  劉軍
 25 * @date 2016-3-20 下午3:59:30   26 * @version V1.0    27  */
 28 @Controller
 29 @RequestMapping("/studentinfo")
 30 public class StudentinfoController extends BaseController{
 31 	@Autowired
 32 	private StudentinfoServiceI studentinfoServiceI;
 33 
 34 	@RequestMapping("/manager")
 35 	public String manager() {
 36 		return "/businessCore/customer/student";
 37 	}
 38     /**
 39      *
 40     * @author  劉軍
 41     * @date 2016-3-20 下午10:56:25   42     * @version V1.0    43     * @Title: dataGrid   44     * @Description: (獲取列表數據: )   45     * @param @param studentInfo
 46     * @param @param ph
 47     * @param @return    設定文件   48     * @return Grid    返回類型   49     * @throws   50      */
 51 	@RequestMapping("/dataGrid")
 52 	@ResponseBody
 53 	public Grid dataGrid(StudentInfo studentInfo, PageFilter ph) {
 54 		Grid grid = new Grid();
 55 		grid.setRows(studentinfoServiceI.dataGrid(studentInfo, ph));
 56 		grid.setTotal(studentinfoServiceI.count(studentInfo, ph));
 57 		return grid;
 58 	}
 59 	//------------start----學生簽到管理:查詢學生信息-------------------------------
 60 	 /**
 61 	  *
 62 	 * @author   liujun<1136808529@qq.coom>
 63 	 * @date 2016-5-11 下午5:27:42   64 	 * @version V1.0    65 	 * @Title: dataGridToReport   66 	 * @Description: (
 67 	  * 查詢未簽到的學生信息
 68 	  *)   69 	 * @param @param studentInfo
 70 	 * @param @param ph
 71 	 * @param @return    設定文件   72 	 * @return Grid    返回類型   73 	 * @throws   74 	  */
 75 	@RequestMapping("/dataGridToReport")
 76 	@ResponseBody
 77 	public Grid dataGridToReport(StudentInfo studentInfo, PageFilter ph) {
 78 		Grid grid = new Grid();
 79 		grid.setRows(studentinfoServiceI.dataGridToReport(studentInfo, ph));
 80 		grid.setTotal(studentinfoServiceI.countToReport(studentInfo, ph));
 81 		return grid;
 82 	}
 83 	/**
 84 	 *
 85 	* @author   liujun<1136808529@qq.coom>
 86 	* @date 2016-5-11 下午5:29:16   87 	* @version V1.0    88 	* @Title: dataGridIsReported   89 	* @Description: (
 90 	 * 已經簽到的學生信息
 91 	 *)   92 	* @param @param studentInfo
 93 	* @param @param ph
 94 	* @param @return    設定文件   95 	* @return Grid    返回類型   96 	* @throws   97 	 */
 98 	@RequestMapping("/dataGridIsReported")
 99 	@ResponseBody
100 	public Grid dataGridIsReported(StudentInfo studentInfo, PageFilter ph) {
101 		Grid grid = new Grid();
102 		grid.setRows(studentinfoServiceI.dataGridIsReported(studentInfo, ph));
103 		grid.setTotal(studentinfoServiceI.countIsReported(studentInfo, ph));
104 		return grid;
105 	}
106 	//---------end-------學生簽到管理:查詢學生信息-------------------------------
107     /**
108      *
109     * @author  劉軍
110     * @date 2016-3-20 下午11:01:23  111     * @version V1.0   112     * @Title: addPage  113     * @Description: (顯示:添加頁面)  114     * @param @return    設定文件  115     * @return String    返回類型  116     * @throws  117      */
118 	@RequestMapping("/addPage")
119 	public String addPage() {
120 		return "/businessCore/customer/studentInfoAdd";
121 	}
122 	@RequestMapping("/addStuInfo")
123 	@ResponseBody
124 	public Json add(StudentInfo studentInfo) {
125 		Json j = new Json();
126 		try {
127 			studentinfoServiceI.add(studentInfo);
128 			j.setSuccess(true);
129 			j.setMsg("添加成功!");
130 		} catch (Exception e) {
131 			j.setMsg(e.getMessage());
132 		}
133 		return j;
134 	}
135 
136 	@RequestMapping("/delete")
137 	@ResponseBody
138 	public Json delete(Long id) {
139 		Json j = new Json();
140 		try {
141 			studentinfoServiceI.delete(id);
142 			j.setMsg("刪除成功!");
143 			j.setSuccess(true);
144 		} catch (Exception e) {
145 			j.setMsg(e.getMessage());
146 		}
147 		return j;
148 	}
149 
150 	@RequestMapping("/get")
151 	@ResponseBody
152 	public TStudentinfo get(Long id) {
153 		return studentinfoServiceI.get(id);
154 	}
155 	@RequestMapping("/editPage")
156 	public String editPage(HttpServletRequest request, Long id) {
157 		TStudentinfo studentInfo = studentinfoServiceI.get(id);
158 		request.setAttribute("studentInfo", studentInfo);
159 		return "/businessCore/customer/studentInfoEdit";
160 	}
161 
162 	@RequestMapping("/edit")
163 	@ResponseBody
164 	public Json edit(StudentInfo studentInfo ) {
165 		Json j = new Json();
166 		try {
167 		    TStudentinfo studentinfos=new TStudentinfo();
168 			BeanUtils.copyProperties(studentInfo, studentinfos);
169 			studentinfos.setStuapplyTime(DateUtils.formatDate(studentInfo.getStuapplyTime(),DateUtils.FORMAT_SHORT));
170 
171 			studentinfoServiceI.edit(studentinfos);
172 			j.setSuccess(true);
173 			j.setMsg("編輯成功!");
174 		} catch (Exception e) {
175 			j.setMsg(e.getMessage());
176 		}
177 		return j;
178 	}
179 	@RequestMapping("/viewPage")
180 	public String viewPage(HttpServletRequest request, Long id) {
181 		TStudentinfo studentInfo = studentinfoServiceI.get(id);
182 		request.setAttribute("studentInfo", studentInfo);
183 		return "/businessCore/customer/studentInfoView";
184 	}
185 
186 }
187 

 

 

 

服務層 StudentinfoServiceI.java

  1 package com.jacezhu.service.businessCore.CustomerManagement;
  2 
  3 import java.util.List;
  4 
  5 import com.jacezhu.model.base.pageModel.PageFilter;
  6 import com.jacezhu.model.businessCore.CustomerManagement.TStudentinfo;
  7 import com.jacezhu.model.businessCore.CustomerManagement.vo.StudentInfo;
  8 import com.jacezhu.model.businessCore.CustomerManagement.vo.VStudentinfo;
  9 
 10 public interface StudentinfoServiceI {
 11 
 12 	public List<TStudentinfo> dataGrid(StudentInfo studentInfo, PageFilter ph);
 13 	public Long count(StudentInfo studentInfo, PageFilter ph);
 14 	//---------學生簽到管理 查詢學生信息------------
 15 	 /**  查詢 未簽到的學生信息
 16 	  */
 17 	public List<VStudentinfo> dataGridToReport(StudentInfo studentInfo, PageFilter ph);
 18 	public Long countToReport(StudentInfo studentInfo, PageFilter ph);
 19 
 20 	 /**查詢已經簽到的學生信息
 21 	  */
 22 	public List<TStudentinfo> dataGridIsReported(StudentInfo studentInfo, PageFilter ph);
 23 	public Long countIsReported(StudentInfo studentInfo, PageFilter ph);
 24 	//----------------------
 25 	public void add(StudentInfo studentInfo);
 26 	public void delete(Long id);
 27 	public TStudentinfo get(Long id);
 28 	public void edit(TStudentinfo studentInfo);
 29 
 30 
 31 }
 32 

 

 

 

 

 

服務實現層:StudentinfoServiceImpl.java

  1 package com.jacezhu.service.businessCore.CustomerManagement.impl;
  2 
  3 import java.util.ArrayList;
  4 import java.util.Date;
  5 import java.util.HashMap;
  6 import java.util.List;
  7 import java.util.Map;
  8 
  9 import javax.servlet.http.HttpServletRequest;
 10 import javax.servlet.http.Httpssion;
 11 
 12 import com.jacezhu.dao.BaseDaoI;
 13 import com.jacezhu.dao.impl.JdbcDaoImpl;
 14 import com.jacezhu.framework.constant.GlobalConstant;
 15 import com.jacezhu.model.base.pageModel.PageFilter;
 16 import com.jacezhu.model.base.pageModel.SessionInfo;
 17 import com.jacezhu.model.businessCore.CustomerManagement.THisStudentinfo;
 18 import com.jacezhu.model.businessCore.CustomerManagement.TStudentinfo;
 19 import com.jacezhu.model.businessCore.CustomerManagement.mapper.TStudentInfoMapper;
 20 import com.jacezhu.model.businessCore.CustomerManagement.mapper.VStudentinfoMapper;
 21 import com.jacezhu.model.businessCore.CustomerManagement.vo.StudentInfo;
 22 import com.jacezhu.model.businessCore.CustomerManagement.vo.VStudentinfo;
 23 import com.jacezhu.service.businessCore.CustomerManagement.StudentinfoServiceI;
 24 
 25 import org.springframework.beans.BeanUtils;
 26 import org.springframework.beans.factory.annotation.Autowired;
 27 import org.springframework.stereotype.Service;
 28 @Service
 29 public class StudentinfoServiceImpl implements StudentinfoServiceI{
 30 	@Autowired
 31 	private BaseDaoI<TStudentinfo> tstudentInfoDao ;
 32 	@Autowired
 33 	private BaseDaoI<StudentInfo> studentInfoDao ;
 34 
 35 	@Autowired
 36 	private BaseDaoI<THisStudentinfo> hisStudentInfoDao ;
 37 	//----使用spring專屬的方式獲取session 
 38     @Autowired
 39     private HttpSession session;
 40     @Autowired
 41     private HttpServletRequest request;
 42     //引入 jsbc 
 43 	private JdbcDaoImpl  daoImpl=new JdbcDaoImpl() ;
 44 
 45 	public JdbcDaoImpl getDaoImpl() {
 46 		return daoImpl;
 47 	}
 48 
 49 	public void setDaoImpl(JdbcDaoImpl daoImpl) {
 50 		this.daoImpl = daoImpl;
 51 	}
 52      /**
 53       * datagrid 列表數據查詢
 54       */
 55 	@Override
 56 	public List<TStudentinfo> dataGrid(StudentInfo studentInfo, PageFilter ph) {
 57 		List<TStudentinfo> ul = new ArrayList<TStudentinfo>();
 58 		Map<String, Object> params = new HashMap<String, Object>();
 59 		String hql = " from TStudentinfo t  ";
 60 		List<TStudentinfo> l = tstudentInfoDao.find(hql + whereHql(studentInfo, params) + orderHql(ph), params, ph.getPage(), ph.getRows());
 61 		for (TStudentinfo t : l) {
 62 			TStudentinfo u = new TStudentinfo();
 63 			BeanUtils.copyProperties(t, u);
 64 			ul.add(u);
 65 		}
 66 		return ul;
 67 	}
 68 
 69 	@Override
 70 	public Long count(StudentInfo studentInfo, PageFilter ph) {
 71 		Map<String, Object> params = new HashMap<String, Object>();
 72 		String hql = " from TStudentinfo t ";
 73 		return tstudentInfoDao.count("select count(*) " + hql + whereHql(studentInfo, params), params);
 74 	}
 75 
 76 	/**
 77 	 *
 78 	* @author  劉軍
 79 	* @date 2016-4-16 下午11:17:07   80 	* @version V1.0    81 	* @Title: whereHql   82 	* @Description: ( datagrid  拼接查詢語句  )   83 	* @param @param studentInfo
 84 	* @param @param params
 85 	* @param @return    設定文件   86 	* @return String    返回類型   87 	* @throws   88 	 */
 89 	private String whereHql(StudentInfo studentInfo, Map<String, Object> params) {
 90 		String hql = "";
 91 		if (studentInfo != null) {
 92 			hql += " where 1=1 and stustatus=1  ";
 93 			if (studentInfo.getStuname() != null && !studentInfo.getStuname().equals("") ) {
 94 				hql += " and t.stuname like :stuname";
 95 				params.put("stuname", "%%" + studentInfo.getStuname() + "%%");
 96 			}
 97 			if (studentInfo.getStuenglishName() != null && !studentInfo.getStuenglishName().equals("") ) {
 98 				hql += " and t.stuenglishName like :stuenglishName";
 99 				params.put("stuenglishName", "%%" + studentInfo.getStuenglishName() + "%%");
100 			}
101 			if (studentInfo.getStuapplyTimeStart() != null) {
102 				hql += " and t.stuapplyTime >= :stuapplyTimeStart";
103 				params.put("stuapplyTimeStart", studentInfo.getStuapplyTimeStart());
104 			}
105 			if (studentInfo.getStuapplyTimeEnd() != null) {
106 				hql += " and t.stuapplyTime <= :stuapplyTimeEnd";
107 				params.put("stuapplyTimeEnd", studentInfo.getStuapplyTimeEnd());
108 			}
109 		}
110 		return hql;
111 	}
112 	/**
113 	 *
114 	* @author  劉軍
115 	* @date 2016-4-16 下午11:18:25  116 	* @version V1.0   117 	* @Title: orderHql  118 	* @Description: (datagrid  拼接 排序)  119 	* @param @param ph
120 	* @param @return    設定文件  121 	* @return String    返回類型  122 	* @throws  123 	 */
124 	private String orderHql(PageFilter ph) {
125 		String orderString = "";
126 		if ((ph.getSort() != null) && (ph.getOrder() != null)) {
127 			orderString = " order by t." + ph.getSort() + "" + ph.getOrder();
128 		}
129 		return orderString;
130 	}
131 	//----------------------學生簽到管理:查詢未簽到學生信息-ToReport------------------------------
132 	@Override
133 	public List<VStudentinfo> dataGridToReport(StudentInfo studentInfo, PageFilter ph) {
134 	    List<VStudentinfo> listJdbc=getSql(studentInfo,ph);
135 		return listJdbc;
136 	}
137 
138 	@Override
139 	public Long countToReport(StudentInfo studentInfo, PageFilter ph) {
140 		List<Object> obj=new ArrayList<Object>();
141 		String sql = " select count(*) as counts from t_studentinfo ts where 1=1  ";
142 		//----------拼寫:查詢條件
143 		if (studentInfo.getStuname() != null && !studentInfo.getStuname().equals("") ) {
144 			sql += " and ts.stuname like '%"+ studentInfo.getStuname()+"%'";
145 		}
146 		if (studentInfo.getStuenglishName() != null && !studentInfo.getStuenglishName().equals("") ) {
147 			sql += " and ts.stuenglishName like '%" +studentInfo.getStuenglishName()+"%'";
148 		}
149 		if (studentInfo.getStuapplyTimeStart() != null) {
150 			sql += " and ts.stuapplyTime >= '"+studentInfo.getStuapplyTimeStart()+"'";
151 		}
152 		if (studentInfo.getStuapplyTimeEnd() != null) {
153 			sql += " and ts.stuapplyTime <= '"+studentInfo.getStuapplyTimeEnd()+"'";
154 		}
155 		return daoImpl.Count(sql);
156 	}
157 
158 	//------jdbc  查詢
159 
160 	@SuppressWarnings("unchecked")
161 	private List<VStudentinfo> getSql(StudentInfo studentInfo, PageFilter ph){
162 		List<VStudentinfo> list=new ArrayList<VStudentinfo>();
163 		String sql= "   SELECT ts.stuid AS stuid ,"
164 			         +" ts.stuname AS stuname  ,"
165 			         +" ts.stuenglishName AS stuenglishName,"
166 			         +" ts.stusex AS stusex ,"
167 			         +" ds.value AS sexname,"
168 			         +" ts.stubrithday AS stubrithday,"
169 			         +" ts.stuschool AS stuschool ,"
170 			         +" ts.stugrade AS stugrade,"
171 			         +" ts.studepartment AS studepartment,"
172 			         +" dp.value AS studepartmentname ,"
173 			         +" ts.stuRegistration AS stuRegistration,"
174 			         +" tr.value AS registrationname,"
175 			         +" ts.stupickUp AS stupickUp,"
176 			         +" dpk.value AS pickUpName,"
177 			         +" ts.stuattention AS stuattention,"
178 			         +" ts.stuhobby AS stuhobby ,"
179 			         +" ts.stuavoidFood AS stuavoidFood,"
180 			         +" ts.stuallergySmptoms AS stuallergySmptoms,"
181 			         +" ts.stuacuteillness AS stuacuteillness,"
182 			         +" ts.stuotherInfo AS stuotherInfo,"
183 			         +" ts.prId AS prId,"
184 			         +" tp.prName AS prName,"
185 			         +" ts.stustatus AS stustatus,"
186 			         +" dst.value AS stustatusName ,"
187 			         +" ts.stuapplyTime AS stuapplyTime,"
188 			         +" ts.userid AS userid ,su.name AS userName,"
189 			         +" ts.druguse AS druguse "
190 			         +" FROM   t_studentinfo  ts ,   t_dic_sex ds ,  t_dic_partment dp,  t_dic_pickup dpk,"
191 			         +" t_dic_status dst,   t_dic_registration tr , sys_user su, t_parentsinfo tp "
192 			         +" WHERE ts.stusex =ds.id  AND  ts.studepartment=dp.id  AND  ts.stuRegistration=tr.id "
193 			         +" AND  ts.stupickUp=dpk.id  AND  ts.stustatus=dst.id  AND  ts.userid = su.id AND  ts.prId=tp.prId   "
194 			         +" AND  ts.stuid NOT IN (SELECT tre.stuid  FROM t_reportsorexit tre WHERE  tre.reportstime BETWEEN  TIMESTAMP(DATE(SYSDATE())) AND  TIMESTAMP(ADDDATE(DATE(SYSDATE()),1)) )  ";
195 		//------拼接查詢條件
196 		List<Object> obj=new ArrayList<Object>();
197 		//----------拼寫:查詢條件
198 		if (studentInfo.getStuname() != null && !studentInfo.getStuname().equals("") ) {
199 			sql += " and ts.stuname like ? ";
200 			obj.add( "%" + studentInfo.getStuname() + "%");
201 		}
202 		if (studentInfo.getStuenglishName() != null && !studentInfo.getStuenglishName().equals("") ) {
203 			sql += " and ts.stuenglishName like ? ";
204 			obj.add(  "%" + studentInfo.getStuenglishName() + "%");
205 		}
206 		if (studentInfo.getStuapplyTimeStart() != null) {
207 			sql += " and ts.stuapplyTime >= ? ";
208 			obj.add(  studentInfo.getStuapplyTimeStart());
209 		}
210 		if (studentInfo.getStuapplyTimeEnd() != null) {
211 			sql += " and ts.stuapplyTime <= ?  ";
212 			obj.add(  studentInfo.getStuapplyTimeEnd());
213 		}
214 		//----------  order by
215 		if(ph.getSort()!= null && ph.getOrder()!=null){
216 			sql +=  "   order by ts." + ph.getSort() + "" + ph.getOrder();
217 		}
218 		//----------- limit 分頁        
219 		sql += "   LIMIT "+((ph.getPage() - 1) * ph.getRows())+","+ ph.getPage() * ph.getRows() ;
220 
221 		list=(List<VStudentinfo>)daoImpl.query(sql , obj, new VStudentinfoMapper());
222 		return list;
223 	}
224 
225 
226 
227 	/**
228 	 *
229 	* @author  劉軍
230 	* @date 2016-4-16 下午11:17:07  231 	* @version V1.0   232 	* @Title: whereHql  233 	* @Description: ( datagrid  拼接查詢語句  )  234 	* @param @param studentInfo
235 	* @param @param params
236 	* @param @return    設定文件  237 	* @return String    返回類型  238 	* @throws  239 	 */
240 	private String whereHqlToReport(StudentInfo studentInfo, Map<String, Object> params) {
241 		String hql = "";
242 		if (studentInfo != null) {
243 			hql += " where 1=1 and t.stustatus=1  and t.stuid not in"
244 	     	+  " (select tr.stuid  from TReportsorexit tr  "
245 			+  "   WHERE  tr.reportstime BETWEEN  TIMESTAMP(DATE(SYSDATE())) AND  TIMESTAMP(ADDDATE(DATE(SYSDATE()),1)) )  ";
246 			if (studentInfo.getStuname() != null && !studentInfo.getStuname().equals("") ) {
247 				hql += " and t.stuname like :stuname";
248 				params.put("stuname", "%%" + studentInfo.getStuname() + "%%");
249 			}
250 			if (studentInfo.getStuenglishName() != null && !studentInfo.getStuenglishName().equals("") ) {
251 				hql += " and t.stuenglishName like :stuenglishName";
252 				params.put("stuenglishName", "%%" + studentInfo.getStuenglishName() + "%%");
253 			}
254 			if (studentInfo.getStuapplyTimeStart() != null) {
255 				hql += " and t.stuapplyTime >= :stuapplyTimeStart";
256 				params.put("stuapplyTimeStart", studentInfo.getStuapplyTimeStart());
257 			}
258 			if (studentInfo.getStuapplyTimeEnd() != null) {
259 				hql += " and t.stuapplyTime <= :stuapplyTimeEnd";
260 				params.put("stuapplyTimeEnd", studentInfo.getStuapplyTimeEnd());
261 			}
262 		}
263 		return hql;
264 	}
265 
266 
267 
268 
269 
270 
271 
272 	//-------------查詢:已經簽到的學生信息-----------------------------
273 
274 	@Override
275 	public List<TStudentinfo> dataGridIsReported(StudentInfo studentInfo, PageFilter ph) {
276 		Map<String, Object> params = new HashMap<String, Object>();
277 		String hql = " from TStudentinfo t  ";
278 		List<TStudentinfo> l = tstudentInfoDao.find(hql + whereHqlIsReported(studentInfo, params) + orderHqlIsReported(ph), params, ph.getPage(), ph.getRows());
279 
280 		return l;
281 	}
282 
283 
284 
285 	@Override
286 	public Long countIsReported(StudentInfo studentInfo, PageFilter ph) {
287 		Map<String, Object> params = new HashMap<String, Object>();
288 		String hql = " from TStudentinfo t ";
289 		return tstudentInfoDao.count("select count(*) " + hql + whereHqlToReport(studentInfo, params), params);
290 	}
291 
292 	/**
293 	 *
294 	* @author  劉軍
295 	* @date 2016-4-16 下午11:17:07  296 	* @version V1.0   297 	* @Title: whereHql  298 	* @Description: ( datagrid  拼接查詢語句  )  299 	* @param @param studentInfo
300 	* @param @param params
301 	* @param @return    設定文件  302 	* @return String    返回類型  303 	* @throws  304 	 */
305 	private String whereHqlIsReported(StudentInfo studentInfo, Map<String, Object> params) {
306 		String hql = "";
307 		if (studentInfo != null) {
308 			hql += " where 1=1 and t.stustatus=1  and t.stuid  in"
309 	     	+  " (select tr.stuid  from TReportsorexit tr  "
310 			+  "   WHERE  tr.reportstime BETWEEN  TIMESTAMP(DATE(SYSDATE())) AND  TIMESTAMP(ADDDATE(DATE(SYSDATE()),1)) )  ";
311 			if (studentInfo.getStuname() != null && !studentInfo.getStuname().equals("") ) {
312 				hql += " and t.stuname like :stuname";
313 				params.put("stuname", "%%" + studentInfo.getStuname() + "%%");
314 			}
315 			if (studentInfo.getStuenglishName() != null && !studentInfo.getStuenglishName().equals("") ) {
316 				hql += " and t.stuenglishName like :stuenglishName";
317 				params.put("stuenglishName", "%%" + studentInfo.getStuenglishName() + "%%");
318 			}
319 			if (studentInfo.getStuapplyTimeStart() != null) {
320 				hql += " and t.stuapplyTime >= :stuapplyTimeStart";
321 				params.put("stuapplyTimeStart", studentInfo.getStuapplyTimeStart());
322 			}
323 			if (studentInfo.getStuapplyTimeEnd() != null) {
324 				hql += " and t.stuapplyTime <= :stuapplyTimeEnd";
325 				params.put("stuapplyTimeEnd", studentInfo.getStuapplyTimeEnd());
326 			}
327 		}
328 		return hql;
329 	}
330 
331 	/**
332 	 *
333 	* @author  劉軍
334 	* @date 2016-4-16 下午11:18:25  335 	* @version V1.0   336 	* @Title: orderHql  337 	* @Description: (datagrid  拼接 排序)  338 	* @param @param ph
339 	* @param @return    設定文件  340 	* @return String    返回類型  341 	* @throws  342 	 */
343 	private String orderHqlIsReported(PageFilter ph) {
344 		String orderString = "";
345 		if ((ph.getSort() != null) && (ph.getOrder() != null)) {
346 			orderString = " order by t." + ph.getSort() + "" + ph.getOrder();
347 		}
348 		return orderString;
349 	}
350 
351 	//-------------------------------------------------------------------------
352 
353     /**
354      * 添加學生信息
355      */
356 	@Override
357 	public void add(StudentInfo studentInfo) {
358 		TStudentinfo tStudentinfo = new TStudentinfo();
359 		BeanUtils.copyProperties(studentInfo, tStudentinfo);
360 		tStudentinfo.setStuapplyTime(new Date());//建立時間
361 		tStudentinfo.setStustatus(1);//有效狀態
362 		tStudentinfo.setStudayCost( studentInfo.getStudayCost() );
363 		tstudentInfoDao.save(tStudentinfo);
364 	}
365 	/**
366 	 *
367 	* @author  劉軍
368 	* @date 2016-4-16 下午11:18:25  369 	* @version V1.0   370 	* @Title: orderHql  371 	* @Description: ( 刪除學生信息)  372 	* @param @param ph
373 	* @param @return    設定文件  374 	* @return String    返回類型  375 	* @throws  376 	 */
377 	@Override
378 	public void delete(Long id) {
379 		TStudentinfo studentInfo = tstudentInfoDao.get(TStudentinfo.class, id);
380 		studentInfo.setStustatus(0);//置爲無效狀態
381 		//獲取登錄 用戶信息
382 		SessionInfo sessionInfo=(SessionInfo) session.getAttribute(GlobalConstant.SESSION_INFO);
383 		THisStudentinfo hisStudentinfo=new THisStudentinfo() ;
384 		BeanUtils.copyProperties(studentInfo, hisStudentinfo);
385 		//保存:修改用戶信息的操做員信息
386 		hisStudentinfo.setUpdateTime(new Date());
387 		hisStudentinfo.setUpdateUserId(Integer.parseInt((sessionInfo.getId()+"").trim()));
388 		hisStudentinfo.setActionMethod("delete");
389 		//保存歷史表信息
390 	    hisStudentInfoDao.save(hisStudentinfo);
391 
392 	  //跟新數據
393 	  	tstudentInfoDao.update(studentInfo);
394 	}
395 	/**
396 	 *
397 	* @author  劉軍
398 	* @date 2016-4-16 下午11:18:25  399 	* @version V1.0   400 	* @Title: orderHql  401 	* @Description: ( 根據學生id  獲取學生信息)  402 	* @param @param ph
403 	* @param @return    設定文件  404 	* @return String    返回類型  405 	* @throws  406 	 */
407 	@Override
408 	public TStudentinfo get(Long id) {
409 		TStudentinfo studentInfo  = tstudentInfoDao.get(TStudentinfo.class, id);
410 		return studentInfo;
411 	}
412 	/**
413 	 *
414 	* @author  劉軍
415 	* @date 2016-4-16 下午11:18:25  416 	* @version V1.0   417 	* @Title: orderHql  418 	* @Description: ( 修改 學生信息 )  419 	* @param @param ph
420 	* @param @return    設定文件  421 	* @return String    返回類型  422 	* @throws  423 	 */
424 	@Override
425 	public void edit(TStudentinfo studentInfo) {
426 
427 		//獲取登錄 用戶信息
428 		SessionInfo sessionInfo=(SessionInfo) session.getAttribute(GlobalConstant.SESSION_INFO);
429 
430 		THisStudentinfo hisStudentinfo=new THisStudentinfo() ;
431 		TStudentinfo studentinfo2=queryfirst((long)studentInfo.getStuid()) ;//get((long)studentInfo.getUserid());
432 		BeanUtils.copyProperties(studentinfo2, hisStudentinfo);
433 
434 		//保存:修改用戶信息的操做員信息
435 		hisStudentinfo.setUpdateTime(new Date());
436 		hisStudentinfo.setUpdateUserId(Integer.parseInt((sessionInfo.getId()+"").trim()));
437 		hisStudentinfo.setActionMethod("update");
438 		//保存歷史表信息
439 	    hisStudentInfoDao.save(hisStudentinfo);
440 
441 		//跟新數據
442 		tstudentInfoDao.update(studentInfo);
443 	}
444 	   /**
445      * 查詢第一條數據
446      */
447 	public TStudentinfo queryfirst(Long stuid) {
448 		String sql = "select * from  t_studentinfo where stuid= ?";
449 		Object[] obj = {stuid};
450 		return (TStudentinfo) daoImpl.find(sql, obj, new TStudentInfoMapper()) ;
451 	}
452 }
453 

JavaBean 層:TStudentinfo.java

  1 package com.jacezhu.model.businessCore.CustomerManagement;
  2 
  3 import java.util.Date;
  4 
  5 import javax.persistence.Column;
  6 import javax.persistence.Entity;
  7 import javax.persistence.GeneratedValue;
  8 import static javax.persistence.GenerationType.IDENTITY;
  9 import javax.persistence.Id;
 10 import javax.persistence.Table;
 11 
 12 /**
 13  * TStudentinfo entity. @author MyEclipse Persistence Tools
 14  * 學生信息註冊管理
 15  */
 16 @Entity
 17 @Table(name = "t_studentinfo", catalog = "xlzj_sh")
 18 public class TStudentinfo implements java.io.Serializable {
 19 
 20 	// Fields
 21 
 22 	private Long stuid;//學生信息表主鍵  id
 23 	private String stuname;//學生名字
 24 	private String stuenglishName;//學生英文名
 25 	private Integer stusex;//學生性別  dic: 0 ;男 1 女
 26 	private String stubrithday;//學生生日
 27 	private String stuschool;//學生就讀於那個學校
 28 	private String stugrade;//學生是幾年級的
 29 	private Integer studepartment;//中/英文部	dic: 1   中文部   2英文部
 30 	private String stuRegistration;//報名方式  dic: 0 :晚託班 1:1對1輔導 2:上門家教服務 3:其餘
 31 	private Integer stupickUp;//是否接送  dic: 1 接送 ;0 :不接送
 32 	private String stuattention;//注意事項
 33 	private String stuhobby;//興趣愛好
 34 	private String stuavoidFood;//忌口食物
 35 	private String stuallergySmptoms;//過敏症狀
 36 	private String stuacuteillness;//急性病史
 37 	private String stuotherInfo;//其餘信息
 38 	private Long prId;//家長信息表主鍵
 39 	private Integer stustatus;//學生有效狀態  dic: 0 無效 1:有效
 40 	private Date stuapplyTime;//註冊時間
 41 	private Integer userid;//註冊人id
 42 	private String druguse;//drug use  藥物使用
 43 	private String stuschoolTech;// 學生在學校的負責老師姓名
 44 	private String stuschoolTechTel;//學生在校的負責老師的聯繫電話
 45 	private String startStudayDate;//課程服務的起始時間
 46 	private String endStudayDate;//課程服務的終止時間
 47  	private String studayCost;//學費
 48 
 49 
 50 	// Constructors
 51 
 52 	/** default constructor */
 53 	public TStudentinfo() {
 54 	}
 55 
 56 	/** full constructor */
 57 	public TStudentinfo(String stuname, String stuenglishName, Integer stusex,
 58 			String stubrithday, String stuschool, String stugrade,
 59 			Integer studepartment, String stuRegistration, Integer stupickUp,
 60 			String stuattention, String stuhobby, String stuavoidFood,
 61 			String stuallergySmptoms, String stuacuteillness,
 62 			String stuotherInfo, Long prId, Integer stustatus,
 63 			Date stuapplyTime, Integer userid, String druguse ,String stuschoolTech, String stuschoolTechTel,
 64 			String startStudayDate , String endStudayDate , String studayCost) {
 65 		this.stuname = stuname;
 66 		this.stuenglishName = stuenglishName;
 67 		this.stusex = stusex;
 68 		this.stubrithday = stubrithday;
 69 		this.stuschool = stuschool;
 70 		this.stugrade = stugrade;
 71 		this.studepartment = studepartment;
 72 		this.stuRegistration = stuRegistration;
 73 		this.stupickUp = stupickUp;
 74 		this.stuattention = stuattention;
 75 		this.stuhobby = stuhobby;
 76 		this.stuavoidFood = stuavoidFood;
 77 		this.stuallergySmptoms = stuallergySmptoms;
 78 		this.stuacuteillness = stuacuteillness;
 79 		this.stuotherInfo = stuotherInfo;
 80 		this.prId = prId;
 81 		this.stustatus = stustatus;
 82 		this.stuapplyTime = stuapplyTime;
 83 		this.userid = userid;
 84 		this.druguse = druguse;
 85 		this.stuschoolTech = stuschoolTech;
 86 		this.stuschoolTechTel = stuschoolTechTel;
 87 		this.startStudayDate = startStudayDate;
 88 		 this.endStudayDate = endStudayDate;
 89 		this.studayCost = studayCost;
 90 	}
 91 
 92 	// Property accessors
 93 	@Id
 94 	@GeneratedValue(strategy = IDENTITY)
 95 	@Column(name = "stuid", unique = true, nullable = false)
 96 	public Long getStuid() {
 97 		return this.stuid;
 98 	}
 99 
100 	public void setStuid(Long stuid) {
101 		this.stuid = stuid;
102 	}
103 
104 	@Column(name = "stuname", length = 50)
105 	public String getStuname() {
106 		return this.stuname;
107 	}
108 
109 	public void setStuname(String stuname) {
110 		this.stuname = stuname;
111 	}
112 
113 	@Column(name = "stuenglishName", length = 50)
114 	public String getStuenglishName() {
115 		return this.stuenglishName;
116 	}
117 
118 	public void setStuenglishName(String stuenglishName) {
119 		this.stuenglishName = stuenglishName;
120 	}
121 
122 	@Column(name = "stusex", length = 1)
123 	public Integer getStusex() {
124 		return this.stusex;
125 	}
126 
127 	public void setStusex(Integer stusex) {
128 		this.stusex = stusex;
129 	}
130 
131 	@Column(name = "stubrithday", length = 10)
132 	public String getStubrithday() {
133 		return this.stubrithday;
134 	}
135 
136 	public void setStubrithday(String stubrithday) {
137 		this.stubrithday = stubrithday;
138 	}
139 
140 	@Column(name = "stuschool", length = 100)
141 	public String getStuschool() {
142 		return this.stuschool;
143 	}
144 
145 	public void setStuschool(String stuschool) {
146 		this.stuschool = stuschool;
147 	}
148 
149 	@Column(name = "stugrade", length = 10)
150 	public String getStugrade() {
151 		return this.stugrade;
152 	}
153 
154 	public void setStugrade(String stugrade) {
155 		this.stugrade = stugrade;
156 	}
157 
158 	@Column(name = "studepartment", length = 1)
159 	public Integer getStudepartment() {
160 		return this.studepartment;
161 	}
162 
163 	public void setStudepartment(Integer studepartment) {
164 		this.studepartment = studepartment;
165 	}
166 
167 	@Column(name = "stuRegistration", length = 1)
168 	public String getStuRegistration() {
169 		return this.stuRegistration;
170 	}
171 
172 	public void setStuRegistration(String stuRegistration) {
173 		this.stuRegistration = stuRegistration;
174 	}
175 
176 	@Column(name = "stupickUp", length = 1)
177 	public Integer getStupickUp() {
178 		return this.stupickUp;
179 	}
180 
181 	public void setStupickUp(Integer stupickUp) {
182 		this.stupickUp = stupickUp;
183 	}
184 
185 	@Column(name = "stuattention", length = 500)
186 	public String getStuattention() {
187 		return this.stuattention;
188 	}
189 
190 	public void setStuattention(String stuattention) {
191 		this.stuattention = stuattention;
192 	}
193 
194 	@Column(name = "stuhobby", length = 200)
195 	public String getStuhobby() {
196 		return this.stuhobby;
197 	}
198 
199 	public void setStuhobby(String stuhobby) {
200 		this.stuhobby = stuhobby;
201 	}
202 
203 	@Column(name = "stuavoidFood", length = 200)
204 	public String getStuavoidFood() {
205 		return this.stuavoidFood;
206 	}
207 
208 	public void setStuavoidFood(String stuavoidFood) {
209 		this.stuavoidFood = stuavoidFood;
210 	}
211 
212 	@Column(name = "stuallergySmptoms", length = 500)
213 	public String getStuallergySmptoms() {
214 		return this.stuallergySmptoms;
215 	}
216 
217 	public void setStuallergySmptoms(String stuallergySmptoms) {
218 		this.stuallergySmptoms = stuallergySmptoms;
219 	}
220 
221 	@Column(name = "stuacuteillness", length = 500)
222 	public String getStuacuteillness() {
223 		return this.stuacuteillness;
224 	}
225 
226 	public void setStuacuteillness(String stuacuteillness) {
227 		this.stuacuteillness = stuacuteillness;
228 	}
229 
230 	@Column(name = "stuotherInfo", length = 500)
231 	public String getStuotherInfo() {
232 		return this.stuotherInfo;
233 	}
234 
235 	public void setStuotherInfo(String stuotherInfo) {
236 		this.stuotherInfo = stuotherInfo;
237 	}
238 
239 	@Column(name = "prId")
240 	public Long getPrId() {
241 		return this.prId;
242 	}
243 
244 	public void setPrId(Long prId) {
245 		this.prId = prId;
246 	}
247 
248 	@Column(name = "stustatus", length = 1)
249 	public Integer getStustatus() {
250 		return this.stustatus;
251 	}
252 
253 	public void setStustatus(Integer stustatus) {
254 		this.stustatus = stustatus;
255 	}
256 
257 	@Column(name = "stuapplyTime" )
258 	public Date getStuapplyTime() {
259 		return this.stuapplyTime;
260 	}
261 
262 	public void setStuapplyTime(Date stuapplyTime) {
263 		this.stuapplyTime = stuapplyTime;
264 	}
265 
266 	@Column(name = "userid")
267 	public Integer getUserid() {
268 		return this.userid;
269 	}
270 
271 	public void setUserid(Integer userid) {
272 		this.userid = userid;
273 	}
274 
275 	@Column(name = "druguse", length = 500)
276 	public String getDruguse() {
277 		return this.druguse;
278 	}
279 
280 	public void setDruguse(String druguse) {
281 		this.druguse = druguse;
282 	}
283 
284 	@Column(name = "stuschool_tech", length = 100)
285 	public String getStuschoolTech() {
286 		return this.stuschoolTech;
287 	}
288 
289 	public void setStuschoolTech(String stuschoolTech) {
290 		this.stuschoolTech = stuschoolTech;
291 	}
292 
293 	@Column(name = "stuschool_tech_tel", length = 20)
294 	public String getStuschoolTechTel() {
295 		return this.stuschoolTechTel;
296 	}
297 
298 	public void setStuschoolTechTel(String stuschoolTechTel) {
299 		this.stuschoolTechTel = stuschoolTechTel;
300 	}
301 
302 	@Column(name = "start_studay_date", length = 19)
303 	public String getStartStudayDate() {
304 		return this.startStudayDate;
305 	}
306 
307 	public void setStartStudayDate(String startStudayDate) {
308 		this.startStudayDate = startStudayDate;
309 	}
310 
311 	 @Column(name = "end_studay_date", length = 19)
312 	public String getEndStudayDate() {
313 		return this.endStudayDate;
314 	}
315 
316 	public void setEndStudayDate(String endStudayDate) {
317 		this.endStudayDate = endStudayDate;
318 	}
319 
320 	@Column(name = "studay_cost", precision = 16, scale = 0)
321 	public String getStudayCost() {
322 		return this.studayCost;
323 	}
324 
325 	public void setStudayCost(String studayCost) {
326 		this.studayCost = studayCost;
327 	}
328 }

 

JavaBean 參數對象:StudentInfo.java

  1 package com.jacezhu.model.businessCore.CustomerManagement.vo;
  2 import java.util.Date;
  3 /**
  4  *
  5 * @Title: StudentInfo.java    6 * @Package com.jacezhu.pageModel.businessCore.CustomerManagement    7 * @Description: (
  8 * beanVo  用於接收查詢條件 的參數
  9 * )   10 * @author   liujun<1136808529@qq.coom>
 11 * @date 2016-4-24 下午12:11:17   12 * @version V1.0    13  */
 14 public class StudentInfo implements java.io.Serializable {
 15 
 16 	// Fields
 17 
 18 	/**   19 	* @Fields serialVersionUID : (用一句話描述這個變量表示什麼)   20 	*/
 21 	private static final long serialVersionUID = 1L;
 22 	private Long stuid;//學生信息表主鍵  id
 23 	private String stuname;//學生名字
 24 	private String stuenglishName;//學生英文名
 25 	private Integer stusex;//學生性別  dic: 0 ;男 1 女
 26 	private String stubrithday;//學生生日
 27 	private String stuschool;//學生就讀於那個學校
 28 	private String stugrade;//學生是幾年級的
 29 	private Integer studepartment;//中/英文部	dic: 1   中文部   2英文部
 30 	private String stuRegistration;//報名方式  dic: 0 :晚託班 1:1對1輔導 2:上門家教服務 3:其餘
 31 	private Integer stupickUp;//是否接送  dic: 1 接送 ;0 :不接送
 32 	private String stuattention;//注意事項
 33 	private String stuhobby;//興趣愛好
 34 	private String stuavoidFood;//忌口食物
 35 	private String stuallergySmptoms;//過敏症狀
 36 	private String stuacuteillness;//急性病史
 37 	private String stuotherInfo;//其餘信息
 38 	private Long prId;//家長信息表主鍵
 39 	private Integer stustatus;//學生有效狀態  dic: 0 無效 1:有效
 40 	private String stuapplyTime;//註冊時間
 41 	private Integer userid;//註冊人id
 42 	private String druguse;//drug use  藥物使用
 43 	private Date  stuapplyTimeStart;
 44 	private Date  stuapplyTimeEnd;
 45 	private String stuschoolTech;// 學生在學校的負責老師姓名
 46 	private String stuschoolTechTel;//學生在校的負責老師的聯繫電話
 47 	private String startStudayDate;//課程服務的起始時間
 48 	private String endStudayDate;//課程服務的終止時間
 49 	private String studayCost;//學費
 50 
 51 
 52 	public Date getStuapplyTimeStart() {
 53 		return stuapplyTimeStart;
 54 	}
 55 	public void setStuapplyTimeStart(Date stuapplyTimeStart) {
 56 		this.stuapplyTimeStart = stuapplyTimeStart;
 57 	}
 58 	public Date getStuapplyTimeEnd() {
 59 		return stuapplyTimeEnd;
 60 	}
 61 	public void setStuapplyTimeEnd(Date stuapplyTimeEnd) {
 62 		this.stuapplyTimeEnd = stuapplyTimeEnd;
 63 	}
 64 	public Long getStuid() {
 65 		return stuid;
 66 	}
 67 	public void setStuid(Long stuid) {
 68 		this.stuid = stuid;
 69 	}
 70 	public String getStuname() {
 71 		return stuname;
 72 	}
 73 	public void setStuname(String stuname) {
 74 		this.stuname = stuname;
 75 	}
 76 	public String getStuenglishName() {
 77 		return stuenglishName;
 78 	}
 79 	public void setStuenglishName(String stuenglishName) {
 80 		this.stuenglishName = stuenglishName;
 81 	}
 82 	public Integer getStusex() {
 83 		return stusex;
 84 	}
 85 	public void setStusex(Integer stusex) {
 86 		this.stusex = stusex;
 87 	}
 88 	public String getStubrithday() {
 89 		return stubrithday;
 90 	}
 91 	public void setStubrithday(String stubrithday) {
 92 		this.stubrithday = stubrithday;
 93 	}
 94 	public String getStuschool() {
 95 		return stuschool;
 96 	}
 97 	public void setStuschool(String stuschool) {
 98 		this.stuschool = stuschool;
 99 	}
100 	public String getStugrade() {
101 		return stugrade;
102 	}
103 	public void setStugrade(String stugrade) {
104 		this.stugrade = stugrade;
105 	}
106 	public Integer getStudepartment() {
107 		return studepartment;
108 	}
109 	public void setStudepartment(Integer studepartment) {
110 		this.studepartment = studepartment;
111 	}
112 	public String getStuRegistration() {
113 		return stuRegistration;
114 	}
115 	public void setStuRegistration(String stuRegistration) {
116 		this.stuRegistration = stuRegistration;
117 	}
118 	public Integer getStupickUp() {
119 		return stupickUp;
120 	}
121 	public void setStupickUp(Integer stupickUp) {
122 		this.stupickUp = stupickUp;
123 	}
124 	public String getStuattention() {
125 		return stuattention;
126 	}
127 	public void setStuattention(String stuattention) {
128 		this.stuattention = stuattention;
129 	}
130 	public String getStuhobby() {
131 		return stuhobby;
132 	}
133 	public void setStuhobby(String stuhobby) {
134 		this.stuhobby = stuhobby;
135 	}
136 	public String getStuavoidFood() {
137 		return stuavoidFood;
138 	}
139 	public void setStuavoidFood(String stuavoidFood) {
140 		this.stuavoidFood = stuavoidFood;
141 	}
142 	public String getStuallergySmptoms() {
143 		return stuallergySmptoms;
144 	}
145 	public void setStuallergySmptoms(String stuallergySmptoms) {
146 		this.stuallergySmptoms = stuallergySmptoms;
147 	}
148 	public String getStuacuteillness() {
149 		return stuacuteillness;
150 	}
151 	public void setStuacuteillness(String stuacuteillness) {
152 		this.stuacuteillness = stuacuteillness;
153 	}
154 	public String getStuotherInfo() {
155 		return stuotherInfo;
156 	}
157 	public void setStuotherInfo(String stuotherInfo) {
158 		this.stuotherInfo = stuotherInfo;
159 	}
160 	public Long getPrId() {
161 		return prId;
162 	}
163 	public void setPrId(Long prId) {
164 		this.prId = prId;
165 	}
166 	public Integer getStustatus() {
167 		return stustatus;
168 	}
169 	public void setStustatus(Integer stustatus) {
170 		this.stustatus = stustatus;
171 	}
172 	public String getStuapplyTime() {
173 		return stuapplyTime;
174 	}
175 	public void setStuapplyTime(String stuapplyTime) {
176 		this.stuapplyTime = stuapplyTime;
177 	}
178 	public Integer getUserid() {
179 		return userid;
180 	}
181 	public void setUserid(Integer userid) {
182 		this.userid = userid;
183 	}
184 	public String getDruguse() {
185 		return druguse;
186 	}
187 	public void setDruguse(String druguse) {
188 		this.druguse = druguse;
189 	}
190 	public String getStuschoolTech() {
191 		return stuschoolTech;
192 	}
193 	public void setStuschoolTech(String stuschoolTech) {
194 		this.stuschoolTech = stuschoolTech;
195 	}
196 	public String getStuschoolTechTel() {
197 		return stuschoolTechTel;
198 	}
199 	public void setStuschoolTechTel(String stuschoolTechTel) {
200 		this.stuschoolTechTel = stuschoolTechTel;
201 	}
202 	public String getStartStudayDate() {
203 		return startStudayDate;
204 	}
205 	public void setStartStudayDate(String startStudayDate) {
206 		this.startStudayDate = startStudayDate;
207 	}
208 	public String getEndStudayDate() {
209 		return endStudayDate;
210 	}
211 	public void setEndStudayDate(String endStudayDate) {
212 		this.endStudayDate = endStudayDate;
213 	}
214 	public String getStudayCost() {
215 		return studayCost;
216 	}
217 	public void setStudayCost(String studayCost) {
218 		this.studayCost = studayCost;
219 	}
220 
221 
222 }

JavaBean 與表字段的取值對於關係對象:TStudentInfoMapper.java

  1 
  2 
  3 package com.jacezhu.model.businessCore.CustomerManagement.mapper;
  4 
  5 import java.sql.ResultSet;
  6 
  7 import com.jacezhu.framework.connectUtil.jdbcUtl.ObjectMapper;
  8 import com.jacezhu.model.businessCore.CustomerManagement.TStudentinfo;
  9 
 10 //
 11 public class TStudentInfoMapper  implements ObjectMapper {
 12 
 13 	@Override
 14 	public Object mapping(ResultSet rs) {
 15 		TStudentinfo d=new TStudentinfo();
 16 		try{
 17 
 18 			d.setStuid(rs.getLong("stuid"));//學生信息表主鍵  id
 19 			d.setStuname(rs.getString("stuname"));//學生名字
 20 			d.setStuenglishName( rs.getString("stuenglishName") );//學生英文名
 21 			d.setStusex( rs.getInt("stusex") ); //學生性別  dic: 0 ;男 1 女
 22 			d.setStubrithday(rs.getString("stubrithday")); //學生生日
 23 			d.setStuschool(rs.getString("stuschool")); //學生就讀於那個學校
 24 			d.setStugrade(rs.getString("stugrade")); //學生是幾年級的
 25 			d.setStudepartment(rs.getInt("studepartment"));//中/英文部	dic: 1   中文部   2英文部 
 26 			d.setStuRegistration(rs.getString("stuRegistration")); //報名方式  dic: 0 :晚託班 1:1對1輔導 2:上門家教服務 3:其餘
 27 			d.setStupickUp(rs.getInt("stupickUp")); //是否接送  dic: 1 接送 ;0 :不接送
 28 			d.setStuattention(rs.getString("stuattention")); //注意事項
 29 			d.setStuhobby(rs.getString("stuhobby")); //興趣愛好
 30 			d.setStuavoidFood(rs.getString("stuavoidFood"));//忌口食物 
 31 			d.setStuallergySmptoms(rs.getString("stuallergySmptoms")); //過敏症狀
 32 			d.setStuacuteillness(rs.getString("stuacuteillness")); //急性病史
 33 			d.setStuotherInfo(rs.getString("stuotherInfo")); //其餘信息
 34 			d.setPrId(rs.getLong("prId"));//家長信息表主鍵
 35 			d.setStustatus(rs.getInt("stustatus"));//學生有效狀態  dic: 0 無效 1:有效
 36 			d.setStuapplyTime(rs.getDate("stuapplyTime")); //註冊時間
 37 			d.setUserid(rs.getInt("userId")); //註冊人id
 38 			d.setDruguse(rs.getString("druguse")); //drug use  藥物使用
 39 			d.setStuschoolTech(rs.getString("stuschool_tech"));//學生老師
 40 			d.setStuschoolTechTel(rs.getString("stuschool_tech_tel"));//學生老師電話
 41 			d.setStartStudayDate(rs.getString("start_studay_date"));//課程開始時間
 42 		 	d.setEndStudayDate(rs.getString("end_studay_date"));//課程結束時間
 43  			d.setStudayCost(rs.getString("studay_cost"));
 44 		}catch(Exception ex){
 45 			ex.printStackTrace();
 46 		}
 47 	return d;
 48 	}
 49 
 50 }
 51 

 

 

 

 

 

 

 

 

 

 

 

=參考二:============================================================

Config類

讀取同一包下的數據庫鏈接配置文件,這樣是爲了更好的通用性考慮html

  1 package com.tly.dbutil;
  2 
  3 import java.io.IOException;
  4 import java.util.Properties;
  5 
  6 public class Config {
  7     private static Properties prop = new Properties();
  8     static{
  9         try {
 10             //加載dbconfig.properties配置文件
 11             prop.load(Config.class.getResourceAsStream("dbconfig.properties"));
 12         } catch (IOException e) {
 13             // TODO Auto-generated catch block
 14             e.printStackTrace();
 15         }
 16     }
 17 
 18     //設置常量
 19     public static final String CLASS_NAME = prop.getProperty("CLASS_NAME");
 20     public static final String DATABASE_URL = prop.getProperty("DATABASE_URL");
 21     public static final String SERVER_IP = prop.getProperty("SERVER_IP");
 22     public static final String SERVER_PORT = prop.getProperty("SERVER_PORT");
 23     public static final String DATABASE_SID = prop.getProperty("DATABASE_SID");
 24     public static final String USERNAME = prop.getProperty("USERNAME");
 25     public static final String PASSWORD = prop.getProperty("PASSWORD");
 26 
 27 }

 

dbconfig.properties:數據庫配置文件,你也能夠用xml格式等,注意Config類裏面該文件的調用位置

  1 CLASS_NAME=com.mysql.jdbc.Driver
  2 DATABASE_URL=jdbc:mysql
  3 SERVER_IP=localhost
  4 SERVER_PORT=3306
  5 DATABASE_SID=employees
  6 USERNAME=root
  7 PASSWORD=1

接下來就是數據庫鏈接輔助類DBConn了

  1 package com.employees.dbutil;
  2 
  3 import java.sql.Connection;
  4 import java.sql.DriverManager;
  5 import java.sql.PreparedStatement;
  6 import java.sql.ResultSet;
  7 import java.sql.SQLException;
  8 
  9 
 10 public class DBConn {
 11     //三屬性、四方法
 12 
 13     //三大核心接口
 14     private Connection conn = null;
 15     private PreparedStatement pstmt = null;
 16     private ResultSet rs = null;
 17 
 18     //四個方法
 19     //method1: 建立數據庫的鏈接
 20     public Connection getConntion(){
 21         try {
 22             //1: 加載鏈接驅動,Java反射原理
 23             Class.forName(Config.CLASS_NAME);
 24             //2:建立Connection接口對象,用於獲取MySQL數據庫的鏈接對象。三個參數:url鏈接字符串    帳號  密碼
 25             String url = Config.DATABASE_URL+"://"+Config.SERVER_IP+":"+Config.SERVER_PORT+"/"+Config.DATABASE_SID;
 26             conn = DriverManager.getConnection(url,Config.USERNAME,Config.PASSWORD);
 27         } catch (ClassNotFoundException e) {
 28             e.printStackTrace();
 29         } catch (SQLException e) {
 30             e.printStackTrace();
 31         }
 32         return conn;
 33     }
 34 
 35 
 36     //method2:關閉數據庫的方法
 37     public void closeConn(){
 38         if(rs!=null){
 39             try {
 40                 rs.close();
 41             } catch (SQLException e) {
 42                 e.printStackTrace();
 43             }
 44         }
 45         if(pstmt!=null){
 46             try {
 47                 pstmt.close();
 48             } catch (SQLException e) {
 49                 e.printStackTrace();
 50             }
 51         }
 52         if(conn!=null){
 53             try {
 54                 conn.close();
 55             } catch (SQLException e) {
 56                 e.printStackTrace();
 57             }
 58         }
 59     }
 60 
 61 
 62     //method3: 專門用於發送增刪改語句的方法
 63     public int execOther(PreparedStatement pstmt){
 64         try {
 65             //一、使用Statement對象發送SQL語句
 66             int affectedRows = pstmt.executeUpdate();
 67             //二、返回結果
 68             return affectedRows;
 69         } catch (SQLException e) {
 70             e.printStackTrace();
 71             return -1;
 72         }
 73     }
 74 
 75 
 76     //method4: 專門用於發送查詢語句
 77     public ResultSet execQuery(PreparedStatement pstmt){
 78         try {
 79             //一、使用Statement對象發送SQL語句
 80             rs = pstmt.executeQuery();
 81             //二、返回結果
 82             return rs;
 83         } catch (SQLException e) {
 84             e.printStackTrace();
 85             return null;
 86         }
 87     }
 88 
 89 }

 

平時的用上面的代碼可以解決一些簡單的CRUD的應用了,可是還有不少限制,好比每次程序拿鏈接都要new,這樣就給系統加大了負擔,沒有事務,沒有dataSource等等,今天看見一哥們在園裏面寫的一篇用反射解決直接以對象參數的方式CRUD,這個我之前也寫過,沒寫完,主要是本身想寫一個通用的DButil,最後研究來研究去,發現愈來愈和hibernate裏面的simpleJdbcTemplate接近了,因此就直接去看hibernate的源碼了,加上那段時間有些事,沒有時間,就將這件事閒置起來了,如今把這個東西補上,也給本身回顧一下下java

BaseDao類

  1 package com.employees.dao;
  2 import java.io.InputStream;
  3 import java.lang.reflect.Method;
  4 import java.lang.reflect.ParameterizedType;
  5 import java.sql.Connection;
  6 import java.sql.Date;
  7 import java.sql.PreparedStatement;
  8 import java.sql.ResultSet;
  9 import java.util.ArrayList;
 10 import java.util.Iterator;
 11 import java.util.List;
 12 
 13 import com.employees.dbutil.DBConn;
 14 
 15 public class BaseDAO<T> {
 16 
 17     DBConn conn = new DBConn();
 18     private Connection connection = null;
 19 
 20     @SuppressWarnings("unused")
 21     private Class<T> persistentClass;
 22 
 23     @SuppressWarnings("unchecked")
 24     public BaseDAO() {
 25         initConnection();
 26         //得到參數化類型        
 27         ParameterizedType type = (ParameterizedType)getClass().getGenericSuperclass();
 28         persistentClass = (Class<T>)type.getActualTypeArguments()[0];
 29     }
 30 
 31 
 32     /**
 33      * 得到數據庫鏈接
 34      */
 35     public void initConnection() {
 36         connection = conn.getConntion();
 37     }
 38 
 39 
 40     /**
 41      * 保存
 42      */
 43     public void save(T entity) throws Exception{
 44         //SQL語句,insert into table name (
 45         String sql = "insert into " + entity.getClass().getSimpleName().toLowerCase() + "(";
 46 
 47         //得到帶有字符串get的全部方法的對象
 48         List<Method> list = this.matchPojoMethods(entity,"get");
 49 
 50         Iterator<Method> iter = list.iterator();
 51 
 52         //拼接字段順序 insert into table name(id,name,email,
 53         while(iter.hasNext()) {
 54             Method method = iter.next();
 55             sql += method.getName().substring(3).toLowerCase() + ",";
 56         }
 57 
 58         //去掉最後一個,符號insert insert into table name(id,name,email) values(
 59         sql = sql.substring(0, sql.lastIndexOf(",")) + ") values(";
 60 
 61         //拼裝預編譯SQL語句insert insert into table name(id,name,email) values(?,?,?,
 62         for(int j = 0; j < list.size(); j++) {
 63             sql += "?,";
 64         }
 65 
 66         //去掉SQL語句最後一個,符號insert insert into table name(id,name,email) values(?,?,?);
 67         sql = sql.substring(0, sql.lastIndexOf(",")) + ")";
 68 
 69         //到此SQL語句拼接完成,打印SQL語句
 70         System.out.println(sql);
 71 
 72         //得到預編譯對象的引用
 73         PreparedStatement statement = connection.prepareStatement(sql);
 74 
 75         int i = 0;
 76         //把指向迭代器最後一行的指針移到第一行.
 77         iter = list.iterator();
 78         while(iter.hasNext()) {
 79             Method method = iter.next();
 80             //此初判斷返回值的類型,由於存入數據庫時有的字段值格式須要改變,好比String,SQL語句是'"+abc+"'
 81             if(method.getReturnType().getSimpleName().indexOf("String") != -1) {
 82                 statement.setString(++i, this.getString(method, entity));
 83             } else if(method.getReturnType().getSimpleName().indexOf("Date") != -1){
 84                 statement.setDate(++i, this.getDate(method, entity));
 85             } else if(method.getReturnType().getSimpleName().indexOf("InputStream") != -1) {
 86                 statement.setAsciiStream(++i, this.getBlob(method, entity),1440);
 87             } else {
 88                 statement.setInt(++i, this.getInt(method, entity));
 89             }
 90         }
 91         //執行
 92         conn.execOther(statement);
 93         //關閉鏈接
 94         conn.closeConn();
 95     }
 96 
 97 
 98     /**
 99      * 修改
100      */
101     public void update(T entity) throws Exception{
102         String sql = "update " + entity.getClass().getSimpleName().toLowerCase() + " set ";
103 
104         //得到該類全部get方法對象集合
105         List<Method> list = this.matchPojoMethods(entity,"get");
106 
107         //臨時Method對象,負責迭代時裝method對象.
108         Method tempMethod = null;
109 
110         //因爲修改時不須要修改ID,因此按順序加參數則應該把Id移到最後.
111         Method idMethod = null;
112         Iterator<Method> iter = list.iterator();
113         while(iter.hasNext()) {
114             tempMethod = iter.next();
115             //若是方法名中帶有ID字符串而且長度爲2,則視爲ID.
116             if(tempMethod.getName().lastIndexOf("Id") != -1 && tempMethod.getName().substring(3).length() == 2) {
117                 //把ID字段的對象存放到一個變量中,而後在集合中刪掉.
118                 idMethod = tempMethod;
119                 iter.remove();
120             //若是方法名去掉set/get字符串之後與pojo + "id"想符合(大小寫不敏感),則視爲ID
121             } else if((entity.getClass().getSimpleName() + "Id").equalsIgnoreCase(tempMethod.getName().substring(3))) {
122                 idMethod = tempMethod;
123                 iter.remove();
124             }
125         }
126 
127         //把迭代指針移到第一位
128         iter = list.iterator();
129         while(iter.hasNext()) {
130             tempMethod = iter.next();
131             sql += tempMethod.getName().substring(3).toLowerCase() + "= ?,";
132         }
133 
134         //去掉最後一個,符號
135         sql = sql.substring(0,sql.lastIndexOf(","));
136 
137         //添加條件
138         sql += " where " + idMethod.getName().substring(3).toLowerCase() + " = ?";
139 
140         //SQL拼接完成,打印SQL語句
141         System.out.println(sql);
142 
143         PreparedStatement statement = this.connection.prepareStatement(sql);
144 
145         int i = 0;
146         iter = list.iterator();
147         while(iter.hasNext()) {
148             Method method = iter.next();
149             //此初判斷返回值的類型,由於存入數據庫時有的字段值格式須要改變,好比String,SQL語句是'"+abc+"'
150             if(method.getReturnType().getSimpleName().indexOf("String") != -1) {
151                 statement.setString(++i, this.getString(method, entity));
152             } else if(method.getReturnType().getSimpleName().indexOf("Date") != -1){
153                 statement.setDate(++i, this.getDate(method, entity));
154             } else if(method.getReturnType().getSimpleName().indexOf("InputStream") != -1) {
155                 statement.setAsciiStream(++i, this.getBlob(method, entity),1440);
156             } else {
157                 statement.setInt(++i, this.getInt(method, entity));
158             }
159         }
160 
161         //爲Id字段添加值
162         if(idMethod.getReturnType().getSimpleName().indexOf("String") != -1) {
163             statement.setString(++i, this.getString(idMethod, entity));
164         } else {
165             statement.setInt(++i, this.getInt(idMethod, entity));
166         }
167 
168         //執行SQL語句
169         statement.executeUpdate();
170 
171                 //關閉預編譯對象
172                 statement.close();
173 
174                 //關閉鏈接
175                 connection.close();
176     }
177 
178 
179     /**
180      * 刪除
181      */
182     public void delete(T entity) throws Exception{
183         String sql = "delete from " + entity.getClass().getSimpleName().toLowerCase() + " where ";
184 
185         //存放字符串爲"id"的字段對象
186         Method idMethod = null;
187 
188         //取得字符串爲"id"的字段對象
189         List<Method> list = this.matchPojoMethods(entity, "get");
190         Iterator<Method> iter = list.iterator();
191         while(iter.hasNext()) {
192             Method tempMethod = iter.next();
193             //若是方法名中帶有ID字符串而且長度爲2,則視爲ID.
194             if(tempMethod.getName().lastIndexOf("Id") != -1 && tempMethod.getName().substring(3).length() == 2) {
195                 //把ID字段的對象存放到一個變量中,而後在集合中刪掉.
196                 idMethod = tempMethod;
197                 iter.remove();
198             //若是方法名去掉set/get字符串之後與pojo + "id"想符合(大小寫不敏感),則視爲ID
199             } else if((entity.getClass().getSimpleName() + "Id").equalsIgnoreCase(tempMethod.getName().substring(3))) {
200                 idMethod = tempMethod;
201                 iter.remove();
202             }
203         }
204 
205         sql += idMethod.getName().substring(3).toLowerCase() + " = ?";
206 
207         PreparedStatement statement = this.connection.prepareStatement(sql);
208 
209         //爲Id字段添加值
210         int i = 0;
211         if(idMethod.getReturnType().getSimpleName().indexOf("String") != -1) {
212             statement.setString(++i, this.getString(idMethod, entity));
213         } else {
214             statement.setInt(++i, this.getInt(idMethod, entity));
215         }
216 
217         //執行
218         conn.execOther(statement);
219         //關閉鏈接
220         conn.closeConn();
221     }
222 
223 
224     /**
225      * 經過ID查詢
226      */
227     public T findById(Object object) throws Exception{
228         String sql = "select * from " + persistentClass.getSimpleName().toLowerCase() + " where ";
229 
230         //經過子類的構造函數,得到參數化類型的具體類型.好比BaseDAO<T>也就是得到T的具體類型
231         T entity = persistentClass.newInstance();
232 
233         //存放Pojo(或被操做表)主鍵的方法對象
234         Method idMethod = null;
235 
236         List<Method> list = this.matchPojoMethods(entity, "set");
237         Iterator<Method> iter = list.iterator();
238 
239         //過濾取得Method對象
240         while(iter.hasNext()) {
241             Method tempMethod = iter.next();
242             if(tempMethod.getName().indexOf("Id") != -1 && tempMethod.getName().substring(3).length() == 2) {
243                 idMethod = tempMethod;
244             } else if((entity.getClass().getSimpleName() + "Id").equalsIgnoreCase(tempMethod.getName().substring(3))){
245                 idMethod = tempMethod;
246             }
247         }
248         //第一個字母轉爲小寫
249         sql += idMethod.getName().substring(3,4).toLowerCase()+idMethod.getName().substring(4) + " = ?";
250 
251         //封裝語句完畢,打印sql語句
252         System.out.println(sql);
253 
254         //得到鏈接
255         PreparedStatement statement = this.connection.prepareStatement(sql);
256 
257         //判斷id的類型
258         if(object instanceof Integer) {
259             statement.setInt(1, (Integer)object);
260         } else if(object instanceof String){
261             statement.setString(1, (String)object);
262         }
263 
264         //執行sql,取得查詢結果集.
265         ResultSet rs = conn.execQuery(statement);
266 
267         //記數器,記錄循環到第幾個字段
268         int i = 0;
269 
270         //把指針指向迭代器第一行
271         iter = list.iterator();
272 
273         //封裝
274         while(rs.next()) {
275             while(iter.hasNext()) {
276                 Method method = iter.next();
277                 if(method.getParameterTypes()[0].getSimpleName().indexOf("String") != -1) {
278                     //因爲list集合中,method對象取出的方法順序與數據庫字段順序不一致(好比:list的第一個方法是setDate,而數據庫按順序取的是"123"值)
279                     //因此數據庫字段採用名字對應的方式取.
280                     this.setString(method, entity, rs.getString(method.getName().substring(3).toLowerCase()));
281                 } else if(method.getParameterTypes()[0].getSimpleName().indexOf("Date") != -1){
282                     this.setDate(method, entity, rs.getDate(method.getName().substring(3).toLowerCase()));
283                 } else if(method.getParameterTypes()[0].getSimpleName().indexOf("InputStream") != -1) {
284                     this.setBlob(method, entity, rs.getBlob(method.getName().substring(3).toLowerCase()).getBinaryStream());
285                 } else {
286                     this.setInt(method, entity, rs.getInt(method.getName().substring(3).toLowerCase()));
287                 }
288             }
289         }
290 
291         //關閉結果集
292         rs.close();
293 
294         //關閉預編譯對象
295         statement.close();
296 
297         return entity;
298     }
299 
300 
301     /**
302      * 過濾當前Pojo類全部帶傳入字符串的Method對象,返回List集合.
303      */
304     private List<Method> matchPojoMethods(T entity,String methodName) {
305         //得到當前Pojo全部方法對象
306         Method[] methods = entity.getClass().getDeclaredMethods();
307 
308         //List容器存放全部帶get字符串的Method對象
309         List<Method> list = new ArrayList<Method>();
310 
311         //過濾當前Pojo類全部帶get字符串的Method對象,存入List容器
312         for(int index = 0; index < methods.length; index++) {
313             if(methods[index].getName().indexOf(methodName) != -1) {
314                 list.add(methods[index]);
315             }
316         }
317         return list;
318     }
319 
320 
321     /**
322      * 方法返回類型爲int或Integer類型時,返回的SQL語句值.對應get
323      */
324     public Integer getInt(Method method, T entity) throws Exception{
325         return (Integer)method.invoke(entity, new Object[]{});
326     }
327 
328     /**
329      * 方法返回類型爲String時,返回的SQL語句拼裝值.好比'abc',對應get
330      */
331     public String getString(Method method, T entity) throws Exception{
332         return (String)method.invoke(entity, new Object[]{});
333     }
334 
335     /**
336      * 方法返回類型爲Blob時,返回的SQL語句拼裝值.對應get
337      */
338     public InputStream getBlob(Method method, T entity) throws Exception{
339         return (InputStream)method.invoke(entity, new Object[]{});
340     }
341 
342 
343     /**
344      * 方法返回類型爲Date時,返回的SQL語句拼裝值,對應get
345      */
346     public Date getDate(Method method, T entity) throws Exception{
347         return (Date)method.invoke(entity, new Object[]{});
348     }
349 
350 
351     /**
352      * 參數類型爲Integer或int時,爲entity字段設置參數,對應set
353      */
354     public Integer setInt(Method method, T entity, Integer arg) throws Exception{
355         return (Integer)method.invoke(entity, new Object[]{arg});
356     }
357 
358     /**
359      * 參數類型爲String時,爲entity字段設置參數,對應set
360      */
361     public String setString(Method method, T entity, String arg) throws Exception{
362         return (String)method.invoke(entity, new Object[]{arg});
363     }
364 
365     /**
366      * 參數類型爲InputStream時,爲entity字段設置參數,對應set
367      */
368     public InputStream setBlob(Method method, T entity, InputStream arg) throws Exception{
369         return (InputStream)method.invoke(entity, new Object[]{arg});
370     }
371 
372 
373     /**
374      * 參數類型爲Date時,爲entity字段設置參數,對應set
375      */
376     public Date setDate(Method method, T entity, Date arg) throws Exception{
377         return (Date)method.invoke(entity, new Object[]{arg});
378     }
379 }

EmployeesDao繼承BaseDAO,能夠直接使用父類的方法,增長了代碼的複用

 

  1 package com.employees.dao;
  2 
  3 import java.util.ArrayList;
  4 import java.util.List;
  5 import com.employees.po.Employees;
  6 
  7 public class EmployeesDao extends BaseDAO<Employees> {
  8 
  9     // 添加員工信息的操做
 10     public boolean addEmployees(final Employees employees) throws Exception {
 11         save(employees);
 12         return true;
 13     }
 14 
 15     // 將員工信息添加到表格中
 16     public List<Employees> addEmployees(int id) throws Exception {
 17         List<Employees> lstEmployees = new ArrayList<Employees>();
 18         Employees employees = findById(id);
 19         // 將當前封轉好的數據裝入對象中
 20         lstEmployees.add(employees);
 21         return lstEmployees;
 22     }
 23 
 24     public void deleteEmp(final Employees entity) throws Exception {
 25         this.delete(entity);
 26     }
 27 
 28     public void updateEmp(final Employees entity) throws Exception {
 29         this.update(entity);
 30     }
 31 
 32 
 33 }

po層的代碼就不貼了,如今用junit4作一下測試

  1 package com.employees.dao;
  2 
  3 import org.junit.Test;
  4 
  5 import com.employees.po.Employees;
  6 
  7 public class EmployeesDaoTest {
  8 
  9     @Test
 10     public void testAdd() throws Exception {
 11         Employees emp = new Employees();
 12         emp.setPname("tly");
 13         emp.setPsex("男");
 14         emp.setPbeliefs("xxxxx");
 15         emp.setPaddr("天河");
 16         emp.setPhobby("打籃球");
 17         emp.setPsubject("計算機");
 18         emp.setPtel("123456");
 19         EmployeesDao dao = new EmployeesDao();
 20         dao.addEmployees(emp);
 21     }
 22     @Test
 23     public void testUpdate() throws Exception {
 24         EmployeesDao dao = new EmployeesDao();
 25         Employees emp = dao.findById(14);
 26         emp.setPtel("999999");
 27         dao.updateEmp(emp);
 28     }
 29     @Test
 30     public void testdelete() throws Exception {
 31         EmployeesDao dao = new EmployeesDao();
 32         Employees emp = dao.findById(15);
 33         dao.deleteEmp(emp);
 34     }
 35 
 36 }

 

爲人:謙遜、激情、博學、審問、慎思、明辨、 篤行 學問:紙上得來終覺淺,絕知此事要躬行 爲事:工欲善其事,必先利其器。 轉載請標註出處!
相關文章
相關標籤/搜索