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
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
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
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
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
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
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 }
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
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
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 }
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
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
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
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
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
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
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
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
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
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
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 }
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 }
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
讀取同一包下的數據庫鏈接配置文件,這樣是爲了更好的通用性考慮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 }
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
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
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 }
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 }
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 }