在封装SQL语句之前,我们得知道什么是DAO封装与实体类以及JDBC工具类的封装与连接数据库的具体流程。
封装SQL语句的好处:
封装SQL语句后就可以导包,给其他的工程使用,大大降低开发的强度,减少代码的冗余。如何导包给其他工程使用请看 IDEA的JAR包生成
一、DAO封装
1、介绍
1)DAO( DataBase Access Object ):数据库访问对象
2)作用:数据库访问对象在开发时提供针对某张表的操作细节【增删改查】
3)优点:
优点1,在管理系统开发时,通过数据库访问对象可以避免反复的 SQL 命令书写
优点2,在管理系统开发时,通过数据库访问对象可以避免反复的 JDBC 开发步骤书写
(4)DAO类:提供数据库访问对象的类
2、DAO类开发规则
1)一个DAO类封装的是一张表操作细节
2)DAO类命名规则:表名 + Dao。比如封装 emp 表操作细节:EmpDao;封装Dept表操作细
3.DAO类所在包命名规则:公司网站域名.dao , 比如 com.bjpowernode.dao
二、实体类
1、一个实体类用于描述一张表结构
2、实体类的类名应该与关联的表名保持一致,但是可以忽略大小写
DEPT -----------> public class Dept{ }
3、实体类的属性应该与关联的表文件字段保持一致
4、实体类的一个实例对象用于在内存中存储对应的表文件中一个数据行
Dept:
JVM内存:
三、封装SQL语句
1、在数据库中建表
1)对表内容的设计
2)命名为 “ 管理员信息表 ”,表中内容如下表所示:
2、实体类的封装
public class Manager{
private Integer ManagerNo;
private String ManagerName;
private String managerPw;
//带参构造
public Manager(Integer mangerNo, String managerName, String managerPw) {
this.managerNo = mangerNo;
this.managerName = managerName;
this.managerPw = managerPw;
}
//无参构造
public Manager() {
}
//setter and getter方法
public Integer getMangerNo() {
return managerNo;
}
public void setMangerNo(Integer mangerNo) {
this.managerNo = mangerNo;
}
public String getManagerName() {
return managerName;
}
public void setManagerName(String managerName) {
this.managerName = managerName;
}
public String getManagerPw() {
return managerPw;
}
public void setManagerPw(String managerPw) {
this.managerPw = managerPw;
}
3、DAO的封装
以下代码都是写在一个程序中,这里为了方便阅读理解分别都一个一个拆开来写。
1)添加数据行
public class ManagerDao {
JDBCUtil util = new JDBCUtil();
public int add(String managerNo,String managerName,String managerPw){
String sql = “insert into 管理员信息表(管理员编号,管理员姓名,管理员密码) values(?,?,?)”;
int result = 0;
try{
PreparedStatrment ps = util.creatStatement();
ps.setInt(1,Integer.valueOf(managerNo));
ps.setString(2,managerName);
ps.setString(3,managerPw);
result = ps.executeUpdate();
} catch (SQLException e){
e.printStackTrace();
} finally {
util.close();
}
return result;
}
2)删除数据行
public class ManagerDao {
JDBCUtil util = new JDBCUtil();
public int delete(String managerNo){
String sql = “delete from 管理员信息表 where 管理员编号 = ?”;
int result = 0;
try{
PreparedStatement ps = util.creatStatement();
ps.setInt(1,Integer.valueOf(managerNo));
result = ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
util.close;
}
return result;
}
}
3)更新数据行
public class ManagerDao {
JDBCUtil util = new JDBCUtil();
public int update(String managerNo,String managerName,String managerPw){
String sql = "update 管理员信息表 set 管理员姓名=?,管理员密码=? where 管理员编号=?";
int result = 0;
try{
PreparedStatement ps = util.creatStatement();
ps.setString(1,managerName);
ps.setString(2,managerPw);
ps.setInt(3,Integer.valueOf(mangagerNo));
result = ps.executeUpdate();
}atch (SQLException e) {
e.printStackTrace();
} finally {
util.close();
}
return result;
}
4)查询数据行
public class ManagerDao {
JDBCUtil util = new JDBCUtil();
public List findAll(){
String sql = "select * from 管理员信息表";
ResultSet rs = null;
//创建List集合
List list = new ArrayList();
try{
PrepatedStatement ps = util.creatStatement();
rs = ps.executeQuery();
while(rs.next()){
int managerNo = rs.getInt("管理员编号");
String managerName = rs.getString("管理员姓名");
String managerPw = rs.getString("管理员密码");
//创建manager实体类对象,并把以上参数传入到实体类中
Manager manager = new Manager(managerNo,managerName,managerPw);
//每获得一行数据,就把这一行内容放进list集合
list.add(manager);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
util.close(rs);
}
//list放入的是表中所有数据,因此返回list集合
return list;
}
4、测试
1)查询语句
2)添加语句
3)更新语句
4)删除语句
5)附带模块创建目录