天天看点

数据访问层(下)

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!

数据访问层(下)