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!