BasicDAO

/*
开发BasicDAO 是其他DAO 的父类
*/
public class BasicDAO <T> { //使用泛型指定具体类型

private QueryRunner qr = new QueryRunner();
//开发通用的dml 方法 针对任意的表
public int update(String sql, Object... parameters){

Connection connection = null;

try {
connection = JDBCUtilsByDruid.getConnection();
int update = qr.update(connection, sql, parameters);
return update;
} catch (Exception e) {
throw new RuntimeException(e); //将编译异常->运行异常, 抛出
} finally {
JDBCUtilsByDruid.closeConnection(null,null,connection);
}
}

//返回多个对象(即查询的结果是多行的), 针对任意表
//第二个参数 是传入一个类的Class对象 比如 Actor.class(重点), 第三个参数是传入 ? 的具体值
//根据Actor.class 返回对应 的 ArrayList集合
public List<T> queryMultiply(String sql, Class<T> clazz,Object... parameters) {
Connection connection = null;

try {
connection = JDBCUtilsByDruid.getConnection();
List<T> list = qr.query(connection, sql, new BeanListHandler<T>(clazz), parameters);
return list;
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
JDBCUtilsByDruid.closeConnection(null, null, connection);
}
}

//查询单行单列结果的通用方法
public T querySingle(String sql, Class<T> clazz,Object... parameters){
Connection connection = null;
try {
connection = JDBCUtilsByDruid.getConnection();
return qr.query(connection, sql, new BeanHandler<T>(clazz), parameters);
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
JDBCUtilsByDruid.closeConnection(null, null, connection);
}
}


//查询单行单列的方法, 即返回单值的方法
public Object queryScalar(String sql, Object... parameters){
Connection connection = null;
try {
connection = JDBCUtilsByDruid.getConnection();
return qr.query(connection, sql, new ScalarHandler(), parameters);
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
JDBCUtilsByDruid.closeConnection(null, null, connection);
}
}
}


public class TestDAO {
@Test
//测试ActorDAO 对actor表crud操作
public void testActorDAO(){
ActorDAO actorDAO = new ActorDAO();
//1. 测试查询语句
List<Actor> actors = actorDAO.queryMultiply("select * from actor where id >= ?", Actor.class, 2);
System.out.println("===查询结果===");
for (Actor actor : actors){
System.out.println(actor);
}

//2.查询单行记录
Actor actor = actorDAO.querySingle("select * from actor where id = ?", Actor.class, 5);
System.out.println("===查询结果===");
System.out.println(actor);

//3.查询单行单列
Object o = actorDAO.queryScalar("select name from actor where id = ?", 5);
System.out.println("===查询单行单列值===");
System.out.println(o);

System.out.println("===========");
//4. dml操作 insert, update, delete
int update = actorDAO.update("CREATE TABLE stu(id int primary key auto_increment,name varchar(20),num varchar(20))", null);
System.out.println(update > 0 ? "执行成功" : "执行没有影响数据表");
}
}

posted on 2022-04-20 22:51  我要当程序源  阅读(99)  评论(0编辑  收藏  举报

导航