栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java BasicDAO的详解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java BasicDAO的详解

一、BasicDAO的介绍

二、BasicDAO的示意图

三、完成BasicDAO的简单实例

1、创建BasicDAO类

//开发BasicDAO,是其他DAO的父类
public class BasicDAO {//泛型指定具体的类型
    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 (SQLException e) {
            //将编译异常转换为运行异常,抛出
            throw new RuntimeException(e);
        } finally {
            JDBCUtilsByDruid.close(null, null, connection);
        }
    }

    //返回多个对象(即查询的结果是多行),针对任意表

    
    public List queryMulti(String sql, Class clazz, Object... parameters) {
        Connection connection = null;
        try {
            connection = JDBCUtilsByDruid.getConnection();
            return qr.query(connection, sql, new BeanListHandler(clazz), parameters);
        } catch (SQLException e) {
            //将编译异常转换为运行异常,抛出
            throw new RuntimeException(e);
        } finally {
            JDBCUtilsByDruid.close(null, null, connection);
        }
    }

    //查询单行结果的通用方法
    public T querySingle(String sql, Class clazz, Object... parameters) {
        Connection connection = null;
        try {
            connection = JDBCUtilsByDruid.getConnection();
            return qr.query(connection, sql, new BeanHandler(clazz), parameters);
        } catch (SQLException e) {
            //将编译异常转换为运行异常,抛出
            throw new RuntimeException(e);
        } finally {
            JDBCUtilsByDruid.close(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 (SQLException e) {
            //将编译异常转换为运行异常,抛出
            throw new RuntimeException(e);
        } finally {
            JDBCUtilsByDruid.close(null, null, connection);
        }
    }
}

2、创建ActorDAO类继承BasicDAO类

public class ActorDAO extends BasicDAO{
    //1.就有BasicDao的方法
    //2.根据业务需求,可以编写特有的方法
}

3、创建domain,Actor类

//Actor对象 和 actor表的记录对应
public class Actor {//JavaBean ,POJO,Domain对象
    private Integer id;
    private String name;
    private String sex;
    private Date borndate;
    private String phone;

    public Actor() {//一定要给一个无参构造器[反射需要]
    }

    public Actor(Integer id, String name, String sex, Date borndate, String phone) {
        this.id = id;
        this.name = name;
        this.sex = sex;
        this.borndate = borndate;
        this.phone = phone;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Date getBorndate() {
        return borndate;
    }

    public void setBorndate(Date borndate) {
        this.borndate = borndate;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    @Override
    public String toString() {
        return "Actor{" +
                "id=" + id +
                ", name='" + name + ''' +
                ", sex='" + sex + ''' +
                ", borndate=" + borndate +
                ", phone='" + phone + ''' +
                '}';
    }
}

4、创建测试类TestDAO

public class TestDAO {
    //测试ActorDAO 对Actor表的crud操作
    @Test
    public void testActorDAO() {
        ActorDAO actorDAO = new ActorDAO();
        //1.查询多行记录
        List actors = actorDAO.queryMulti("SELECT * FROM actor WHERe id >= ?", Actor.class, 2);
        System.out.println("===查询结果===");
        for (Actor actor : actors) {
            System.out.println(actor);
        }


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

        //查询单行单例
        Object o = actorDAO.queryScalar("SELECt name FROM actor WHERe id = ?", 2);
        System.out.println("===查询单行单列===");
        System.out.println(o);

        //DML操作 (insert,delete,update)
//        int affectedRows = actorDAO.update("UPDATE actor SET NAME=? WHERe id = ?", "林青霞", 2);
//        int affectedRows = actorDAO.update("INSERT INTO actor VALUES(NULL,?,?,?,?)", "许三多", "男","1999-01-01","123456");
        int affectedRows = actorDAO.update("DELETE FROM actor WHERe id = ?", "5");
        System.out.println(affectedRows > 0 ? "执行成功" : "执行没有影响表");

    }
}

输出结果如下

===查询结果===
Actor{id=2, name='林青霞', sex='男', borndate=1980-01-03 08:00:00.0, phone='123456789'}
Actor{id=3, name='张三丰', sex='男', borndate=1999-01-10 08:00:00.0, phone='1234567890'}
Actor{id=5, name='许三多', sex='男', borndate=1999-01-01 08:00:00.0, phone='123456'}
===查询单行结果===
Actor{id=2, name='林青霞', sex='男', borndate=1980-01-03 08:00:00.0, phone='123456789'}
===查询单行单列===
林青霞
执行成功

JDBCUtilsByDruid工具类的封装,看这篇文章传送门

Java 数据库连接池C3P0,德鲁伊(Druid)的详解 里面有对JDBCUtilsByDruid工具类的封装。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/865442.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号