一對一關系
查詢所有學生信息,年級信息以年級名稱顯示
一、DAO層搭建:
1.實體類:
Student類:
package com.myschool.entity;
import java.io.Serializable;
import java.util.Date;
public class Student implements Serializable {
private static final long serialVersionUID = 6439763802252472361L;
//定義實體屬性
private int studentNo;
private String longinPwd;
private String studentName;
private int sex;
private grade grade;//把年級對象作為屬性
private String phone;
private String address;
private Date bornDate;
private String email;
private String identityCard;
//封裝
public int getStudentNo() {
return studentNo;
}
public void setStudentNo(int studentNo) {
this.studentNo = studentNo;
}
public String getLonginPwd() {
return longinPwd;
}
public void setLonginPwd(String longinPwd) {
this.longinPwd = longinPwd;
}
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
public grade getGrade() {
return grade;
}
public void setGrade(grade grades) {
this.grade = grades;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
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 getIdentityCard() {
return identityCard;
}
public void setIdentityCard(String identityCard) {
this.identityCard = identityCard;
}
//有參構造
public Student(int studentNo, String longinPwd, String studentName,
int sex, grade gradeID, String phone, String address, Date bornDate,
String email, String identityCard) {
this.studentNo = studentNo;
this.longinPwd = longinPwd;
this.studentName = studentName;
this.sex = sex;
this.gradeID = gradeID;
this.phone = phone;
this.address = address;
this.bornDate = bornDate;
this.email = email;
this.identityCard = identityCard;
}
//無參構造
public Student() {
}
Grade類:
package com.myschool.entity; public class grade { private int gradeid; private String gradeName; public int getGradeid() { return gradeid; } public void setGradeid(int gradeid) { this.gradeid = gradeid; } public String getGradeName() { return gradeName; } public void setGradeName(String gradeName) { this.gradeName = gradeName; } public grade(int gradeid, String gradeName) { super(); this.gradeid = gradeid; this.gradeName = gradeName; } public grade() { super(); } }
因為一個學生對應一個年級,但是學生表中不能涉及年級名稱,所以直接將年級對象封裝到學生屬性中
2.Daobase:數據庫連接訪問類
package com.myschool.dao; import java.beans.Statement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; public class baseDao { // 創建連接參數 private final static String DRIVER = "com.mysql.jdbc.Driver"; private final static String URL = "jdbc:mysql:///myschool"; private final static String USER_NAME = "root"; private final static String PASSWORD = "123"; Connection con = null; PreparedStatement prestatement = null; ResultSet rs = null; // 獲取連接 private Connection getConnection() { try { Class.forName(DRIVER); if (con == null) { con = DriverManager.getConnection(URL, USER_NAME, PASSWORD); } } catch (Exception e) { e.printStackTrace(); } return con; } // 增刪改 public int executeUpdate(String sql, Object... obj) throws Exception { // 獲取連接 getConnection(); // 獲取prepareStatement對象 prestatement = con.prepareStatement(sql); // 循環添加參數 for (int i = 1; i <= obj.length; i++) { prestatement.setObject(i, obj[i - 1]); } // 執行SQL語句 int count = prestatement.executeUpdate(); return count; } // 查 public ResultSet executeQuery(String sql, Object... obj) throws Exception { // 獲取連接 getConnection(); // 獲取prepareStatement對象 prestatement = con.prepareStatement(sql); // 循環添加參數 for (int i = 1; i <= obj.length; i++) { prestatement.setObject(i, obj[i - 1]); } // 執行SQL語句 rs = prestatement.executeQuery(); return rs; } //回收資源 public void closeResouse() throws Exception { if (rs!=null) { rs.close(); } if (prestatement!=null) { prestatement.close(); } if (con!=null) { con.close(); } } }
3.DAO接口:
package com.myschool.dao; import java.util.List; import com.myschool.entity.Student; public interface IStudentDao { /* * 查詢所有學生記錄,年級名稱 */ public List<Student> Search() throws Exception; }
4.DAO接口實現類:
package com.mychool.dao.impl; import java.sql.ResultSet; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; import com.myschool.dao.IStudentDao; import com.myschool.dao.baseDao; import com.myschool.entity.Student; import com.myschool.entity.grade; public class IStudentDaoImpl extends baseDao implements IStudentDao { @Override public List<Student> Search() throws Exception { //創建student對象泛型集合 List<Student> stus=new ArrayList<Student>(); String sql="Select studentName,GradeName from Student,grade where Grade.gradeid=Student.gradeid ";
//定義resultSet對象接收basedao的查詢方法查出來的數據 ResultSet rSet=executeQuery(sql); if (rSet!=null) { while (rSet.next()) { Student stu=new Student(); grade grade=new grade();//創建年級對象 // stu.setAddress(rSet.getString("address")); // stu.setEmail(rSet.getString("email")); // stu.setIdentityCard(rSet.getString("identityCard")); // stu.setLonginPwd(rSet.getString("longinPwd")); // stu.setPhone(rSet.getString("phone")); // stu.setSex(rSet.getInt("sex")); grade.setGradeName(rSet.getString("gradeName"));//給年級對象賦值 stu.setStudentName(rSet.getString("studentName"));//給學生對象賦值 stu.setGradeID(grade); // stu.setStudentNo(rSet.getInt("StudentNo")); // SimpleDateFormat sdFormat=new SimpleDateFormat("yyyy-MM-dd"); // stu.setBornDate(sdFormat.parse(rSet.getString("bornDate"))); stus.add(stu);//將學生對象添加到對象集合中 } }
//回收釋放資源 closeResouse(); return stus; } }
為了簡單明潔,部分屬性不進行值查詢
二、service層:
這里沒有啥邏輯,我就直接將dao方法引用一遍,不做詳解
1.service接口:
package com.myschool.service; import java.util.List; import com.myschool.entity.Student; public interface IService { public List<Student> Search() throws Exception; }
2.service接口實現類:
package com.mychool.service.Impl; import java.util.List; import com.mychool.dao.impl.IStudentDaoImpl; import com.myschool.dao.IStudentDao; import com.myschool.entity.Student; import com.myschool.service.IService; public class IServiceImpl implements IService{ IStudentDao isd=new IStudentDaoImpl(); @Override public List<Student> Search() throws Exception { return isd.Search(); } }
三、UI層:
package com.myschool.ui; import java.util.List; import com.mychool.service.Impl.IServiceImpl; import com.myschool.entity.Student; import com.myschool.service.IService; public class test { public static void main(String[] args) throws Exception {
//創建service接口實現類的對象 IService isv=new IServiceImpl(); List<Student> lsList=isv.Search();
for (Student student : lsList) { System.out.println(student.getStudentName()+"\t"+student.getGradeID().getGradeName()); } } }
一對多關系
這里最主要的區別就是封裝和dao實現類的寫法:
因為一個年級對應多個學生,所以在grade類中封裝一個student對象的泛型集合。
DAO實現類寫法:

