JDBC三层架构

1.Dao层抽取

Dao层:数据访问层,用于做与数据库交互的事情
        如果不将dao层抽取,例如登录功能,所有代码都放到测试类中,使得测试类代码特别臃肿
抽取后,代码分离设计:
        main方法中做业务逻辑操作; dao层只做jdbc操作

==============案例: Person数据表的增删改查操作=============
/*
#### 创建数据表
        > - 创建一张表 Person,有以下列:
        >   - id:int,主键,自动增长
        >   - name:varchar(20) 非空
        >   - age:int 非空
        >   - bornDate:Date
        >   - email:字符串
        >   - address:字符串
*/

//在测试类中,进行业务逻辑操作
//操作步骤:
//1.创建数据表
//2.新建实体类
//3.编写工具类
//4.将jdbc抽象到dao层
//5.在测试类中编写业务逻辑

------------创建实体类------------
//实体类中的属性要与表字段一致--ORM
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Person {
    private int id;
    private String name;
    private  int age;
    private Date bornDate;
    private  String email;
    private  String address;
}



------------创建测试类------------
public class Test1 {
    public static void main(String[] args) {
        System.out.println("请输入你要进行的操作:1.添加 2.修改 3 删除  4 查所有  5.根据id查");
        PersonDaoImpl personDao = new PersonDaoImpl();
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        switch (num){
            case 1:  //添加传对象,一般主键自增长,id不用管
                int result = personDao.insert(new Person(0,"ls",20,new Date(),"[email protected]","湖北"));
                System.out.println("插入:"+result);
                break;
            case 2:  //修改传对象,要有修改的主键id,才能修改
                result = personDao.update(new Person(2,"ww",44,new Date(),"[email protected]","江西"));
                System.out.println("修改:"+result);
                break;
            case 3:
                result = personDao.delete(1);  //删除id
                System.out.println("删除:"+result);
                break;
            case 4:   //查询所有,返回List集合
                List<Person> list = personDao.selectAll();
                System.out.println("查所有:"+list);
                break;
            case 5:  //查询单个,往往根据id查,返回实体对象
                Person person = personDao.selectById(2);
                System.out.println("查对象:"+person);
                break;
            default:
                System.out.println("您的输入有误~");
                break;
        }
    }
}


------------创建dao层操作------------
//dao层--数据访问层(用于做jdbc操作)
public class PersonDaoImpl {

    public int insert(Person person) {
        Connection conn = null;
        PreparedStatement prst = null;
        try {
            conn = DBUtils.getConnection();
            prst = conn.prepareStatement("insert into person(name,age,bornDate,email,address) values(?,?,?,?,?)");
            prst.setString(1,person.getName());
            prst.setInt(2,person.getAge());
            //sql包下的new Date(参数)可以long类型的毫秒值参数
            prst.setDate(3,new Date(person.getBornDate().getTime()));
            prst.setString(4,person.getEmail());
            prst.setString(5,person.getAddress());
            return prst.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DBUtils.closeAll(prst,conn);
        }
        return 0;
    }

    public int update(Person person) {
        Connection conn = null;
        PreparedStatement prst = null;
        try {
            conn = DBUtils.getConnection();
            prst = conn.prepareStatement("update person set name=?,age=? where id=?");
            prst.setString(1,person.getName(
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值