关系关系主要有一对一,一对多,多对多,往往多对多都是通过俩个一对多来完成的

实例项目还是之前的,只是增加了一个年级实体类

1.创建年级实体类:---年级中有学生的集合

package com.java1234.model;

import java.util.List;

public class Grade {

private Integer id;
private String gradeName;
private List<Student> students;

public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getGradeName() {
return gradeName;
}
public void setGradeName(String gradeName) {
this.gradeName = gradeName;
}
public List<Student> getStudents() {
return students;
}
public void setStudents(List<Student> students) {
this.students = students;
}
@Override
public String toString() {
return "Grade [id=" + id + ", gradeName=" + gradeName +"]";
}

}
2创建年级dao

package com.java1234.mappers;

import com.java1234.model.Grade;

public interface GradeMapper {

public Grade findById(Integer id);

}

3.创建年级的mapper

<?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="com.java1234.mappers.GradeMapper">

<resultMap type="Grade" id="GradeResult">
<result property="id" column="id"/>
<result property="gradeName" column="gradeName"/>
<collection property="students" column="id" select="com.java1234.mappers.StudentMapper.findByGradeId"></collection>
</resultMap>

<select id="findById" parameterType="Integer" resultMap="GradeResult">
select * from t_grade where id=#{id}
</select>

</mapper>

4.在学生实体类中添加年级对象

package com.java1234.model;

public class Student {

private Integer id;
private String name;
private Integer age;
private Address address;
private Grade grade;

public Student() {
super();
// TODO Auto-generated constructor stub
}

public Student(Integer id, String name, Integer age) {
super();
this.id = id;
this.name = name;
this.age = age;
}

public Student(String name, Integer age) {
super();
this.name = name;
this.age = age;
}

public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Address getAddress() {
return address;
}

public void setAddress(Address address) {
this.address = address;
}

public Grade getGrade() {
return grade;
}

public void setGrade(Grade grade) {
this.grade = grade;
}

@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", age=" + age
+ ", address=" + address + ", grade=" + grade + "]";
}

}

5.在学生dao中添加对根据年级查询学生

package com.java1234.mappers;

import java.util.List;

import com.java1234.model.Student;

public interface StudentMapper {

public int add(Student student);

public int update(Student student);

public int delete(Integer id);

public Student findById(Integer id);

public List<Student> find();

public Student findStudentWithAddress(Integer id);

public Student findByGradeId(Integer gradeId);
}

6在学生mapper中添加对年级的关联:

<?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="com.java1234.mappers.StudentMapper">

<!-- <resultMap type="Student" id="StudentResult">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="age" column="age"/>

<result property="address.id" column="addressId"/>
<result property="address.sheng" column="sheng"/>
<result property="address.shi" column="shi"/>
<result property="address.qu" column="qu"/>
</resultMap> -->

<!-- <resultMap type="Address" id="AddressResult">
<result property="id" column="id"/>
<result property="sheng" column="sheng"/>
<result property="shi" column="shi"/>
<result property="qu" column="qu"/>
</resultMap>

<resultMap type="Student" id="StudentResult">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="age" column="age"/>
<association property="address" resultMap="AddressResult"/>
</resultMap> -->

<resultMap type="Student" id="StudentResult">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="age" column="age"/>
<association property="address" column="addressId" select="com.java1234.mappers.AddressMapper.findById"></association>
<association property="grade" column="gradeId" select="com.java1234.mappers.GradeMapper.findById"></association>
</resultMap>

<select id="findStudentWithAddress" resultMap="StudentResult" parameterType="Integer">
select * from t_student t1,t_address t2 where t1.addressId=t2.id and t1.id=#{id}
</select>

<select id="findByGradeId" resultMap="StudentResult" parameterType="Integer">
select * from t_student where gradeId=#{gradeId}
</select>

<insert id="add" parameterType="Student" >
insert into t_student values(null,#{name},#{age})
</insert>

<update id="update" parameterType="Student">
update t_student set name=#{name},age=#{age} where id=#{id}
</update>

<delete id="delete" parameterType="Integer">
delete from t_student where id=#{id}
</delete>

<select id="findById" parameterType="Integer" resultType="Student">
select * from t_student where id=#{id}
</select>

<select id="find" resultMap="StudentResult">
select * from t_student
</select>
</mapper>

7.建立测试:

package com.java1234.service;

import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.java1234.mappers.StudentMapper;
import com.java1234.model.Student;
import com.java1234.util.SqlSessionFactoryUtil;

public class StudentTest3 {

private static Logger logger=Logger.getLogger(StudentTest.class);
private SqlSession sqlSession=null;
private StudentMapper studentMapper=null;

/**
* 测试方法前调用
* @throws Exception
*/
@Before
public void setUp() throws Exception {
sqlSession=SqlSessionFactoryUtil.openSession();
studentMapper=sqlSession.getMapper(StudentMapper.class);
}

/**
* 测试方法后调用
* @throws Exception
*/
@After
public void tearDown() throws Exception {
sqlSession.close();
}

@Test
public void testFindStudentWithAddress() {
logger.info("查询学生(带地址)");
Student student=studentMapper.findStudentWithAddress(3);
System.out.println(student);
}

@Test
public void testFindStudentWithGrade(){
logger.info("查询学生(带年级)");
Student student=studentMapper.findStudentWithAddress(1);
System.out.println(student);
}
}

最新文章

  1. struct 大小计算
  2. bzoj 2301: [HAOI2011]Problem b
  3. Unity自动场景保存脚本
  4. 用脚本定时监控SQL Server主从一致性
  5. CI当开启URL重写的时候,报错500 Internal Server Error
  6. updmap-sys failed. Output has been stored in
  7. 下一个系列学习列表Spring.net+NHibernate+MVC
  8. 包含到cocos2d-x里的tcpsocket源码
  9. Struts2 权限验证
  10. [Struts2学习笔记] -- 自定义类型转换
  11. 认识Log4j
  12. jQuery.extend()源码解读
  13. 201521123072《java程序设计》第七周总结
  14. Idea导入多个maven项目到同一目录下
  15. JAVA中IO流总结
  16. linux下查看进程id时用到的命令
  17. Notes on Operating System
  18. 杂谈3.py
  19. Cloth
  20. Dynamic Signals and Slots

热门文章

  1. raspberry是个什么玩意
  2. SuperSocket使用自定义协议与服务端通信发送实例
  3. [Python] 利用Python做定时任务, 及时了解互联网动态
  4. 不重新编译安装php模块的方法
  5. 通过sql语句对MySql数据库的基本操作
  6. IDEA调试方法总结及各种Step的区别
  7. 「模拟赛20180307」三元组 exclaim 枚举+树状数组
  8. CentOS系统日志
  9. IIS上部署网站问题总结
  10. JMeter - 如何测试REST API / 微服务