/*
开发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 ? "执行成功" : "执行没有影响数据表");
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现