多对一
多个学生,对应一个老师
对于学生这边而言, 关联 … 多个学生,关联一个老师 【多对一】
对于老师而言, 集合 , 一个老师,有很多学生 【一对多】
创建SQL
CREATE TABLE `teacher` (
`id` INT(10) NOT NULL,
`name` VARCHAR(30) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
INSERT INTO teacher(`id`, `name`) VALUES (1, '秦老师');
CREATE TABLE `student` (
`id` INT(10) NOT NULL,
`name` VARCHAR(30) DEFAULT NULL,
`tid` INT(10) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `fktid` (`tid`),
CONSTRAINT `fktid` FOREIGN KEY (`tid`) REFERENCES `teacher` (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('1', '小明', '1');
INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('2', '小红', '1');
INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('3', '小张', '1');
INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('4', '小李', '1');
INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('5', '小王', '1');
测试环境搭建
- 导入lombok
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
- 新建实体类 Teacher,Student
import lombok.Data;
import java.util.List;
@Data
public class Teacher {
private int id;
private String name;
}
import lombok.Data;
@Data
public class Student {
private int id;
private String name;
//private int tid;
private Teacher teacher;
}
- 建立Mapper接口
import com.yang.pojo.Student;
import java.util.List;
public interface StudentMapper {
List<Student> getStudents();
}
- 建立Mapper.XML文件
<mapper namespace="com.yang.mapper.StudentMapper">
<resultMap id="StudentTeacher" type="Student">
<id property="id" column="sid"/>
<result property="name" column="sname"/>
<!--association关联,这个对象是什么类型的-->
<association property="teacher" javaType="Teacher">
<result property="name" column="tname"/>
</association>
</resultMap>
<select id="getStudents" resultMap="StudentTeacher">
SELECT s.id sid,s.name sname,t.name tname
FROM student s,teacher t
WHERE s.tid=t.id
</select>
</mapper>
- 在核心配置文件中绑定注册我们的Mapper接口或者文件!【方式很多,随心选】
<mappers>
<!--<mapper class="com.yang.mapper.UserMapper"/>-->
<!--<package name="com.yang.mapper"/>-->
<mapper resource="com/yang/mapper/StudentMapper.xml"/>
</mappers>
- 测试查询是否能够成功!
import com.yang.pojo.Student;
import com.yang.utils.MybatisUtils;
import org.junit.Test;
import java.util.List;
public class StudentMapperTest {
@Test
public void testGetStudents(){
StudentMapper mapper = MybatisUtils.getSession().getMapper(StudentMapper.class);
List<Student> students = mapper.getStudents();
for (Student student : students) {
System.out.println(student);
}
}
}
一对多
- 导入lombok
- 新建实体类 Teacher,Student
import lombok.Data;
import java.util.List;
@Data
public class Teacher {
private int id;
private String name;
private List<Student> students;
}
import lombok.Data;
@Data
public class Student {
private int id;
private String name;
private int tid;
//private Teacher teacher;
}
- 建立Mapper接口
import com.yang.pojo.Teacher;
public interface TeacherMapper {
public Teacher getTeacher(int id);
}
- 建立Mapper.XML文件
<mapper namespace="com.yang.mapper.TeacherMapper">
<resultMap id="TeacherStudent" type="Teacher">
<id property="id" column="tid"/>
<result property="name" column="tname"/>
<!--是包含关系,集合-->
<collection property="students" ofType="Student">
<result property="id" column="sid"/>
<result property="name" column="sname"/>
<result property="tid" column="tid"/>
</collection>
</resultMap>
<select id="getTeacher" resultMap="TeacherStudent">
SELECT s.id sid,s.name sname,t.name tname,t.id tid
FROM student s,teacher t
WHERE s.tid=t.id AND t.id=#{id}
</select>
</mapper>
- 在核心配置文件中绑定注册我们的Mapper接口或者文件!【方式很多,随心选】
<mappers>
<!--<mapper class="com.yang.mapper.UserMapper"/>-->
<!--<package name="com.yang.mapper"/>-->
<mapper resource="com/yang/mapper/TeacherMapper.xml"/>
</mappers>
- 测试查询是否能够成功!
<mapper namespace="com.yang.mapper.TeacherMapper">
<resultMap id="TeacherStudent" type="Teacher">
<id property="id" column="tid"/>
<result property="name" column="tname"/>
<!--是包含关系,集合-->
<collection property="students" ofType="Student">
<result property="id" column="sid"/>
<result property="name" column="sname"/>
<result property="tid" column="tid"/>
</collection>
</resultMap>
<select id="getTeacher" resultMap="TeacherStudent">
SELECT s.id sid,s.name sname,t.name tname,t.id tid
FROM student s,teacher t
WHERE s.tid=t.id AND t.id=#{id}
</select>
</mapper>
动态SQL
- 新建blog表
CREATE TABLE `blog` (
`id` varchar(50) NOT NULL COMMENT '博客id',
`title` varchar(100) NOT NULL COMMENT '博客标题',
`author` varchar(30) NOT NULL COMMENT '博客作者',
`create_time` datetime NOT NULL COMMENT '创建时间',
`views` int(30) NOT NULL COMMENT '浏览量'
) ENGINE=InnoDB DEFAULT CHARSET=utf8
- 新建pojo,mapper,mapper.xml
package com.yang.pojo;
import lombok.Data;
import java.util.Date;
@Data
public class Blog {
private String id;
private String title;
private String author;
private Date createDate;
private int views;
}
package com.yang.utils;
import java.util.UUID;
public class IDUtils {
public static String getId(){
return UUID.randomUUID().toString().replaceAll("-","");
}
}
<mapper namespace="com.yang.mapper.BlogMapper">
<insert id="addBlog" parameterType="Blog">
insert into blog(id,title,author,create_time,views)
values (#{id},#{title},#{author},#{createDate},#{views});
</insert>
<select id="getBlogById" resultType="Blog" parameterType="map">
select * from blog
<where>
-- where的作用,会自动拼接,或自动删除and和or
<if test="title!=null">
title =#{title}
</if>
<if test="author!=null">
and author =#{author}
</if>
</where>
</select>
<update id="updateBlog" parameterType="map">
update blog
<set>
<if test="title!=null">
test=#{title},
</if>
<if test="author!=null">
author=#{author}
</if>
</set>
where id=#{id}
</update>
</mapper>
- 在核心配置文件中绑定
<mappers>
<!--<mapper class="com.yang.mapper.UserMapper"/>-->
<!--<package name="com.yang.mapper"/>-->
<mapper resource="com/yang/mapper/BlogMapper.xml"/>
</mappers>
- 测试
package com.yang.mapper;
import com.yang.pojo.Blog;
import com.yang.utils.IDUtils;
import com.yang.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.*;
public class BlogMapperTest {
@Test
public void testAddBlog(){
SqlSession session = MybatisUtils.getSession(true);
BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog1 = new Blog();
blog1.setId(IDUtils.getId());//可以产生随机数
blog1.setTitle("我想见你了");
blog1.setAuthor("杨凯波");
blog1.setCreateDate(new Date());
blog1.setViews(10001);
mapper.addBlog(blog1);
Blog blog2 = new Blog();
blog2.setId(IDUtils.getId());
blog2.setTitle("我好想你");
blog2.setAuthor("杨凯波");
blog2.setCreateDate(new Date());
blog2.setViews(10001);
mapper.addBlog(blog2);
Blog blog3 = new Blog();
blog3.setId(IDUtils.getId());
blog3.setTitle("我想见你");
blog3.setAuthor("杨凯波");
blog3.setCreateDate(new Date());
blog3.setViews(10001);
mapper.addBlog(blog3);
Blog blog4 = new Blog();
blog4.setId(IDUtils.getId());
blog4.setTitle("我又怕见到你");
blog4.setAuthor("杨凯波");
blog4.setCreateDate(new Date());
blog4.setViews(10001);
mapper.addBlog(blog4);
Blog blog5 = new Blog();
blog5.setId(IDUtils.getId());
blog5.setTitle("我又怕见到你");
blog5.setAuthor("杨凯波");
blog5.setCreateDate(new Date());
blog5.setViews(10001);
mapper.addBlog(blog5);
Blog blog6 = new Blog();
blog6.setId(IDUtils.getId());
blog6.setTitle("我又怕见到你");
blog6.setAuthor("杨凯波");
blog6.setCreateDate(new Date());
blog6.setViews(10001);
mapper.addBlog(blog6);
Blog blog7 = new Blog();
blog7.setId(IDUtils.getId());
blog7.setTitle("我又怕见到你");
blog7.setAuthor("杨凯波");
blog7.setCreateDate(new Date());
blog7.setViews(10001);
mapper.addBlog(blog7);
Blog blog8 = new Blog();
blog8.setId(IDUtils.getId());
blog8.setTitle("我又怕见到你");
blog8.setAuthor("杨凯波");
blog8.setCreateDate(new Date());
blog8.setViews(10001);
mapper.addBlog(blog8);
}
@Test
public void testGetBlogByIf(){
SqlSession session = MybatisUtils.getSession();
BlogMapper mapper = session.getMapper(BlogMapper.class);
Map<String, String> map = new HashMap<String, String>();
// map.put("title","mybatis so easy");
//
List<Blog> blogById = mapper.getBlogById(map);
for (Blog blog : blogById) {
System.out.println(blog);
}
mapper.getBlogById(map);
}
@Test
public void testSet(){
SqlSession session = MybatisUtils.getSession(true);
BlogMapper mapper = session.getMapper(BlogMapper.class);
Map<String, String> map = new HashMap<String, String>();
map.put("id","bd1f4d910dcd4e818fd5c8a972d4b54a");
map.put("author","yanhsdds");
//map.put("title","yaoya");
mapper.updateBlog(map);
}
}