2.4.2 對多表進行增删改查
2.4.2.1 在src下的com.entity包下建立Student.java
- package com.entity;
- import java.util.Date;
- /**
- * 學生類:多方(引入一方對象《外鍵列》)
- * @author 北大青鳥南京中博 Holly老師
- * 學IT 就找Holly老師
- * QQ/微信:964918306
- *
- */
- public class Student {
- private int sid; //學生編号
- private String sname; //學生姓名
- private String password; //密碼
- private String sex; //性别
- private int age; //年齡
- private double score; //成績
- private String entrytime; //入班時間
- // private int cid; // ☆外鍵列:關聯classes表的主鍵cid
- private Classes cla;
- * 1.提供給系統底層使用
- */
- public Student() {
- }
- * 2.做添加操作使用
- * @param sname
- * @param password
- * @param sex
- * @param age
- * @param score
- * @param entrytime
- * @param cla
- public Student(String sname, String password, String sex, int age,
- double score, String entrytime, Classes cla) {
- this.sname = sname;
- this.password = password;
- this.sex = sex;
- this.age = age;
- this.score = score;
- this.entrytime = entrytime;
- this.cla = cla;
- }
- * 查詢但是不包含classes對象
- * @param sid
- public Student(int sid, String sname, String password, String sex, int age,
- double score, String entrytime) {
- this.sid = sid;
- * 3.做查詢使用
- public int getSid() {
- return sid;
- public void setSid(int sid) {
- public String getSname() {
- return sname;
- public void setSname(String sname) {
- public String getPassword() {
- return password;
- public void setPassword(String password) {
- public String getSex() {
- return sex;
- public void setSex(String sex) {
- public int getAge() {
- return age;
- public void setAge(int age) {
- public double getScore() {
- return score;
- public void setScore(double score) {
- public String getEntrytime() {
- return entrytime;
- public void setEntrytime(String entrytime) {
- public Classes getCla() {
- return cla;
- public void setCla(Classes cla) {
- @Override
- public String toString() {
- return "Student [age=" + age + ", cla=" + cla + ", entrytime="
- + entrytime + ", password=" + password + ", score=" + score
- + ", sex=" + sex + ", sid=" + sid + ", sname=" + sname + "]";
2.4.2.2 在src下的com.dao包下建立StudentDao.java
package com.dao;
import java.util.List;
import com.entity.Student;
* 學生類:資料庫通路層接口
* 學IT 就找Holly老師
* QQ/微信:964918306
public interface StudentDao {
/**
* 1.查詢所有
* @return 查詢到list集合
*/
List<Student> findAll();
* 2.根據id查詢
* @param sid
* @return 某個學生對象
Student findById(int sid);
/**
* 3.添加一條學生資訊
* @param stu 學生對象
* @return 受影響的行數
*/
int addStudent(Student stu);
* 4.修改一條學生資訊
int updateStudent(Student stu);
* 5.根據id删除
* @return 受影響的行數
int deleteStudent(int sid);
2.4.2.3 在src下的com.dao.impl包下建立StudentDaoImpl.java
package com.dao.impl;
import java.sql.SQLException;
import java.util.ArrayList;
import com.dao.BaseDao;
import com.dao.StudentDao;
import com.entity.Classes;
* 學生類:資料通路層接口實作類
public class StudentDaoImpl extends BaseDao implements StudentDao {
* @return
@Override
public List<Student> findAll() {
//1.1 定義list集合用來存放從rs結果集中取出的對象
List<Student> list=new ArrayList<Student>();
//1.2 定義sql語句
String sql="select sid,sname,password,sex,age,score,entrytime,s.cid scid,c.cid ccid,cname " +
"from student s,classes c where s.cid=c.cid";
//1.3 調用BaseDao公共的查詢的方法并傳回rs結果集
rs=super.executeQuery(sql, null);
try {
//1.4 循環周遊rs結果集,将對象取出放入list集合
while(rs.next()){
/*1.4.1 擷取一條資料中關于classes表中
* 的cid和cname值指派給對應的classes對象
*/
Classes cla=new Classes(rs.getInt("ccid"), rs.getString("cname"));
/*1.4.2 擷取一條資料中關于student表中的字段值
* 指派給對應的student對象,
Student stu=new Student(rs.getInt("sid"), rs.getString("sname"),
rs.getString("password"), rs.getString("sex"),
rs.getInt("age"), rs.getDouble("score"),
rs.getString("entrytime"),cla);
//1.4.3 将classes對象指派給student對象的cla屬性
//stu.setCla(cla);
// 1.4.4 将student對象添加到list集合
list.add(stu);
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
//1.5 釋放資源
super.closeAll(rs, pstm, conn);
}
//1.6 傳回攜帶student和classes對象的集合
return list;
}
public Student findById(int sid) {
//1.1 定義Student對象
Student stu=null;
"from student s,classes c where s.cid=c.cid and sid=?";
//給占位符指派
Object[] param={sid};
rs=super.executeQuery(sql, param);
if(rs.next()){
stu=new Student(rs.getInt("sid"), rs.getString("sname"),
return stu;
public int addStudent(Student stu) {
//1.定義sql
String sql="insert into student" +
"(sname,password,sex,age,score,entrytime,cid) values" +
"(?,?,?,?,?,?,?)";
//2.定義占位符數組
Object[] param={stu.getSname(),stu.getPassword(),stu.getSex(),
stu.getAge(),stu.getScore(),stu.getEntrytime(),
stu.getCla().getCid()};
//3.執行操作并傳回結果
return super.executeUpdate(sql, param);
public int updateStudent(Student stu) {
String sql="update student set sname=?,password=?,age=?," +
"sex=?,score=?,entrytime=?,cid=? where sid=?";
Object[] param={stu.getSname(),stu.getPassword(),stu.getAge(),
stu.getSex(),stu.getScore(),stu.getEntrytime(),stu.getCla().getCid(),stu.getSid()};
public int deleteStudent(int sid) {
// TODO Auto-generated method stub
return 0;
2.4.2.4 在src下的com.classes.test包下建立FindAllStudent.java
2.4.2.5 在src下的com.classes.test包下建立FindByIdStudent.java
package com.student.test;
import com.dao.impl.StudentDaoImpl;
* 學生類的查詢所有的方法
public class FindAllStudent {
public static void main(String[] args) {
StudentDao dao=new StudentDaoImpl();
List<Student> list=dao.findAll();
if(list!=null){
System.out.println("查詢所有成功");
for (Student student : list) {
System.out.println(student);
}else{
System.out.println("查詢所有失敗");
2.4.2.6 在src下的com.classes.test包下建立AddTestStudent.java
import com.dao.ClassesDao;
import com.dao.impl.ClassesDaoImpl;
*
public class AddTestStudent {
//1.使用多态實作接口的内容
ClassesDao claDao=new ClassesDaoImpl();
//2.先根據id查詢班級對象,因為學生入班前,必須保證班級存在
Classes cla=claDao.findByCid(3);
String cname=cla.getCname();
if(cname!=null || cname.isEmpty()){
System.out.println("班級已經存在");
//3.建立學生對象,并攜帶已經存在的班級資訊
Student stu=new Student("胖子2", "123","男", 26, 60.00, "20160606", cla);
//4.執行添加學生對象操作
int num=dao.addStudent(stu);
//5.添加操作的業務判斷
if(num>0){
System.out.println("add success..");
}else{
System.out.println("add fail..");
System.out.println("班級不存在");
2.4.2.7 在src下的com.classes.test包下建立UpdateTestStudent.java
* 修改學生對象
public class UpdateTestStudent {
ClassesDao claDao=new ClassesDaoImpl();
StudentDao stuDao=new StudentDaoImpl();
//2.根據cid查詢班級對象,目的,修改時必須保證班級對象存在
Classes cla=claDao.findByCid(2);
//3.根據sid查詢學生對象,你想修改那些列,就重寫給改屬性指派
Student stu=stuDao.findById(8);
//4.判斷班級對象和要修改的學生對象存在,才能修改
if(cla!=null && stu!=null){
System.out.println("classes 和student 對象存在..");
//5.修改根據sid查詢出來對象的屬性值
stu.setCla(cla); //修改該學生對象的班級
stu.setSname("傅鵬程");
//6.執行修改操作
int num=stuDao.updateStudent(stu);
//7.修改的業務判斷
System.out.println("update success");
System.out.println("update fail");
System.out.println("classes 和student 對象不存在..");
2.4.2.8 在src下的com.classes.test包下建立DeleteTest.java
-------------------------------------------------------------
開發人員轉崗好消息!!
以上代碼純屬原創 ,為了能夠共同進步互相學習,如有問題或更好建議可以聯系holly老師:
想學習java,安卓,大資料,資料庫,web開發,前端開發 可以來“北大青鳥南京中博軟體學院”找 Holly老師 ,歡迎來咨詢!
歡迎掃下方二維碼關注Holly老師公衆号,一起學java!