天天看點

資料通路層(下)

2.4.2 對多表進行增删改查

2.4.2.1  在src下的com.entity包下建立Student.java

  1. package com.entity;
  2. import java.util.Date;
  3. /**
  4.  * 學生類:多方(引入一方對象《外鍵列》)
  5.  * @author 北大青鳥南京中博 Holly老師
  6.  * 學IT 就找Holly老師 
  7.  * QQ/微信:964918306 
  8.  *
  9.  */
  10. public class Student {
  11. private int sid;  //學生編号
  12. private String sname; //學生姓名
  13. private String password;  //密碼
  14. private String sex;  //性别
  15. private int age;   //年齡
  16. private double score;  //成績
  17. private String entrytime;  //入班時間
  18. // private int cid;  // ☆外鍵列:關聯classes表的主鍵cid
  19. private Classes cla;
  20. * 1.提供給系統底層使用
  21. */
  22. public Student() {
  23.     }
  24. * 2.做添加操作使用
  25. * @param sname
  26. * @param password
  27. * @param sex
  28. * @param age
  29. * @param score
  30. * @param entrytime
  31. * @param cla
  32. public Student(String sname, String password, String sex, int age,
  33. double score, String entrytime, Classes cla) {
  34. this.sname = sname;
  35. this.password = password;
  36. this.sex = sex;
  37. this.age = age;
  38. this.score = score;
  39. this.entrytime = entrytime;
  40. this.cla = cla;
  41. }
  42. * 查詢但是不包含classes對象
  43. * @param sid
  44. public Student(int sid, String sname, String password, String sex, int age,
  45. double score, String entrytime) {
  46. this.sid = sid;
  47. * 3.做查詢使用
  48. public int getSid() {
  49. return sid;
  50. public void setSid(int sid) {
  51. public String getSname() {
  52. return sname;
  53. public void setSname(String sname) {
  54. public String getPassword() {
  55. return password;
  56. public void setPassword(String password) {
  57. public String getSex() {
  58. return sex;
  59. public void setSex(String sex) {
  60. public int getAge() {
  61. return age;
  62. public void setAge(int age) {
  63. public double getScore() {
  64. return score;
  65. public void setScore(double score) {
  66. public String getEntrytime() {
  67. return entrytime;
  68. public void setEntrytime(String entrytime) {
  69. public Classes getCla() {
  70. return cla;
  71. public void setCla(Classes cla) {
  72. @Override
  73. public String toString() {
  74. return "Student [age=" + age + ", cla=" + cla + ", entrytime="
  75. + entrytime + ", password=" + password + ", score=" + score
  76. + ", 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!

資料通路層(下)