(四)MyBatis关系映射
2017-06-26 19:02
281 查看
第一节:一对一关系实现
需要实现一对一的关系,首先我们有两张表,t-addree和t_student。CREATE TABLE `t_address` ( `id` int(11) NOT NULL AUTO_INCREMENT, `sheng` varchar(20) DEFAULT NULL, `shi` varchar(20) DEFAULT NULL, `qu` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
insert into `t_address`(`id`,`sheng`,`shi`,`qu`) values (1,'江苏省','苏州市','姑苏区'),(2,'江苏省','南京市','鼓楼区');
CREATE TABLE `t_student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) DEFAULT NULL, `age` int(11) DEFAULT NULL, `addressId` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
insert into `t_student`(`id`,`name`,`age`,`addressId`) values (1,'张三',10,1),(2,'李四',11,2),(3,'李四',11,2),(4,'李四',11,2),(5,'李四',11,2),(6,'李四',11,2),(7,'李四',11,2);
然后写model层
Address.java
package com.javaxk.model; public class Address { private Integer id; private String sheng; private String shi; private String qu; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getSheng() { return sheng; } public void setSheng(String sheng) { this.sheng = sheng; } public String getShi() { return shi; } public void setShi(String shi) { this.shi = shi; } public String getQu() { return qu; } public void setQu(String qu) { this.qu = qu; } @Override public String toString() { return "Address [id=" + id + ", sheng=" + sheng + ", shi=" + shi + ", qu=" + qu + "]"; } }
Student.java
package com.javaxk.model; public class Student { private Integer id; private String name; private Integer age; private Address address; 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; } @Override public String toString() { return "Student [id=" + id + ", name=" + name + ", age=" + age + ", address=" + address + "]"; } }
mappers映射类
AddressMapper.java
package com.javaxk.mappers; import com.javaxk.model.Address; public interface AddressMapper { public Address findById(Integer id); }
StudentMapper.java
package com.javaxk.mappers; import java.util.List; import com.javaxk.model.Student; public interface StudentMapper { public Student findStudentWithAddress(Integer id); }
主程序运行类
StudentTest3.java
package com.javaxk.service; import java.util.List; 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.javaxk.mappers.StudentMapper; import com.javaxk.model.Student; import com.javaxk.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(1); System.out.println(student); } }
Mapper映射文件的不同写法。。。
AddressMapper.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="com.javaxk.mappers.AddressMapper"> <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> <select id="findById" parameterType="Integer" resultType="Address"> select * from t_address where id=#{id} </select> </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.javaxk.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> <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> </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.javaxk.mappers.StudentMapper"> <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> <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> </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.javaxk.mappers.StudentMapper"> <resultMap type="Student" id="StudentResult"> <id property="id" column="id"/> <result property="name" column="name"/> <result property="age" column="age"/> <association property="address" javaType="Address"> <result property="id" column="id"/> <result property="sheng" column="sheng"/> <result property="shi" column="shi"/> <result property="qu" column="qu"/> </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> </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.javaxk.mappers.StudentMapper"> <resultMap type="Student" id="StudentResult"> <id property="id" column="id"/> <result property="name" column="name"/> <result property="age" column="age"/> <association property="address" column="id" select="com.javaxk.mappers.AddressMapper.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> </mapper>
第二节:一对多关系实现
StudentMapper.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="com.javaxk.mappers.StudentMapper"> <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.javaxk.mappers.AddressMapper.findById"></association> <association property="grade" column="gradeId" select="com.javaxk.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> </mapper>
AddressMapper.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="com.javaxk.mappers.AddressMapper"> <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> <select id="findById" parameterType="Integer" resultType="Address"> select * from t_address where id=#{id} </select> </mapper>
GradeMapper.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="com.javaxk.mappers.GradeMapper"> <resultMap type="Grade" id="GradeResult"> <result property="id" column="id"/> <result property="gradeName" column="gradeName"/> </resultMap> <select id="findById" parameterType="Integer" resultType="Grade"> select * from t_grade where id=#{id} </select> </mapper>
测试主类:
@Test public void testFindStudentWithGrade(){ logger.info("查询学生(带年级)"); Student student=studentMapper.findStudentWithAddress(1); System.out.println(student); }
相关文章推荐
- mybatis 一对多的映射关系
- mybatis实现一对多关系映射
- MyBatis关系映射
- mybatis对象之间映射关系以及数据库表建立的时候外键的添加
- MyBatis中多对多关系的映射和查询
- mysql数据库日期设计以及mybatis映射文件和实体属性的关系
- MyBatis一对一和一对多的关系映射(员工和部门)
- Java Web后端--入职技能任务单(Mybatis逆向工程--数据关系映射)五
- mybatis 多对多映射关系
- java的orm框架 mybatis 多对多 一对多关系的关联映射和查询--简单易懂,理解才是王道
- mybatis对象之间映射关系以及数据库表建立的时候外键的添加
- mybatis对象之间映射关系以及数据库表建立的时候外键的添加
- Mybatis多对多映射关系详解
- Mybatis 一对多(OneToOne)关系映射
- MyBatis 关系映射XML配置
- mybatis整合spring 之 基于接口映射的多对一关系
- Mybatis中的关系映射及懒加载机制
- Mybatis框架中实现双向一对多关系映射
- mybatis关系映射之一对多和多对一
- Mybatis的注解应用之关系映射