三层架构:
表示层:基于web的JSP,Servlet等
业务逻辑层:Spring等
数据访问层:JDBC Hibernate
jdbc从数据库中得到的student表的数据业务逻辑层是不能够直接使用的。
我们需要一个实体类Student来解析数据
public class Student {
private String Sno;
private String Sname;
private String Ssex;
private int Sage;
private String Sdept;
public String getSno() {
return Sno;
}
public void setSno(String sno) {
Sno = sno;
}
public String getSname() {
return Sname;
}
public void setSname(String sname) {
Sname = sname;
}
public String getSsex() {
return Ssex;
}
public void setSsex(String ssex) {
Ssex = ssex;
}
public int getSage() {
return Sage;
}
public void setSage(int sage) {
Sage = sage;
}
public String getSdept() {
return Sdept;
}
public void setSdept(String sdept) {
Sdept = sdept;
}
}
我们对于这个实体类(解析的数据的操作我们单独定义类,而且采用实现接口的方式)
接口:
public interface StudentDao {
public void addStudent(Student student); //增
public Student findStudent(String name); //查
public void update(Student student); //改
public void delete(Student student); //删
}
接口实现:
public class StudentDaoImpl implements StudentDao {
}
增加的实现(核心代码):
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try{
conn = JdbcUtils.getConnection();
String sql = "insert into student(Sno,Sname,Ssex,Sage,Sdept) values(?,?,?,?,?)";
ps = conn.prepareStatement(sql);
ps.setString(1, student.getSno());
ps.setString(2, student.getSname());
ps.setString(3, student.getSsex());
ps.setInt(4, student.getSage());
ps.setString(5, student.getSdept());
ps.executeUpdate();
}
根据传入的学生实体类对象,通过get方法一一获取到属性值传入insert语句,执行。
更新的代码:
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try{
conn = JdbcUtils.getConnection();
String sql = "update student set Ssex=?,Sage=? where Sno=?";
ps = conn.prepareStatement(sql);
ps.setString(1, student.getSsex());
ps.setInt(2, student.getSage());
ps.setString(3,student.getSno());
ps.executeUpdate();
}
因为主键是不变的,所以根据主键来作为where的条件表达式,根据传入的参数(实体类),来get到各个属性值并设置到update语句。
查询的代码:
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
Student student = null;
try{
conn = JdbcUtils.getConnection();
String sql = "select Sno,Sname,Ssex,Sage,Sdept from student where Sname = ?";
ps = conn.prepareStatement(sql);
ps.setString(1, name);
rs = ps.executeQuery();
while(rs.next())
{
student.setSno(rs.getString("Sno"));
student.setSname(rs.getString("Sname"));
student.setSsex(rs.getString("Ssex"));
student.setSage(rs.getInt("Sage"));
student.setSdept(rs.getString("Sdept"));
}
这里传入的参数是名字(一个字符串)传入这个名字作为select语句where Sname的条件去匹配查询
再根据返回到的查询结果去设置一个局部的student对象的各个属性,并返回这个对象。
删除的代码:
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try{
conn = JdbcUtils.getConnection();
st = conn.createStatement();
String sql = "delete from student where Sno="+student.getSno();
st.executeUpdate(sql);
}
根据传入的学生对象get方法获取到属性,作为删除条件传入delete语句,执行删除操作
小结:构造实体类(类属性和列属性对应)
构造操作的方法,操作其实不变,但是会多出传入传出student属性值的操作。(根据逻辑来操作就可以)