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(