日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

利用模板模式重构JDBC操作

發布時間:2024/4/13 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用模板模式重构JDBC操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

創建一個模板類JdbcTemplate,封裝所有的JDBC 操作。以查詢為例,每次查詢的表不同,返回的數據結構也就不一樣。我們針對不同的數據,都要封裝成不同的實體對象。而每個實體封裝的邏輯都是不一樣的,但封裝前和封裝后的處理流程是不變的,因此,我們可以使用模板方法模式來設計這樣的業務場景。先創建約束ORM 邏輯的接口RowMapper:

/*** ORM映射定制化的接口*/ public interface RowMapper<T> {T mapRow(ResultSet rs,int rowNum) throws Exception; }

在創建封裝了所有處理流程的抽象類JdbcTemplate:

public abstract class JdbcTemplate {private DataSource dataSource;public JdbcTemplate(DataSource dataSource) {this.dataSource = dataSource;}public List<?> executeQuery(String sql, RowMapper<?> rowMapper, Object[] values){try {//1、獲取連接Connection conn = this.getConnection();//2、創建語句集PreparedStatement pstm = this.createPrepareStatement(conn,sql);//3、執行語句集ResultSet rs = this.executeQuery(pstm,values);//4、處理結果集List<?> result = this.paresResultSet(rs,rowMapper);//5、關閉結果集this.closeResultSet(rs);//6、關閉語句集this.closeStatement(pstm);//7、關閉連接this.closeConnection(conn);return result;}catch (Exception e){e.printStackTrace();}return null;}protected void closeConnection(Connection conn) throws Exception {//數據庫連接池,我們不是關閉conn.close();}protected void closeStatement(PreparedStatement pstm) throws Exception {pstm.close();}protected void closeResultSet(ResultSet rs) throws Exception {rs.close();}protected List<?> paresResultSet(ResultSet rs, RowMapper<?> rowMapper) throws Exception {List<Object> result = new ArrayList<Object>();int rowNum = 1;while (rs.next()){result.add(rowMapper.mapRow(rs,rowNum ++));}return result;}protected ResultSet executeQuery(PreparedStatement pstm, Object[] values) throws Exception {for (int i = 0; i < values.length; i++) {pstm.setObject(i,values[i]);}return pstm.executeQuery();}protected PreparedStatement createPrepareStatement(Connection conn, String sql) throws Exception {return conn.prepareStatement(sql);}public Connection getConnection() throws Exception {return this.dataSource.getConnection();} }

創建實體對象Member 類:

public class Member {private String username;private String password;private String nickname;private int age;private String addr;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getNickname() {return nickname;}public void setNickname(String nickname) {this.nickname = nickname;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getAddr() {return addr;}public void setAddr(String addr) {this.addr = addr;} }

創建數據庫操作類MemberDao:

public class MemberDao extends JdbcTemplate {public MemberDao(DataSource dataSource) {super(dataSource);}public List<?> selectAll(){String sql = "select * from t_member";return super.executeQuery(sql, new RowMapper<Member>() {public Member mapRow(ResultSet rs, int rowNum) throws Exception {Member member = new Member();//字段過多,原型模式member.setUsername(rs.getString("username"));member.setPassword(rs.getString("password"));member.setAge(rs.getInt("age"));member.setAddr(rs.getString("addr"));return member;}},null);} }

客戶端測試代碼:

public class MemberDaoTest {public static void main(String[] args) {MemberDao memberDao = new MemberDao(null);List<?> result = memberDao.selectAll();System.out.println(result);} }

希望通過這兩個案例的業務場景分析,能夠幫助小伙們對模板方法模式有更深的理解。

?

總結

以上是生活随笔為你收集整理的利用模板模式重构JDBC操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。