java 多对多数据库操作_多对多关系数据库表 java描述

多对多关系 需要建立一张新表存放它们的对应数据

sql语句

961ddebeb323a10fe0623af514929fc1.png

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 create table teacher(

2 id int primary key,

3 name varchar(100),

4 money float(8,2)

5 );

6 create table student(

7 id int primary key,

8 name varchar(100),

9 grade varchar(10)

10 );

11 create table teacher_student(

12 t_id int,

13 s_id int,

14 primary key(t_id,s_id),

15 constraint t_id_fk foreign key(t_id) references teacher(id),

16 constraint s_id_fk foreign key(s_id) references student(id)

17 );

48304ba5e6f9fe08f3fa1abda7d326ab.png

domain

Teacher.java

961ddebeb323a10fe0623af514929fc1.png

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 package cn.itcast.domain;

2

3 import java.io.Serializable;

4 import java.util.ArrayList;

5 import java.util.List;

6 /**

7 create table teacher(

8 id int primary key,

9 name varchar(100),

10 money float(8,2)

11 );

12 create table student(

13 id int primary key,

14 name varchar(100),

15 grade varchar(10)

16 );

17 create table teacher_student(

18 t_id int,

19 s_id int,

20 primary key(t_id,s_id),

21 constraint t_id_fk foreign key(t_id) references teacher(id),

22 constraint s_id_fk foreign key(s_id) references student(id)

23 );

24 * @author wzhting

25 *

26 */

27 public class Teacher implements Serializable {

28 private Integer id;

29 private String name;

30 private float money;

31 private List stus = new ArrayList();

32 public Integer getId() {

33 return id;

34 }

35 public void setId(Integer id) {

36 this.id = id;

37 }

38 public String getName() {

39 return name;

40 }

41 public void setName(String name) {

42 this.name = name;

43 }

44 public float getMoney() {

45 return money;

46 }

47 public void setMoney(float money) {

48 this.money = money;

49 }

50 public List getStus() {

51 return stus;

52 }

53 public void setStus(List stus) {

54 this.stus = stus;

55 }

56

57 }

48304ba5e6f9fe08f3fa1abda7d326ab.png

Student.java

961ddebeb323a10fe0623af514929fc1.png

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 package cn.itcast.domain;

2

3 import java.io.Serializable;

4 import java.util.ArrayList;

5 import java.util.List;

6

7 public class Student implements Serializable {

8 private Integer id;

9 private String name;

10 private String grade;

11 private List ts = new ArrayList();

12 public Integer getId() {

13 return id;

14 }

15 public void setId(Integer id) {

16 this.id = id;

17 }

18 public String getName() {

19 return name;

20 }

21 public void setName(String name) {

22 this.name = name;

23 }

24 public String getGrade() {

25 return grade;

26 }

27 public void setGrade(String grade) {

28 this.grade = grade;

29 }

30 public List getTs() {

31 return ts;

32 }

33 public void setTs(List ts) {

34 this.ts = ts;

35 }

36

37 }

48304ba5e6f9fe08f3fa1abda7d326ab.png

daoImpl.java

961ddebeb323a10fe0623af514929fc1.png

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 package cn.itcast.dao.impl;

2

3 import java.sql.SQLException;

4 import java.util.List;

5

6 import org.apache.commons.dbutils.QueryRunner;

7 import org.apache.commons.dbutils.handlers.BeanHandler;

8 import org.apache.commons.dbutils.handlers.BeanListHandler;

9 import org.apache.commons.dbutils.handlers.ScalarHandler;

10

11 import cn.itcast.domain.Student;

12 import cn.itcast.domain.Teacher;

13 import cn.itcast.util.DBCPUtil;

14

15 public class TeacherDaoImpl {

16 private QueryRunner qr = new QueryRunner(DBCPUtil.getDataSource());

17 public void addTeacher(Teacher t) throws SQLException{

18 //保存老师的基本信息

19 qr.update("insert into teacher(id,name,money) values(?,?,?)", t.getId(),t.getName(),t.getMoney());

20 //判断t中是否有学生

21 List stus = t.getStus();

22 //有学生:判断该学生是否在student表中;在,不添加了;不在,添加进去

23 if(stus!=null&&stus.size()>0){

24 for(Student s:stus){

25 Object num = qr.query("select 1 from student where id=?", new ScalarHandler(1), s.getId());//判断学生是否已在数据库中

26 if(num==null){

27 //学生信息不存在

28 qr.update("insert into student (id,name,grade) values(?,?,?)", s.getId(),s.getName(),s.getGrade());

29 }

30 //在第三方表中建立老师和学生的关系

31 qr.update("insert into teacher_student (t_id,s_id) values(?,?)", t.getId(),s.getId());

32 }

33 }

34

35 }

36

37 public Teacher findTeacher(Integer id) throws SQLException{

38 //查询老师的基本信息

39 Teacher t = qr.query("select * from teacher where id=?", new BeanHandler(Teacher.class), id);

40 if(t!=null){

41 //根据老师的id查学生的基本信息:方式三种

42 // String sql = "select * from student where id in (select s_id from teacher_student where t_id=?)";//子查询

43 // String sql = "select s.* from student s,teacher_student ts where s.id=ts.s_id and ts.t_id=?";//隐式内连接

44 String sql = "select s.* from student s inner join teacher_student ts on s.id=ts.s_id where ts.t_id=?";;//显式内连接

45 List stus = qr.query(sql, new BeanListHandler(Student.class), id);

46 t.setStus(stus);

47 }

48 return t;

49 }

50 }

48304ba5e6f9fe08f3fa1abda7d326ab.png

test

测试

961ddebeb323a10fe0623af514929fc1.png

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 package cn.itcast.test;

2

3 import java.sql.SQLException;

4 import java.util.List;

5

6 import org.junit.Test;

7

8 import cn.itcast.dao.impl.TeacherDaoImpl;

9 import cn.itcast.domain.Student;

10 import cn.itcast.domain.Teacher;

11

12 public class TeacherDaoImplTest {

13 private TeacherDaoImpl dao = new TeacherDaoImpl();

14 @Test

15 public void testAddTeacher() throws SQLException {

16 Teacher t1 = new Teacher();

17 t1.setId(1);

18 t1.setName("bxd");

19 t1.setMoney(20000);

20

21 Teacher t2 = new Teacher();

22 t2.setId(2);

23 t2.setName("wzt");

24 t2.setMoney(15000);

25

26 Student s1 = new Student();

27 s1.setId(1);

28 s1.setName("gfy");

29 s1.setGrade("A");

30

31 Student s2 = new Student();

32 s2.setId(2);

33 s2.setName("wxy");

34 s2.setGrade("A");

35

36 t1.getStus().add(s1);

37 t1.getStus().add(s2);

38

39 t2.getStus().add(s1);

40 t2.getStus().add(s2);

41

42 dao.addTeacher(t1);

43 dao.addTeacher(t2);

44

45 }

46

47 @Test

48 public void testFindTeacher() throws SQLException {

49 Teacher t = dao.findTeacher(2);

50 System.out.println(t.getName());

51 List stus = t.getStus();

52 for(Student s:stus)

53 System.out.println(s.getName());

54 }

55

56 }

48304ba5e6f9fe08f3fa1abda7d326ab.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值