Java에는 Hibernate, Mybatis 등과 같은 데이터 관리를위한 많은 프레임 워크가 있지만 처음에 배운 것은 JDBC였습니다. 나는 JDBC가 여전히 매우 좋다고 생각합니다. 데이터 작업을 더 깊이 이해할 수 있습니다. 오늘 나는 다시 쓴 기본 JDBC 클래스를 쓸 것입니다! 기억을 심화하십시오! ! !
먼저 일반적인 증분 구현 클래스 기반을 게시하십시오
package com.shude.dao; import java.lang.reflect.field; import java.lang.reflect.method; import java.lang.reflect.parameterizedtype; import java.lang.reflect.type; import java.sql.connection; import java.sql.databaMetaBaMeTADATA; java.sql.preparedstatement; import java.sql.resultset; import java.sql.sqlexception; import java.util.arraylist; import java.util.linkedhashmap; import java.util.list; import java.util.map; import java.util.map.enty; com.shude.dao.im.ibaseao; import com.shude.util.configutil; import com.shude.util.jdbcutil; import com.shude.util.pageutil;/** * 수정, 삭제, 수정 및 수정 및 검색 구현 및 검색 구현 * * @param <e> */public classion 정적 configutil configutil; protected class <?> cls;/*** 패키지 이름과 클래스 이름*/public basedao () {class <?> clstemp = this.getCrass (); type type = clstemp.getGenericSuperClass (); if (type instanceof parameterizedtype) {type [] type = (ParameterizedType) type) .getActualTyPearGuments (); cls = (class <?>) type [0];}}/*** 해당 클래스의 데이터베이스에서 테이블 이름을 얻습니다.*/static {configutil = configutil.newinstance ( "/taborm.properties");}/*** 저장 방법*/public bolean saveinfo (e) {e). {class <?> cls = e.getClass (); // 테이블 이름 문자열 tableName = configUtil.getVal (cls.getName ()); // 기본 키 스트링 prykey = getPrimkey (tableName); // 데이터 열 목록 <string> filedList = new arraylist <string> (); // sql string sql = getAvesql (tableName, prykey, fileDlist); // sqlflag = exclusivesql (sql, e, fileedlist);} catch (exception e1) {flag = false; e1.printstacktrace ();} 반환 플래그;}/*** modify methys*/public void modifyinfo (e) {cls <? e.getClass (); // 테이블 이름 string tableName = configUtil.getVal (cls.getName ()); // 기본 키 스트링 가져옵니다 prykey = getPrimkey = getPrimkey (TableName); // 데이터 열 목록 <string> filedList = new arraylist <string> (); // sql string sql = getModifysql (TableName, Prykey, FiledList); // SET FILEDLIST.ADD (PRYKEY)에 기본 키를 추가합니다. // SQLEXCUTESQL (SQL, E, FILEDLIST);}/*** DELETE Method*/Public Void DeleteInfo (Object Id) {// 테이블 이름 Tablename을 얻습니다. configutil.getVal (cls.getName ()); // 기본 키 문자열 prykey = getPrimkey (tableName); // SQL 문자열 sql = "update"+tablemename+"set status = '1'여기서"+prykey+"=?" conn.preparestatement (sql); pstm.setobject (1, id); pstm.execute ();} catch (예외 e) {e.printstacktrace ();} 마침내 {jdbcutil.closeconn (conn);}}/*** query 모든 메소드*/public void queryinfo (pageutil <e> pageutil <e> pageutil <e> pageutil <e> pageUtil.getEntity (); // 테이블 이름 문자열 tableName = configUtil.getVal (cls.getName ()); // 쿼리 조건 가져 오기 <string, object> parammap = getParammap (e); // sqlstring sql = getQuerysql (parammap, tabename); sql += "limit?,?"; Parammap.put ( "pagesize", (pageutil.getPagesize () -1)*pageUtil.getPagenum ()); Parammap.put ( "pagenum", pageutil.getPagenum ()); // execute sqlexcutquery (pageutil, sql, paramp, tablename); e QueryById (Object ID) {// 테이블 이름 문자열 tableName = configUtil.getVal (cls.getName ()); // 기본 키 스트링을 가져옵니다. prykey = getPrimkey (tableName); // SQLString SQL = "get * from"+tablename+"where 1 = 1 및"+prykey+"= // null; prepartatement pstm = null; resset rs = null; e e = null; try {conn = jdbcutil.getconn (); pstm = conn.preparestatement (sql); pstm.setobject (1, id); rs = pstm.executequery (); list = getititylist (rs); (예외) {ex.printstacktrace ();} 마침내 {jdbcutil.closeconn (conn);} return e;}/ ** * 총 숫자 수를 가져옵니다 * @param parammap * @param tablename * @return */ private inger getpagenumss (map <string, object> parammap, string tabename) Parammap.remove ( "pagesize"); Parammap.remove ( "pagenum"); String sql = getQuerySql (Parammap, Tablemanme); sql = "select count (*) from ("+sql+") temptab"; Connection conn = null; preparedstatement pstm = null; inte pagenum; jdbcutil.getConn (); pstm = conn.preparestatement (sql); int i = 1; for (Entry <string, object> entry : parammap.entryset ()) {object val = ender.getValue (); if (val instanceof java.lang.string) {pstm.setstring (i, "+val. if (val instanceof java.lang.integer) {pstm.setint (i, integer.psostring ());} i ++;} rs = pstm.executeQuery (); while (rs.next ()) {pagenumsss = rs.getint (1);}} catch (예외 e) {e.printstacktrace ();} 마침내 {jdbcutil.closeconn (conn);} return pagenumsss; getQuerySql (Map <String, Object> Parammap, String TableName) {StringBuffer SQL = New StringBuffer (); SQL.Append ( "select * from") .Append (TableName) .Append ( "여기서 1 = 1 및 상태 = '0'"); list <string> columnList = getTableColumns (tableName); Parammap.entryset ()) {String columnname = entry.getKey (); for (string colnname : columnList) {if (colnname.equalSeignoreCase (colormame)) {if (enther.getValue () instancef java.lang.string) {sql.append ( "및") .Append ( ") ? ");} else {sql.append ("and ") .append (columname) .append ("=? ");} break;}}} return sql.toString ();} /** * query 조건 get * @param e * @return * /private map, object> getParAmmap (getParAmmap (e e) {map <string = new 객체> LinkedHashMap <string, object> (); field [] fields = e.getClass (). val);}} catch (Exception E1) {e1.printstacktrace ();}} return parammap;}/** * 기본 키를 가져옵니다 * @param tabename * @return */private String getPrimkey (String tableName) {Connection Conn = null; databasemetadata = null; resultet rs = null; primyyname; jdbcutil.getConn (); metadata = conn.getmetadata (); rs = metadata.getPrimaryKeys (conn.getCatalog (), null, tablename.toupperCase ()); while (rs.next ()) {primkeyname = rs.getString ( "collect_name");}} catch (sqlexception e) {e.printstacktrace ();} 마침내 {jdbcutil.closeconn (conn);} return primkeyname;}/** * 저장 방법 sql * @param sql * @param e @param e @return */private boolean gutrsql (string sql, e entity, list <string> filedlist) {boolean flag = true; connection conn = null; proadstatement pstm = null; try {conn = jdbcutil.getConn (); pstm = conn.preparestatement (// sql); for (string column : {sql); = getFieldValue (Entity, Collectame); pstm.setObject (i, val); i ++;} pstm.execute ();} catch (sqlexception e1) {e1.printstacktrace (); flag = false;} 마침내 {jdbcutil.closeconn (conn);}/** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** *} TableName * @param prykey * @param filedlist * @return */private String getModifySql (String tableName, String Prykey, list <string> filedList) {StringBuffer sql = new StringBuffer (); getTableColumns (tableName); for (String columnName : columnList) {if (! columnname.equalSeignoreCase (prykey)) {filedList.Add (columnName); sql.Append (columnName) .Append ( "=?");}} if (sql.tostring ()) StringBuffer (sql.substring (0, sql.length () -1));} sql.append ( "where") .append (prykey) .append ( "=?"); return sql.tostring ();} /** * execute all sql * @param pageutil * @param sql * @param parammap * @param * @param * @param * @param parammap * ExcutQuery (pageutil <e> pageutil, string sql, map <string, object> parammap, string tablemename) {connection conn = null; peststatement pstm = null; resultet rs = null; try {conn = jdbcutil (); pstm = conn.preparestatement (sql); inter <string> (inter <strat>). PARAMMAP.ENTRYSET ()) {Object val = Entry.getValue (); if (val instanceof java.lang.string) {pstm.setstring (i, "%"+val.toString ()+"%");} else if (val instancesof java.lang.integer) {pstm.setint (i, integer.parseint (val.toString ());} i ++;} rs = pstm.executeQuery (); list <e> list = getEntityList (rs); // query 결과 pageutil.setList (list); // 총 숫자 수를 캡슐화합니다. pageutil.setpagenumsum (getpagenumsss (parammap, tablemanme));} catch (예외 e) {e.printstacktrace () {e.printstacktrace ();} 마침내 {jdbcutil.closeconn (conn)}}/ ** * 테이블 * @param entity (@param entity) columnname) {class <?>> entity.getClass (); Object value = null; // 클래스 필드에서 모든 멤버 속성을 가져옵니다 [] fields = cls.getDeclaredFields (); for (field field : fields) {// 속성 이름이 컬럼 이름과 동일하지만 항목 이름이 동일합니다. (FieldName.equalSeignoreCase (colormal)) {// 규칙에 따라 메소드 이름을 얻습니다. String MethodName = "get"+FieldName.SubString (0,1) .ToupperCase ()+FieldName.SubString (1); 메소드 메소드 메소드에 따라 메소드 객체를 가져옵니다. method.invoke (entity);} catch (예외 e) {e.printstacktrace ();} break;}} return value;}/** * sql * @param tablemename * @param prykey * @param filedlist */private string getAvesql (string sitavesql, string <string>) = new StringBuffer (); sql.append ( "insert in in insert") .Append (tableName) .Append ( "("); list <string> columnList = getTableColumns (tableName); for (String String : collectList) {if (! String.equalSignoreCase (prykey)) {sql.append (string) .append ( ","); filedlist.add (string);}} if (sql.tostring (). endswith ( ",")) {sql = new StringBuffer (sql.substring (0, sql.length () -1); <filedlist.size (); sql.append ( "?,");} if (sql.tostring (). endswith ( ",")) {sql = new StringBuffer (0, sql.length () -1); /** * 테이블 열 * @Param tableName * @return * /private list <string> getTableColumns (String TableName) {list <string> columnList = new ArrayList <String> (); Connection Conn = NULL; NULL; resultet RS = NULL; Conn = JDBCUTIL.GEGCUTIL.GEGCUTIL.GEGCUTIL.GETCONN (); conn.getmetadata (); rs = metadata.getColumns (conn.getCatalog (), null, tableName.toupperCase (), null); while (rs.next ()) {문자열 clumnname = rs.getString ( "collect_name"); columnList.Add (clumnName);}} catch (sqlexception e) {e.printstacktrace ();} 최종적 {jdbcutil.closeconn (conn);} retud cemberlist; } /** * 쿼리 결과 캡슐화 결과 * @param rs * @return * @throws Exception * / @suppresswarnings ( "선택 취소") 개인 목록 <e> getentityList (resultet rs)는 예외 {list <e> list = new arraylist <e> (); field [] fields = cls.getDeclaredfields (rs.next (rs.nex) {) {); (e) cls.newinstance (); for (필드 필드 : 필드) {try {field.setAccessible (true); String columnname = field.getName (); String FieldType = field.getType (). if ( "Integer".Equals (FieldType)) {field.set (e, rs.getint (colormame));}} catch (예외 e1) {e1.printstacktrace ();}} list.add (e);} return list;}}}MySQL 관련 구성 파일 Config.Properties 컨텐츠
드라이버 = com.mysql.jdbc.driver url = jdbc : mysql : // localhost : 3306/dbsda10? char
구성 파일 읽기 클래스 구성
package com.shude.util; import java.io.ioexception; import java.util.properties;/** * 구성 파일 읽기 * @author 관리자 */public class configutil {private static configutil configutil; 개인 정적 최종 문자열 defalt_file_path = "/config.properties"; 개인 정적 문자열 이름; 개인 속성 팝; 개인 configutil () {init (); } private void init () {pop = new Properties (); try {if (name! = null) pop.load (configutil.class.getResourceasstream (name)); pop.load (configutil.class.getResourceasstream (defalt_file_path)); } catch (ioexception e) {e.printstacktrace (); }} public static configutil newinstance (문자열 이름) {configutil.name = name; if (configutil == null) configutil = new configutil (); 반환 configutil; } / ** * 구성 파일에서 오른쪽에서 값을 가져옵니다 * @param key * @return * / public String getVal (String key) {return pop.getProperty (키); }}이전 조건은 데이터베이스의 필드 이름이 엔티티 클래스의 이름과 일치하고 동일해야하며 엔티티 클래스 이름과 관련된 관련 데이터 테이블 이름 및 구성 파일이 있어야한다는 것입니다. 구성 파일은 다음과 같습니다.
taborm.properties
com.shude.entity.userinfo = user_info com.shude.entity.roleinfo = role_info com.shude.entity.fabricinfo = fabric_info com.shude.entity.productinfo = product_info com.shude.entity.mateinfo = mate_info com.shude.entity.entity.enfo
위의 기사 JDBC는 추가, 삭제, 수정 및 확인을위한 일반적인 기본 방법을 구현하는 것이 내가 공유하는 모든 내용입니다. 나는 당신이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원할 수 있기를 바랍니다.