博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JDBC(14)—对DAO进行改进修改
阅读量:5115 次
发布时间:2019-06-13

本文共 5922 字,大约阅读时间需要 19 分钟。

结构:

DAO2_7< T >(接口)—>DAOTestImpl< T >(实现类)—>CustomerDAO(继承的子类)—>CustomerDAOTest(继承的测试类)

代码:

  • 接口:
package JDBC;import java.sql.Connection;import java.sql.SQLException;import java.util.List;/** * 访问数据的接口 *其中定义了访问数据表的各种方法 *@param T:DAO处理的实体类的类型 *版本:2.0 * */public interface DAO2_7
{ /** * 1.功能:insert、update、delete * @param conn:链接数据库 * @param sql:SQL语句 * @param objects:占位符的可变参数 * @throws SQLException */ void update(Connection conn, String sql, Object ... objects ) throws SQLException; /** * 2.功能:返回一个T类型对象 * @param conn * @param sql * @param objects * @return * @throws SQLException */ T get(Connection conn, String sql, Object ...objects) throws SQLException; /** * 3.功能:返回一个T类型的对象的集合 * @param conn * @param sql * @param objects * @return * @throws SQLException */ List
getForList(Connection conn, String sql, Object ...objects) throws SQLException; /** * 4.返回具体的一个值,例如:总人数、平均数,某个人的名字。 * @param conn * @param sql * @param objects * @return * @throws SQLException */
E getForValue(Connection conn, String sql, Object ...objects) throws SQLException; /** * 5.批量处理的方法 * @param conn * @param sql * @param objects:填充占位符的Object[]类型的可变参数 * @throws SQLException */ void batch(Connection conn, String sql, Object[] ...objects) throws SQLException;}
  • 实现类
package JDBC;import java.sql.Connection;import java.sql.SQLException;import java.util.List;import org.apache.commons.dbutils.QueryRunner;import org.apache.commons.dbutils.handlers.BeanHandler;import org.apache.commons.dbutils.handlers.BeanListHandler;import org.apache.commons.dbutils.handlers.ScalarHandler;import 反射机制.ReflectionUtils;public class DAOTestImpl
implements DAO2_7
{ private QueryRunner queryRunner = null; private Class
type; //构造器 public DAOTestImpl(){ queryRunner = new QueryRunner(); type = ReflectionUtils.getSuperGenericType(getClass()); } //更新数据 @Override public void update(Connection conn, String sql, Object... objects) throws SQLException { queryRunner.update(conn, sql, objects); } //查询数据 @Override public T get(Connection conn, String sql, Object... objects) throws SQLException { return queryRunner.query(conn, sql, new BeanHandler<>(type), objects); } //获取多条记录 @Override public List
getForList(Connection conn, String sql, Object... objects) throws SQLException { return queryRunner.query(conn, sql, new BeanListHandler<>(type), objects); } //获取某一列值,或计算总数 @Override public
E getForValue(Connection conn, String sql, Object... objects) throws SQLException { return (E)queryRunner.query(conn, sql, new ScalarHandler(), objects); } //批量操作 @Override public void batch(Connection conn, String sql, Object[]... objects) throws SQLException { queryRunner.batch(conn, sql, objects); }}
  • 继承的子类
package JDBC;import JDBCTest.Customers;public class CustomerDAO extends DAOTestImpl
{
}
  • 继承子类的测试类
package JDBC;import java.sql.Connection;import java.sql.Date;import java.util.List;import org.junit.Test;import JDBCTest.Customers;import JDBCTest.TestTools;public class CustomerDAOTest extends CustomerDAO {
Connection conn = null; CustomerDAO customerDao = new CustomerDAO(); //构造器 public CustomerDAOTest() throws Exception{ conn = TestTools.getConnection(); } @Test public void testUpdate() { try { String sql = "INSERT INTO customers(id,name,age,birth,address) VALUES(?, ?, ?, ?, ?)"; customerDao.update(conn, sql, 1, "张力", "32", new Date(new java.util.Date().getTime()), "上海市" ); System.out.println("OK"); } catch (Exception e) { e.printStackTrace(); }finally{ TestTools.release(null, conn); } } @Test public void testGet() { try { String sql = "select id, name, age, birth from customers where id = ?"; Customers customer = customerDao.get(conn, sql, 15); System.out.println(customer); } catch (Exception e) { e.printStackTrace(); }finally{ TestTools.release(null, conn); } } @Test public void testGetForList() { try { String sql = "select id, name, age, birth from customers where id > ?"; List
customers = customerDao.getForList(conn, sql, 15); System.out.println(customers); } catch (Exception e) { e.printStackTrace(); }finally{ TestTools.release(null, conn); } } @Test public void testGetForValue() { try { String sql = "select count(id) from customers"; Object result = customerDao.getForValue(conn, sql, null); System.out.println(result); } catch (Exception e) { e.printStackTrace(); }finally{ TestTools.release(null, conn); } } @Test public void testBatch() { try { String sql = "INSERT INTO customers(name, age, birth, address) VALUES(?, ?, ?, ?)"; Object objects[][] = new Object[1000][4]; for(int i = 0; i < 1000; i++){ objects[i][0] = "name_"+i; objects[i][1] = "20"; objects[i][2] = (new Date(new java.util.Date().getTime())); objects[i][3] = "河南省"; } customerDao.batch(conn, sql, objects); System.out.println("OK"); } catch (Exception e) { e.printStackTrace(); }finally{ TestTools.release(null, conn); } }}

转载于:https://www.cnblogs.com/tengpengfei/p/10454008.html

你可能感兴趣的文章
Android 获取网络链接类型
查看>>
linux中启动与终止lnmp的脚本
查看>>
gdb中信号的处理[转]
查看>>
LeetCode【709. 转换成小写字母】
查看>>
如何在Access2007中使用日期类型查询数据
查看>>
Jzoj4757 树上摩托
查看>>
CF992E Nastya and King-Shamans(线段树二分+思维)
查看>>
第一个Java Web程序
查看>>
树状数组_一维
查看>>
如果没有按照正常的先装iis后装.net的顺序,可以使用此命令重新注册一下:
查看>>
linux install ftp server
查看>>
嵌入式软件设计第8次实验报告
查看>>
算法和数据结构(三)
查看>>
Ubuntu下的eclipse安装subclipse遇到没有javahl的问题...(2天解决了)
查看>>
alter database databasename set single_user with rollback IMMEDIATE 不成功问题
查看>>
Repeater + Resources 列表 [原创][分享]
查看>>
WCF揭秘——使用AJAX+WCF服务进行页面开发
查看>>
【题解】青蛙的约会
查看>>
IO流
查看>>
mybatis调用存储过程,获取返回的游标
查看>>