本篇供个人学习使用,有问题欢迎讨论
在封装SQL语句之前,我们得知道什么是DAO封装与实体类以及JDBC工具类的封装与连接数据库的具体流程。
关于JDBC工具类的封装可以查看我的另一篇博文 JDBC工具类的封装
想了解具体的连接数据库的具体流程可以看 简单了解java连接数据库的操作步骤
封装SQL语句后就可以导包,给其他的工程使用,大大降低开发的强度,减少代码的冗余。如何导包给其他工程使用请看 IDEA的JAR包生成
(1)DAO( DataBase Access Object ):数据库访问对象
(2)作用:数据库访问对象在开发时提供针对某张表的操作细节【增删改查】
(3)优点:
优点1,在管理系统开发时,通过数据库访问对象可以避免反复的 SQL 命令书写
优点2,在管理系统开发时,通过数据库访问对象可以避免反复的 JDBC 开发步骤书写
(4)DAO类:提供数据库访问对象的类
(1)一个DAO类封装的是一张表操作细节
(2)DAO类命名规则:表名 + Dao。比如封装 emp 表操作细节:EmpDao;封装Dept表操作细节:DeptDao
(3)DAO类所在包命名规则:公司网站域名.dao , 比如 com.bjpowernode.dao
DEPT -----------> public class Dept{ }
Dept:
DEPTNO | INT |
---|---|
DNAME | VARCHAR(20) |
LOC | VARCHAR (20) |
public class Dept{
private Integer deptNo;
private String dname;
private String 1oc;
}
Dept:
DeptNo | dname | loc |
---|---|---|
10 | Account | New York |
20 | sales | BeiJing |
JVM内存:
Dept dept1 = new Dept(10,"Account","New York");
Dept dept2 = new Dept(20,"Sales","BeiJing");
(1)对表内容的设计
列名 | 数据类型 | 允许Null值 |
---|---|---|
管理员编号 | int | 否 |
管理员姓名 | nvarchar(10) | 否 |
管理员密码 | nvarchar(20) | 否 |
(2)命名为 “ 管理员信息表 ”,表中内容如下表所示:
管理员编号 | 管理员姓名 | 管理员密码 |
---|---|---|
1 | 王五 | 123456 |
3 | qwe | 123 |
5 | qin | 456 |
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;
}
}
以下代码都是写在一个程序中,这里为了方便阅读理解分别都一个一个拆开来写。
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;
}
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;
}
}
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;
}
}
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;
}
}
public class Test02 {
public static void main(String[] args) {
//创建DAO对象
ManagerDao md = new ManagerDao();
//创建List集合,这里使用泛型表示只能使用Manager的类型
List<Manager> managerList = md.findAdd();
//使用foreach对管理员表中内容进行循环
for (Manager manager:managerList) {
System.out.println("管理员编号:" + manager.getMangerNo() + " 管理员姓名:" + manager.getManagerName() + " 管理员密码:" + manager.getManagerPw());
}
}
}
public class Test02 {
public static void main(String[] args) {
ManagerDao md = new ManagerDao();
//添加管理员信息
md.add("2333","heihei","123");
//查询管理员表中所有信息
List<Manager> managerList = md.findAdd();
for (Manager manager:managerList) {
System.out.println("管理员编号:" + manager.getMangerNo() + " 管理员姓名:" + manager.getManagerName() + " 管理员密码:" + manager.getManagerPw());
}
}
}
public class Test02 {
public static void main(String[] args) {
ManagerDao md = new ManagerDao();
//对编号为2333的管理员进行修改
md.update("2333","hetui","666");
//查询管理员表中所有信息
List<Manager> managerList = md.findAdd();
for (Manager manager:managerList) {
System.out.println("管理员编号:" + manager.getMangerNo() + " 管理员姓名:" + manager.getManagerName() + " 管理员密码:" + manager.getManagerPw());
}
}
}
public class Test02 {
public static void main(String[] args) {
ManagerDao md = new ManagerDao();
//删除编号为5的管理员所有信息
md.delete("5");
//查询管理员表中所有信息
List<Manager> managerList = md.findAdd();
for (Manager manager:managerList) {
System.out.println("管理员编号:" + manager.getMangerNo() + " 管理员姓名:" + manager.getManagerName() + " 管理员密码:" + manager.getManagerPw());
}
}
}