本篇供个人学习使用,有问题欢迎讨论
封装SQL语句
在封装SQL语句之前,我们得知道什么是DAO封装与实体类以及JDBC工具类的封装与连接数据库的具体流程。
关于JDBC工具类的封装可以查看我的另一篇博文 JDBC工具类的封装
想了解具体的连接数据库的具体流程可以看 简单了解java连接数据库的操作步骤
封装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表操作细节:DeptDao
(3)DAO类所在包命名规则:公司网站域名.dao , 比如 com.bjpowernode.dao
二、实体类
1、一个实体类用于描述一张表结构
2、实体类的类名应该与关联的表名保持一致,但是可以忽略大小写
DEPT -----------> public class Dept{ }
3、实体类的属性应该与关联的表文件字段保持一致
Dept:
DEPTNO | INT |
---|---|
DNAME | VARCHAR(20) |
LOC | VARCHAR (20) |
public class Dept{private Integer deptNo;private String dname;private String 1oc;
}
4、实体类的一个实例对象用于在内存中存储对应的表文件中一个数据行
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");
三、封装SQL语句
1、在数据库中建表
(1)对表内容的设计
列名 | 数据类型 | 允许Null值 |
---|---|---|
管理员编号 | int | 否 |
管理员姓名 | nvarchar(10) | 否 |
管理员密码 | nvarchar(20) | 否 |
(2)命名为 “ 管理员信息表 ”,表中内容如下表所示:
管理员编号 | 管理员姓名 | 管理员密码 |
---|---|---|
1 | 王五 | 123456 |
3 | qwe | 123 |
5 | qin | 456 |
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)查询语句
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());}}
}
(2)添加语句
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());}}
}
(3)更新语句
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());}}
}
(4)删除语句
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());}}
}