JDBC总结4中,我们的查询依然是放在每个DAO中,而不是DBHelp类中,这样还是不够简化的!下面简化一下:
在util包中建立一个接口:
<code>package</code> <code>com.hanchao.util;</code>
<code>import</code> <code>java.sql.ResultSet;</code>
<code>import</code> <code>java.sql.SQLException;</code>
<code>/***********************</code>
<code> </code><code>* @author:han </code>
<code> </code><code>* @version:1.0 </code>
<code> </code><code>* @created:2015-10-11 </code>
<code> </code><code>***********************</code>
<code> </code><code>*/</code>
<code>public</code> <code>interface</code> <code>RowMapper {</code>
<code> </code><code>public</code> <code>Object mapRow(ResultSet rs) </code><code>throws</code> <code>SQLException;</code>
<code>}</code>
3.在dao包中,
<code>package</code> <code>com.hanchao.dao;</code>
<code>import</code> <code>java.util.List;</code>
<code>import</code> <code>com.hanchao.entity.Account;</code>
<code>import</code> <code>com.hanchao.util.DBHelp;</code>
<code>public</code> <code>class</code> <code>AccountDao {</code>
<code> </code>
<code> </code><code>private</code> <code>DBHelp dbHelp = </code><code>new</code> <code>DBHelp();</code>
<code> </code><code>/**</code>
<code> </code><code>* 保存</code>
<code> </code><code>* *******************</code>
<code> </code><code>* @param accout</code>
<code> </code><code>* @return</code>
<code> </code><code>* @author:wind</code>
<code> </code><code>* 2015-10-11 下午9:31:28</code>
<code> </code><code>*/</code>
<code> </code><code>public</code> <code>int</code> <code>save(Account accout) {</code>
<code> </code><code>String sql = </code><code>"insert into t_account(username,password,money,enable) value(?,?,?,?)"</code><code>;</code>
<code> </code><code>return</code> <code>dbHelp.executeSQL(sql, accout.getUsername(),accout.getMoney(),accout.getMoney(),accout.isEnable());</code>
<code> </code><code>}</code>
<code> </code><code>* update</code>
<code> </code><code>* @param account</code>
<code> </code><code>* 2015-10-11 下午9:37:53</code>
<code> </code><code>public</code> <code>int</code> <code>update(Account account) {</code>
<code> </code><code>String sql = </code><code>"update t_account set username=?,password=?,money=?,enable=? where id = ?"</code><code>;</code>
<code> </code><code>return</code> <code>dbHelp.executeSQL(sql, account.getUsername(),account.getPassword(),account.getMoney(),account.isEnable(),account.getId());</code>
<code> </code><code>* detele</code>
<code> </code><code>* @param id</code>
<code> </code><code>* 2015-10-11 下午9:56:24</code>
<code> </code><code>public</code> <code>int</code> <code>delete(</code><code>int</code> <code>id) {</code>
<code> </code><code>String sql = </code><code>"delete from t_account where id = ?"</code><code>;</code>
<code> </code><code>return</code> <code>dbHelp.executeSQL(sql, id);</code>
<code> </code><code>* 根据ID查找对象</code>
<code> </code><code>* 2015-10-11 下午10:05:46</code>
<code> </code><code>public</code> <code>Account findById(</code><code>int</code> <code>id) {</code>
<code> </code><code>String sql = </code><code>"select id,username,password,money,enable from t_account where id = ?"</code><code>;</code>
<code> </code><code>return</code> <code>(Account) dbHelp.executeQueryForObject(</code><code>new</code> <code>AccountMapper(), sql, id);</code>
<code> </code><code>* 查找所有</code>
<code> </code><code>* 2015-10-11 下午10:17:03</code>
<code> </code><code>public</code> <code>List<Account> findAll() {</code>
<code> </code><code>String sql = </code><code>"select id,username,password,money,enable from t_account"</code><code>;</code>
<code> </code><code>return</code> <code>dbHelp.executeQueryForList(</code><code>new</code> <code>AccountMapper(), sql);</code>
实现类:实现接口的方法
<code>import</code> <code>com.hanchao.util.RowMapper;</code>
<code>public</code> <code>class</code> <code>AccountMapper </code><code>implements</code> <code>RowMapper{</code>
<code> </code><code>@Override</code>
<code> </code><code>public</code> <code>Object mapRow(ResultSet rs) </code><code>throws</code> <code>SQLException {</code>
<code> </code><code>Account account = </code><code>new</code> <code>Account();</code>
<code> </code><code>account.setId(rs.getInt(</code><code>"id"</code><code>));</code>
<code> </code><code>account.setUsername(rs.getString(</code><code>"username"</code><code>));</code>
<code> </code><code>account.setPassword(rs.getString(</code><code>"password"</code><code>));</code>
<code> </code><code>account.setMoney(rs.getFloat(</code><code>"money"</code><code>));</code>
<code> </code><code>account.setEnable(rs.getBoolean(</code><code>"enable"</code><code>));</code>
<code> </code><code>return</code> <code>account;</code>
4.那我们的DBhelp如何写呢?
<code>import</code> <code>java.sql.Connection;</code>
<code>import</code> <code>java.sql.DriverManager;</code>
<code>import</code> <code>java.sql.PreparedStatement;</code>
<code>import</code> <code>java.util.ArrayList;</code>
<code> </code><code>* 帮助类</code>
<code>public</code> <code>class</code> <code>DBHelp {</code>
<code> </code><code>private</code> <code>static</code> <code>final</code> <code>String DRIVER = </code><code>"com.mysql.jdbc.Driver"</code><code>;</code>
<code> </code><code>private</code> <code>static</code> <code>final</code> <code>String URL = </code><code>"jdbc:mysql:///mydb"</code><code>;</code>
<code> </code><code>private</code> <code>static</code> <code>final</code> <code>String DB_NAME = </code><code>"root"</code><code>;</code>
<code> </code><code>private</code> <code>static</code> <code>final</code> <code>String DB_PASSWORD = </code><code>"root"</code><code>;</code>
<code> </code><code>public</code> <code>Connection getConnection() </code><code>throws</code> <code>SQLException, ClassNotFoundException {</code>
<code> </code><code>Class.forName(DRIVER);</code>
<code> </code><code>Connection conn = DriverManager.getConnection(URL,DB_NAME,DB_PASSWORD);</code>
<code> </code><code>return</code> <code>conn;</code>
<code> </code><code>public</code> <code>int</code> <code>executeSQL(String sql ,Object...args) {</code>
<code> </code><code>Connection conn = </code><code>null</code><code>;</code>
<code> </code><code>PreparedStatement stat = </code><code>null</code><code>;</code>
<code> </code><code>int</code> <code>rows = </code><code>0</code><code>;</code>
<code> </code>
<code> </code><code>try</code> <code>{</code>
<code> </code><code>conn = getConnection();</code>
<code> </code><code>stat = conn.prepareStatement(sql);</code>
<code> </code><code>for</code> <code>(</code><code>int</code> <code>i = </code><code>0</code><code>; i < args.length; i++) {</code>
<code> </code><code>stat.setObject(i+</code><code>1</code><code>, args[i]);</code>
<code> </code><code>}</code>
<code> </code><code>rows = stat.executeUpdate();</code>
<code> </code><code>if</code> <code>(rows > </code><code>0</code><code>) {</code>
<code> </code><code>System.out.println(</code><code>"operate successfully!"</code><code>);</code>
<code> </code>
<code> </code><code>} </code><code>catch</code> <code>(ClassNotFoundException e) {</code>
<code> </code><code>e.printStackTrace();</code>
<code> </code><code>} </code><code>catch</code> <code>(SQLException e) {</code>
<code> </code><code>} </code><code>finally</code> <code>{</code>
<code> </code><code>this</code><code>.close(conn, stat);</code>
<code> </code><code>}</code>
<code> </code><code>return</code> <code>rows;</code>
<code> </code><code>public</code> <code>void</code> <code>close(ResultSet rs,Connection conn , PreparedStatement stat) {</code>
<code> </code><code>if</code> <code>(rs != </code><code>null</code><code>) {</code>
<code> </code><code>rs.close();</code>
<code> </code><code>try</code> <code>{</code>
<code> </code><code>if</code> <code>(stat != </code><code>null</code><code>) {</code>
<code> </code><code>stat.close();</code>
<code> </code><code>}</code>
<code> </code><code>} </code><code>catch</code> <code>(SQLException e) {</code>
<code> </code><code>e.printStackTrace();</code>
<code> </code><code>} </code><code>finally</code> <code>{</code>
<code> </code><code>try</code> <code>{</code>
<code> </code><code>if</code> <code>(conn != </code><code>null</code><code>) {</code>
<code> </code><code>conn.close();</code>
<code> </code><code>}</code>
<code> </code><code>} </code><code>catch</code> <code>(SQLException e) {</code>
<code> </code><code>e.printStackTrace();</code>
<code> </code><code>} </code>
<code> </code><code>public</code> <code>void</code> <code>close(Connection conn , PreparedStatement stat) {</code>
<code> </code><code>this</code><code>.close(</code><code>null</code><code>,conn, stat);</code>
<code> </code><code>* @param rm</code>
<code> </code><code>* @param sql</code>
<code> </code><code>* @param args</code>
<code> </code><code>* 2015-10-11 下午11:05:58</code>
<code> </code><code>public</code> <code>Object executeQueryForObject(RowMapper rm,String sql ,Object...args) {</code>
<code> </code><code>Object result = </code><code>null</code><code>;</code>
<code> </code><code>ResultSet rs = </code><code>null</code><code>;</code>
<code> </code><code>stat.setObject(i+</code><code>1</code><code>,args[i]);</code>
<code> </code><code>rs = stat.executeQuery();</code>
<code> </code><code>if</code> <code>(rs.next()) {</code>
<code> </code><code>result = (Account) rm.mapRow(rs);</code>
<code> </code><code>close(rs, conn, stat);</code>
<code> </code><code>return</code> <code>result;</code>
<code> </code><code>* 查找集合</code>
<code> </code><code>* 2015-10-11 下午11:12:49</code>
<code> </code><code>public</code> <code>List executeQueryForList(RowMapper rm,String sql,Object...args) {</code>
<code> </code><code>List list = </code><code>new</code> <code>ArrayList();</code>
<code> </code><code>while</code> <code>(rs.next()) {</code>
<code> </code><code>Object obj = rm.mapRow(rs);</code>
<code> </code><code>list.add(obj);</code>
<code> </code><code>this</code><code>.close(rs,conn, stat);</code>
<code> </code><code>return</code> <code>list;</code>
5.测试一下:
<code>package</code> <code>com.hanchao.test;</code>
<code>import</code> <code>com.hanchao.dao.AccountDao;</code>
<code>public</code> <code>class</code> <code>Test {</code>
<code> </code><code>public</code> <code>static</code> <code>void</code> <code>main(String[] args) {</code>
<code> </code><code>//增</code>
<code>/* Account account = new Account();</code>
<code> </code><code>account.setEnable(true);</code>
<code> </code><code>account.setMoney(20f);</code>
<code> </code><code>account.setUsername("hanchao1");</code>
<code> </code><code>account.setPassword("1234561");</code>
<code> </code><code>AccountDao accountDao = new AccountDao();</code>
<code> </code><code>accountDao.save(account);*/</code>
<code> </code><code>//改</code>
<code> </code><code>account.setId(8);</code>
<code> </code><code>account.setMoney(21f);</code>
<code> </code><code>account.setUsername("hanchao2dd1");</code>
<code> </code><code>account.setPassword("1234562dsds2");</code>
<code> </code><code>accountDao.update(account);*/</code>
<code> </code><code>//删</code>
<code>/* AccountDao accountDao = new AccountDao();</code>
<code> </code><code>accountDao.delete(2);*/</code>
<code> </code><code>//查询</code>
<code> </code><code>Account account = accountDao.findById(8);</code>
<code> </code><code>if (account != null) {</code>
<code> </code><code>System.out.println("id:" + account.getId() + ",name:" + account.getUsername());</code>
<code> </code><code>} else {</code>
<code> </code><code>System.out.println("not exist!");</code>
<code> </code><code>}*/</code>
<code> </code><code>AccountDao accountDao = </code><code>new</code> <code>AccountDao();</code>
<code> </code><code>List<Account> list = accountDao.findAll();</code>
<code> </code><code>for</code> <code>(</code><code>int</code> <code>i = </code><code>0</code><code>; i < list.size(); i++) {</code>
<code> </code><code>System.out.println(</code><code>"id:"</code> <code>+ list.get(i).getId() + </code><code>" ,name:"</code> <code>+ list.get(i).getUsername());</code>
这样,我们的DBhelp类就是一个彻底的工具类了,虽然不够优化,但是,可以实现基本的工具类的功能了!
本文转自韩立伟 51CTO博客,原文链接:http://blog.51cto.com/hanchaohan/1701978,如需转载请自行联系原作者