三層結構下的多表查詢,實體類寫法


一對一關系

  查詢所有學生信息,年級信息以年級名稱顯示

  一、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實現類寫法:

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM