一对多,增删改查

一对一建表完全相同,只是没有设置外键索引的唯一性

A如果查询老师信息,那么左连接时老师的表要放在左边,反之查询课程信息,课程表左连接时放在左边 
B老师对应得课程是多个,所以在定义返回值resultMap的时候,课程要使用Collection标签,并且返回类型为ofType
C课程对应的老师只有一个,所以在定义返回值resultMap的时候,老师使用的是association标签,并且返回类型为 javaType 

teacher代码

package javastudy;
import java.util.List;

public class Teacher {
	    private int id;
	    private String name;
	    private String sex;
	    private String phone;
	//因为一个老师可能对应多个课程,所以课程要定义为一个List
	    private List<Course> courses;
	    public int getId() {
	        return id;
	    }
	    public void setId(int id) {
	        this.id = id;
	    }
	    public String getName() {
	        return name;
	    }
	    public void setName(String name) {
	        this.name = name;
	    }
	    public String getSex() {
	        return sex;
	    }
	    public void setSex(String sex) {
	        this.sex = sex;
	    }
	    public String getPhone() {
	        return phone;
	    }
	    public void setPhone(String phone) {
	        this.phone = phone;
	    }
	    public List<Course> getCourses() {
	        return courses;
	    }
	    public void setCourses(List<Course> courses) {
	        this.courses = courses;
	    }
	    @Override
	    public String toString() {
	        return "Teacher [id=" + id + ", name=" + name + ", sex=" + sex + ", phone=" + phone + ", courses=" + courses
	                + "]";
	    }
	}

course代码

package javastudy;

public class Course {
    private int id;
    private String name;
    private String type;
    private String hours;
    private Teacher teacher;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    public String getHours() {
        return hours;
    }
    public void setHours(String hours) {
        this.hours = hours;
    }
    public Teacher getTeacher() {
        return teacher;
    }
    public void setTeacher(Teacher teacher) {
        this.teacher = teacher;
    }
    @Override
    public String toString() {
        return "Course [id=" + id + ", name=" + name + ", type=" + type + ", hours=" + hours + ", techer=" + teacher
                + "]";
    }
}

teacherMapper 接口

package javastudy;

public interface TeacherMapper {
    public void add(Teacher teacher);
    public Teacher get(int id);
    public void delete(int id);
    public void update(Teacher teacher);

}

courseMapper接口

package javastudy;

public interface CourseMapper {
    public void add(Course course);
    public Course get(int id);
    public void delete(int id);
    public void update1(Course course);
    public void update2(Course course);
}

teacherMapper.XML

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="javastudy.TeacherMapper">
	<insert id="add" parameterType="javastudy.Teacher" useGeneratedKeys="true" keyProperty="id">
    insert into teacher
    (
    	name,
    	sex,
    	phone  
    )
    values
    (
    	#{name},
    	#{sex},
    	#{phone}   
    )
  </insert> 
  <!--提取老师要是连课程一起提取,课程是List类型 -->
  <select id="get" parameterType="javastudy.Teacher" resultMap="teacher">
  select 
		t.id tid,
		t.name tname,
		t.sex tsex,
		t.phone tphone,
	    c.id cid,
		c.name cname,
		c.type ctype,
		c.hours chours
	from 
		teacher t
	left join	
		course c
	on
		c.tid=t.id 
	where 
		t.id=#{id} 

  </select>
   <!-- 对上面的resultMap做一个说明,注意id要和上面的result名对应 -->
  <resultMap type="javastudy.Teacher" id="teacher">
  		<id property="id" column="tid"/>
  		<result property="name" column="tname"/>
  		<result property="sex" column="tsex"/>
  		<result property="phone" column="tphone"/>
  		<!-- 由于teacher和course是一对多的关系,所以使用collection,courses为Course类的属性 -->
  		<collection property="courses" ofType="javastudy.Course">
  		<id property="id" column="cid"/>
  		<result property="name" column="cname"/>
  		<result property="type" column="ctype"/>
  		<result property="hours" column="chours"/>
  		</collection>
  </resultMap>
  <delete id="delete" parameterType="int">
  		delete from teacher where id=#{id}
  </delete>
  <update id="update">
  		update teacher set name=#{name},sex=#{sex} where id=#{id}
  </update>
</mapper>

courseMapper.XML

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="javastudy.CourseMapper">
	<insert id="add" parameterType="javastudy.Course">
    insert into course
    (
    	tid,
    	name,
    	type,
    	hours   	
    )
    values
    (
    	#{teacher.id},
    	#{name},
    	#{type},
    	#{hours}
    )
    </insert> 
    <select id="get" parameterType="javastudy.Course" resultMap="course">
  select 		
		c.id cid,
		c.name cname,
		c.type ctype,
		c.hours chours,
		t.id tid,
		t.name tname,
		t.sex tsex,
		t.phone tphone
	from 
		course c
	left join
	 	teacher t
	on 
		c.tid=t.id
	where 
		c.id=#{id}		
  </select>
  <resultMap type="javastudy.Course" id="course">
  		<id property="id" column="cid"/>
  		<result property="name" column="cname"/>
  		<result property="type" column="ctype"/>
  		<result property="hours" column="chours"/>	
  		<association property="teacher" javaType="javastudy.Teacher">
  		<id property="id" column="tid"/>
  		<result property="name" column="tname"/>
  		<result property="sex" column="tsex"/>
  		<result property="phone" column="tphone"/>
  		</association>
  </resultMap>
  <delete id="delete" parameterType="int">
  		delete from course where id=#{id}
  </delete>
  <update id="update1" parameterType="javastudy.Course">
  		update course set name=#{name},type=#{type},hours=#{hours} where id=#{id}  
  </update>
    <update id="update2" parameterType="javastudy.Course">
  		update course set tid=#{teacher.id} where id=#{id}  
  </update>
</mapper>

测试类代码

package test;

import java.io.IOException;
import org.apache.ibatis.session.SqlSession;
import org.junit.jupiter.api.Test;

import javastudy.Course;
import javastudy.CourseMapper;
import javastudy.Teacher;
import javastudy.TeacherMapper;
import utility.MyBatisUtils;

class Mytest {

	@Test
    public void testInsert() throws IOException {
        SqlSession session=MyBatisUtils.openSession();
        TeacherMapper tMapper=session.getMapper(TeacherMapper.class);
        Teacher teacher=new Teacher();
        teacher.setName("谭浩强");
        teacher.setSex("男");
        teacher.setPhone("13876548861");
        tMapper.add(teacher);

        CourseMapper cMapper=session.getMapper(CourseMapper.class);
        Course course=new Course();
        course.setName("C语言入门与提高");
        course.setType("必修");
        course.setHours("60");
        course.setTeacher(teacher);
        cMapper.add(course);

        Course course2=new Course();
        course2.setName("精通Java基础");
        course2.setType("选修");
        course2.setHours("30");
        course2.setTeacher(teacher);
        cMapper.add(course2);
        session.commit();
        session.close();
    }
	@Test
	public void testSelect() throws IOException
	{
		 SqlSession session=MyBatisUtils.openSession();
//		 TeacherMapper tMapper=session.getMapper(TeacherMapper.class);
//		 Teacher teacher=tMapper.get(1);
//		 System.out.println(teacher.getCourses());
		 
		 CourseMapper cMapper=session.getMapper(CourseMapper.class);
	        Course course=cMapper.get(1);
	        System.out.println(course.getTeacher());
	        session.close();		
	}
	@Test
	public void testDelete() throws IOException
	{
		 SqlSession session=MyBatisUtils.openSession();
//		 TeacherMapper tMapper=session.getMapper(TeacherMapper.class);
//		 tMapper.delete(1);
//		 session.commit();
//	     session.close();
		CourseMapper cMapper=session.getMapper(CourseMapper.class);
		cMapper.delete(3);
		 session.commit();
	     session.close();
	}
	
	@Test
	public void testUpdate() throws IOException
	{
        SqlSession session=MyBatisUtils.openSession();
//        TeacherMapper tMapper=session.getMapper(TeacherMapper.class);
//        Teacher teacher=new Teacher();
//        teacher.setId(2);
//        teacher.setName("雷军");
//        teacher.setSex("男"); 
//        tMapper.update(teacher);
//        session.commit();
//	    session.close();
	    
        //通过id修改非关联表字段
//        CourseMapper cMapper=session.getMapper(CourseMapper.class);
//        Course course=new Course();
//        course.setId(2);
//        course.setName("安卓入门与提高");
//        course.setType("必修");
//        course.setHours("30");
//        cMapper.update1(course);
//        session.commit();
//        session.close();
        
      //通过id修改关联表字段
        CourseMapper cMapper=session.getMapper(CourseMapper.class);
        TeacherMapper tMapper=session.getMapper(TeacherMapper.class);
        Course course=new Course();
        course.setId(4);
        course.setTeacher(tMapper.get(3));
        cMapper.update2(course);
        session.commit();
        session.close();
		
	}
}

MyBatisUtils 代码

package utility;

import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MyBatisUtils {
	public static SqlSession openSession() throws IOException
	{
            String resource = "mybatis-config.xml";
            InputStream in = Resources.getResourceAsStream(resource);
            SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(in,"users");
            return sessionFactory.openSession();
	}
}

mybatis-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration  
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
  "http://mybatis.org/dtd/mybatis-3-config.dtd">  
<configuration>  
	<properties resource="db.properties"></properties>
    <!-- 对事务的管理和连接池的配置 -->  
    <environments default="development">  
        <environment id="users">  
            <transactionManager type="JDBC" />  
            <dataSource type="POOLED">  
                <property name="driver" value="${db.driver}" />  
                <property name="url" value="${db.url}" />  
                <property name="username" value="${db.username}"/>  
                <property name="password" value="${db.password}" />  
            </dataSource>  
        </environment>  
    </environments>       
    <!-- mapping 文件路径配置 -->  
    <mappers>  
	<mapper class="javastudy.TeacherMapper"/>
	<mapper class="javastudy.CourseMapper"/>
    </mappers> 
</configuration>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值