0
点赞
收藏
分享

微信扫一扫

【JAVA高级】——初识JDBC中DAO数据访问对象


✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。


本文目录

​​💖 创建表teacher​​

​​💖 封装实体类Teacher​​

​​💖 编写TeacherDaoImpl类​​

​​💖 测试​​

​​✨ 测试增加数据​​

​​✨ 测试删除数据​​

​​✨ 测试修改数据​​

​​✨ 测试查询单个​​

​​✨ 测试查询所有​​

​​💖投票传送门(欢迎小伙伴们投票) ​​

【JAVA高级】——初识JDBC中DAO数据访问对象_sql

(1)DAO(Data Access Object) ,数据访问对象,是一个数据访问接口,数据访问:顾名思义就是与数据库打交道。夹在业务逻辑与数据库资源中间。其作用就是为了实现功能的模块化,更有利于代码的维护和升级。

(2)之前代码中,业务逻辑代码和对数据库的访问操作代码全部写在一个类中,比较混乱,使用DAO实现业务逻辑与数据库访问相分离。

  • 对同一张表的所有操作(增删改查,定义成方法)封装在XxxDaoImpl类中。Xxx表示实体类名
  • 根据增删改查的不同功能实现具体的方法(insert、update、delete、select、selectAll)。

【JAVA高级】——初识JDBC中DAO数据访问对象_服务器_02

💖 创建表teacher

1、创建一张教师表teacher,表的字段如下:

         tid,教师编号,主键、自动增长。

         name,教师姓名,字符串类型、非空。

         age,年龄,int类型、非空。

         bornDate,Date类型

         email,邮箱,字符串类型,非空

         address,住址,字符串类型,非空

CREATE TABLE IF NOT EXISTS `teacher`(
`tid` INT PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(10) NOT NULL,
`age` INT NOT NULL,
`bornDate` DATE,
`email` VARCHAR(30) NOT NULL,
`address` VARCHAR(30) NOT NULL
);

2、向teacher表中插入两条数据:

INSERT INTO `teacher` VALUES(1001,'zhangsan',29,'1993-11-26','1319866976@qq.com','安徽合肥蜀山区长江西路132号');
INSERT INTO `teacher` VALUES(1002,'lisi',31,'1991-9-16','147589641@qq.com','安徽合肥新站区环城西路12号');

💖 封装实体类Teacher

创建entity实体类Teacher类,封装属性,添加无参构造方法和有参构造方法,添加getXxx()/setXxx()方法

package com.cxyzxc.examples02;

import java.util.Date;

/**
* entity实体类Teacher
*
* @author 乐趣国学
*
*/
public class Teacher {
/** 教师编号 */
private int tid;
/** 姓名 */
private String name;
/** 年龄 */
private int age;
/** 出生日期 */
private Date bornDate;
/** 邮箱 */
private String email;
/** 住址 */
private String address;

// 无参构造方法
public Teacher() {
super();
}

// 有参构造方法
public Teacher(String name, int age, Date bornDate, String email,
String address) {
super();
this.name = name;
this.age = age;
this.bornDate = bornDate;
this.email = email;
this.address = address;
}

public Teacher(int tid, String name, int age, Date bornDate, String email,
String address) {
super();
this.tid = tid;
this.name = name;
this.age = age;
this.bornDate = bornDate;
this.email = email;
this.address = address;
}

// getXxx()/setXxx()方法
public int getTid() {
return tid;
}

public void setTid(int tid) {
this.tid = tid;
}

public String getName() {
return name;
}

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

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public Date getBornDate() {
return bornDate;
}

public void setBornDate(Date bornDate) {
this.bornDate = bornDate;
}

public String getEmail() {
return email;
}

public void setEmail(String email) {
this.email = email;
}

public String getAddress() {
return address;
}

public void setAddress(String address) {
this.address = address;
}

// 重写Object类中的toString()方法
@Override
public String toString() {
return "tid=" + tid + ", name=" + name + ", age=" + age + ", bornDate="
+ bornDate + ", email=" + email + ", address=" + address;
}
}

💖 编写TeacherDaoImpl类

编写TeacherDaoImpl类,提供增删改查方法,使用JDBC完成开发功能。

     (1)该类中提供对teacher表进行增、删、改、查单个、查所有5个方法。
     
     (2)该类中的代码只做数据库访问操作,不做任何业务逻辑操作。
     
     (3)该类只对数据库一张表进行操作,从而实现复用

包的结构如下:

【JAVA高级】——初识JDBC中DAO数据访问对象_服务器_03

package com.cxyzxc.examples04;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
*
* @author 乐趣国学
*
*/
public class TeacherDaoImpl {

// 新增:向teacher表中插入一条数据(一条数据对应一个Teacher对象),插入成功,返回一个受影响行数值(int类型)
public int insert(Teacher teacher) {

Connection connection = null;
PreparedStatement preparedStatement = null;
String sql = "insert into `teacher`(name,age,bornDate,email,address) values(?,?,?,?,?);";

connection = DBUtils.getConnection();

try {
preparedStatement = connection.prepareStatement(sql);
// 绑定参数,赋值
preparedStatement.setString(1, teacher.getName());
preparedStatement.setInt(2, teacher.getAge());
//将java.util.Date类型日期时间转换为java.sql.Date类型,然后插入到数据库中
preparedStatement.setDate(3, DateUtils.utilDateToSqlDate(teacher.getBornDate()));
preparedStatement.setString(4, teacher.getEmail());
preparedStatement.setString(5, teacher.getAddress());
// 执行SQL语句,返回受影响的行数值
int result = preparedStatement.executeUpdate();
// 将结果返回给调用者
return result;
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtils.closeAll(connection, preparedStatement, null);
}
return 0;
}

// 删除:根据教师tid删除一条数据,删除成功,返回一个受影响行数值(int类型)
public int delete(int tid) {

Connection connection = null;
PreparedStatement preparedStatement = null;
String sql = "delete from teacher where tid = ?;";

connection = DBUtils.getConnection();

try {
preparedStatement = connection.prepareStatement(sql);
// 绑定参数,赋值
preparedStatement.setInt(1, tid);
// 执行SQL语句,返回受影响的行数值
int result = preparedStatement.executeUpdate();
// 将结果返回给调用者
return result;
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtils.closeAll(connection, preparedStatement, null);
}
return 0;
}

// 修改:修改teacher表中的数据,可能对任意的一个字段进行修改,所以方法中直接传递一个对象进行修改,修改成功,返回一个受影响行数值(int类型)
public int update(Teacher teacher) {

Connection connection = null;
PreparedStatement preparedStatement = null;
String sql = "update teacher set name = ?,age = ?,bornDate = ?,email = ?,address = ? where tid = ?;";

connection = DBUtils.getConnection();

try {
preparedStatement = connection.prepareStatement(sql);
// 绑定参数,赋值
preparedStatement.setString(1, teacher.getName());
preparedStatement.setInt(2, teacher.getAge());
//将java.util.Date类型日期时间转换为java.sql.Date类型,然后插入到数据库中
preparedStatement.setDate(3, DateUtils.utilDateToSqlDate(teacher.getBornDate()));
preparedStatement.setString(4, teacher.getEmail());
preparedStatement.setString(5, teacher.getAddress());
preparedStatement.setInt(6, teacher.getTid());
// 执行SQL语句,返回受影响的行数值
int result = preparedStatement.executeUpdate();
// 将结果返回给调用者
return result;
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtils.closeAll(connection, preparedStatement, null);
}
return 0;
}

// 查询单个:根据教师tid查询一条数据,查询成功返回一个结果集(ResultSet类型),从结果集中取出元素,封装成一个Teacher对象,将该对象返回
public Teacher select(int tid) {

Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
Teacher teacher = null;
String sql = "select * from teacher where tid = ?;";

connection = DBUtils.getConnection();

try {
preparedStatement = connection.prepareStatement(sql);
// 绑定参数,赋值
preparedStatement.setInt(1, tid);
resultSet = preparedStatement.executeQuery();
// 处理结果集,因为是查询单个数据,所以不需要循环遍历获取数据,集合中有数据就取出来
if (resultSet.next()) {
teacher = new Teacher();
int teacherid = resultSet.getInt("tid");
String name = resultSet.getString("name");
int age = resultSet.getInt("age");
Date bornDate = resultSet.getDate("bornDate");
String email = resultSet.getString("email");
String address = resultSet.getString("address");
// 将获取的赋值给teacher对象
teacher.setTid(teacherid);
teacher.setName(name);
teacher.setAge(age);
teacher.setBornDate(bornDate);
teacher.setEmail(email);
teacher.setAddress(address);
}
return teacher;
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtils.closeAll(connection, preparedStatement, null);
}
return null;
}

// 查询所有:将teacher表中的所有数据全部查询出来,查询成功返回一个结果集(ResultSet类型),从结果集中取出元素,封装成多个Teacher对象,将多个对象存储在集合中,返回这个集合
public List<Teacher> selectAll() {

Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
Teacher teacher = null;
List<Teacher> teacherList = new ArrayList<Teacher>();
String sql = "select * from teacher;";

connection = DBUtils.getConnection();

try {
preparedStatement = connection.prepareStatement(sql);
resultSet = preparedStatement.executeQuery();
// 查询出来多个结果,存在resultSet结果集中,遍历该结果集
while (resultSet.next()) {
int teacherid = resultSet.getInt("tid");
String name = resultSet.getString("name");
int age = resultSet.getInt("age");
Date bornDate = resultSet.getDate("bornDate");
String email = resultSet.getString("email");
String address = resultSet.getString("address");
teacher = new Teacher(teacherid, name, age, bornDate, email,
address);
teacherList.add(teacher);
}
return teacherList;
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtils.closeAll(connection, preparedStatement, null);
}
return null;
}
}

💖 测试

✨ 测试增加数据

package com.cxyzxc.examples04;

public class TestTeacherInsert {

public static void main(String[] args) {
// 创建TteacherDaoImpl类对象
TeacherDaoImpl teacherDaoImpl = new TeacherDaoImpl();
//创建字符串类型的日期
String strDate = "1992-03-22";

// 创建Teacher类对象
//DateUtils.strDateToUtilDate(strDate):将字符串类型的日期时间转换为java.util.Date类型
Teacher teacher = new Teacher("王五", 32, DateUtils.strDateToUtilDate(strDate), "1319866123@qq.com","安徽合肥蜀山区淠河路200号");
// 将teacher对象插入到数据库teacher表中
int result = teacherDaoImpl.insert(teacher);
if (result == 1) {
System.out.println("数据插入成功");
} else {
System.out.println("数据插入失败");
}
}
}

✨ 测试删除数据

package com.cxyzxc.examples04;

public class TestTeacherDelete {

public static void main(String[] args) {
// 创建TteacherDaoImpl类对象
TeacherDaoImpl teacherDaoImpl = new TeacherDaoImpl();

int result = teacherDaoImpl.delete(1003);
if (result == 1) {
System.out.println("数据删除成功");
} else {
System.out.println("数据删除失败");
}
}
}

✨ 测试修改数据

package com.cxyzxc.examples04;

public class TestTeacherUpdate {

public static void main(String[] args) {
// 创建TteacherDaoImpl类对象
TeacherDaoImpl teacherDaoImpl = new TeacherDaoImpl();
//创建字符串类型日期时间
String strDate = "2000-03-22";

// 创建Teacher类对象
//DateUtils.strDateToUtilDate(strDate):将字符串类型的日期时间转换为java.util.Date类型
Teacher teacher = new Teacher(1002,"李四", 22, DateUtils.strDateToUtilDate(strDate), "1319869999@qq.com","安徽合肥蜀山区淠河路19号");
// 将teacher对象插入到数据库teacher表中
int result = teacherDaoImpl.update(teacher);
if (result == 1) {
System.out.println("数据修改成功");
} else {
System.out.println("数据修改败");
}
}
}

✨ 测试查询单个

package com.cxyzxc.examples04;

public class TeacherSelectOne {

public static void main(String[] args) {
// 创建TteacherDaoImpl类对象
TeacherDaoImpl teacherDaoImpl = new TeacherDaoImpl();

Teacher teacher = teacherDaoImpl.select(1002);
if (teacher != null) {
System.out.println(teacher);
} else {
System.out.println("没有这个老师");
}
}
}

✨ 测试查询所有

package com.cxyzxc.examples04;

import java.util.List;

public class TeacherSelectAll {

public static void main(String[] args) {
// 创建TteacherDaoImpl类对象
TeacherDaoImpl teacherDaoImpl = new TeacherDaoImpl();

List<Teacher> teacherList = teacherDaoImpl.selectAll();
// 遍历teacherList集合
for (Teacher teacher : teacherList) {
System.out.println(teacher);
}
}
}

举报

相关推荐

0 条评论