- 浏览: 189767 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (321)
- eclipse (4)
- idea (2)
- Html (8)
- Css (14)
- Javascript (8)
- Jquery (6)
- Ajax Json (4)
- Bootstrap (0)
- EasyUI (0)
- Layui (0)
- 数据结构 (0)
- Java (46)
- DesPattern (24)
- Algorithm (2)
- Jdbc (8)
- Jsp servlet (13)
- Struts2 (17)
- Hibernate (11)
- Spring (5)
- S2SH (1)
- SpringMVC (4)
- SpringBoot (11)
- WebService CXF (4)
- Poi (2)
- JFreeChart (0)
- Shiro (6)
- Lucene (5)
- ElasticSearch (0)
- JMS ActiveMQ (3)
- HttpClient (5)
- Activiti (0)
- SpringCloud (11)
- Dubbo (6)
- Docker (0)
- MySQL (27)
- Oracle (18)
- Redis (5)
- Mybatis (11)
- SSM (1)
- CentOS (10)
- Ant (2)
- Maven (4)
- Log4j (7)
- XML (5)
最新评论
1. MyBatis3关系映射,一对多关系
2. 使用mybatis查询关联表使用collection 方式,一对多关系
3. 使用mybatis查询关联表,一对多关系
创建t_grade数据表 create table t_grade( id int(11) NOT NULL AUTO_INCREMENT, gradeName varchar(20) DEFAULT NULL, PRIMARY KEY(id) ) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8; 插入数据 insert into t_grade(id, gradeName) values(1, '大学一年级'); insert into t_grade(id, gradeName) values(2, '大学二年级'); 在t_student表增加gradeId关联字段 alter table t_student add gradeId INT(11);
2. 使用mybatis查询关联表使用collection 方式,一对多关系
<resultMap type="Grade" id="GradeResult"> <result property="id" column="id"/> <result property="gradeName" column="gradeName"/> <collection property="students" column="id" select="com.andrew.mappers.StudentMapper.findByGradeId"></collection> </resultMap>
3. 使用mybatis查询关联表,一对多关系
package com.andrew.model; import java.util.List; public class Grade { private Integer id; private String gradeName; private List<Student> students; @Override public String toString() { return "Grade [id=" + id + ", gradeName=" + gradeName +", student=" + students + "]"; } // getter and setter }
package com.andrew.mappers; import com.andrew.model.Grade; public interface GradeMapper { public Grade findById(Integer id); }
<?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.andrew.mappers.GradeMapper"> <resultMap type="Grade" id="GradeResult"> <result property="id" column="id"/> <result property="gradeName" column="gradeName"/> <collection property="students" column="id" select="com.andrew.mappers.StudentMapper.findByGradeId"></collection> </resultMap> <select id="findById" parameterType="Integer" resultMap="GradeResult"> select * from t_grade where id=#{id} </select> </mapper>
package com.andrew.mappers; import java.util.List; import com.andrew.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); }
<?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.andrew.mappers.StudentMapper"> <resultMap type="Student" id="StudentResult"> <id property="id" column="id"/> <result property="name" column="name"/> <result property="age" column="age"/> </resultMap> <resultMap type="Student" id="StudentAddressResult"> <id property="id" column="id"/> <result property="name" column="name"/> <result property="age" column="age"/> <association property="address" column="addressId" select="com.andrew.mappers.AddressMapper.findById"></association> <association property="grade" column="gradeId" select="com.andrew.mappers.GradeMapper.findById"></association> </resultMap> <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="StudentAddressResult"> select * from t_student </select> <select id="findStudentWithAddress" resultMap="StudentAddressResult" parameterType="Integer"> select * from t_student t1,t_address t2 where t1.addressId=t2.id and t1.id=#{id} </select> <select id="findByGradeId" resultMap="StudentAddressResult" parameterType="Integer"> select * from t_student where gradeId=#{gradeId} </select> </mapper>
package com.andrew.model; public class Student { private Integer id; private String name; private Integer age; private Address address; private Grade grade; public Student() { super(); } public Student(String name, Integer age) { super(); this.name = name; this.age = age; } public Student(Integer id, String name, Integer age) { super(); this.id = id; this.name = name; this.age = age; } @Override public String toString() { return "Student [id=" + id + ", name=" + name + ", age=" + age + ", address=" + address + "]"; } // getter and setter }
package com.andrew.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.andrew.mappers.GradeMapper; import com.andrew.model.Grade; import com.andrew.util.SqlSessionFactoryUtil; public class StudentGradeTest { private static Logger logger = Logger.getLogger(StudentTest.class); private SqlSession sqlSession = null; private GradeMapper gradeMapper = null; @Before public void setUp() throws Exception { sqlSession = SqlSessionFactoryUtil.openSession(); gradeMapper = sqlSession.getMapper(GradeMapper.class); } @After public void tearDown() throws Exception { sqlSession.close(); } @Test public void testFindGradeWithStudents() { logger.info("查询年级和学生"); Grade grade = gradeMapper.findById(2); System.out.println(grade); } } 运行结果: Grade [id=2, gradeName=大学二年级, student=[Student [id=7, name=赵六3, age=23, address=Address [id=1, sheng=北京市, shi=北京市, qu=东城区]], Student [id=9, name=赵六5, age=25, address=Address [id=1, sheng=北京市, shi=北京市, qu=东城区]]]]
注意: 一对多关系不能a调用b的同时b调用a,否则会有死循环。 可以不使用默认的toString方法,自定义不同的方法。
发表评论
-
MyBatis3注解的动态SQL
2018-12-14 08:33 8961. MyBatis3注解的动态SQL @InsertP ... -
MyBatis3注解的关系映射
2018-12-14 08:32 4761. MyBatis3注解的关系映射 1) 一对 ... -
MyBatis3使用注解配置SQL映射器
2018-12-14 08:32 5061. MyBatis3使用注解配置SQL映射器 新建My ... -
MyBatis3缓存与分页
2018-12-13 08:40 5191. MyBatis3缓存 Mybatis默认情况下,M ... -
MyBatis3文件类型与多个参数传入
2018-12-13 08:40 4461. MyBatis3处理CLOB、BLOB类型数据 在 ... -
MyBatis3动态SQL
2018-12-13 08:39 4621. MyBatis3动态SQL 1. if 条件 ... -
MyBatis3一对一关系映射
2018-12-13 08:39 3911. MyBatis3关系映射,一对一关系 创建t_ad ... -
MyBatis3使用xml配置sql映射器
2018-12-12 09:31 5611. MyBatis3使用xml配置sql映射器 1) ... -
MyBatis3配置
2018-12-12 09:21 4781. MyBatis3配置说明 1. environme ... -
MyBatis3实现
2018-12-12 09:06 4971. MyBatis3实现 官方网站:http:// ...
相关推荐
在处理复杂的关联关系时,MyBatis的一对多映射机制显得尤为重要。一对多映射指的是一个父类实体对应多个子类实体的关系,例如一个学生可以有多个课程,一个部门可以有多名员工等。 一、一对多映射的基本概念 在...
在处理复杂的数据库关联关系时,比如一对一、一对多、多对一、多对多等,Mybatis提供了灵活的映射机制。本篇将详细讲解如何在Mybatis中实现一对多关联映射的查询操作。 首先,我们要明确一对多关联映射的基本概念。...
SpringBoot 中 MyBatis 表关联映射关系(一对多嵌套:结果方式) 在 SpringBoot 中,MyBatis 是一个非常流行的持久层框架,它提供了强大的持久化功能,能够将 Java 对象与数据库表进行映射。在实际开发中,我们经常...
通过分析这些文件,我们可以看到具体的XML映射配置、Java代码实现以及测试方法,从而更好地理解和掌握MyBatis的一对一和一对多映射。 ### 总结 MyBatis的一对一和一对多映射是其强大功能的一部分,通过合理的配置...
在这个名为"MyBatis_关系映射之一对多-src.zip"的压缩包中,我们很显然会探讨MyBatis中的一对多关系映射这一核心概念。 在数据库设计中,一对多关系是常见的实体关系类型,意味着一个父表(或父实体)可以与多个子...
标题 "mybatis xml 一对多" 指的是在MyBatis框架中处理数据库中的一对多关联映射。MyBatis是一个优秀的持久层框架...对于开发人员来说,理解和熟练掌握MyBatis的一对多映射技巧,对于提升开发效率和代码质量至关重要。
Mybatis的一对多关联关系映射实现过程解析 Mybatis是一款基于Java的持久层框架,它提供了对数据库的操作接口,包括数据的增删改查等操作。在实际开发中,我们经常会遇到一对多关联关系映射的问题,例如用户和订单...
本文将深入探讨如何使用MyBatis的注解配置来实现一对多关系映射,以此来提高开发效率并减少代码冗余。 首先,我们需要理解一对多关系的概念。在数据库设计中,一对多关系表示一个表中的记录可以对应另一个表中的多...
在实际的项目开发中,数据库中的表与表之间经常存在各种关联关系,比如一对一(One-to-One)、一对多(One-to-Many)和多对多(Many-to-Many)关系。本篇文章将重点讲解如何在 MyBatis 中实现一对一的关联映射。 一...
在本篇关于MyBatis框架的学习中,我们将深入探讨一对一关联映射和一对多关联映射的概念、配置以及在实际开发中的应用。MyBatis是一个优秀的持久层框架,它允许开发者将SQL语句直接写在XML配置文件或者注解中,从而...
Mybatis关联映射是数据库操作中的一个重要概念,它允许我们在SQL查询中处理一对多、多对一、多对多等复杂关系。在这个"Mybatis关联映射Demo"中,我们将深入探讨如何在Mybatis框架中实现这些关系映射,以便更好地理解...
在 Springboot 中,MyBatis 提供了强大的表关联映射关系机制,可以实现一对一、多对一、多对多等各种关联关系。在本文中,我们将详细介绍 Springboot 中 MyBatis 表关联映射关系的实现机制,特别是针对一对一关联...
5. **一对一(OneToOne)和一对多(OneToMany)嵌套映射**:在多对多关系中,常常伴随着一对一或一对多的子关系。MyBatis提供`<oneToMany>`和`<oneToOne>`标签,允许我们在映射文件中声明这些关系。 6. **级联操作...
* 一对多:一个班级有多个学生,一个学生只属于一个班级 * 多对多:一个学生可以选多门课,一门课可以有多个学生选 二、MyBatis 实现一对一关联映射 下面是一个简单的实例: 1. 建立表结构 首先,我们需要建立两...
MyBatis 提供了一种通过 XML 映射文件来配置一对多关联的方法,让我们可以方便地处理这种复杂的关系。 在 MyBatis 的一对多关联映射中,通常涉及到两个表:一个是一对的“父”表,另一个是多的“子”表。在 XML ...
本示例主要讲解如何利用MyBatis来处理多对多关联映射查询,这对于理解和优化数据访问性能至关重要。 多对多关系在数据库设计中很常见,例如学生与课程的关系,一个学生可以选修多门课程,一门课程也可以被多个学生...
`<collection>`元素用于表示一对多或多对多关系,而`<association>`则表示一对一或多对一关系。 - **注解方式配置**:使用`@Many`和`@One`注解来声明多对多关系。例如,`@Many(targetField = "students", fetchType...
MyBatis关系映射之一对多和多对一 MyBatis是一款流行的Java持久化框架,提供了丰富的关系映射功能。关系映射是指在数据库中建立实体之间的关联关系,例如,一对多、多对一、多对多等。今天,我们将探讨MyBatis关系...
在MyBatis框架中,"一对多"关系映射是一种常见的数据库关联操作,它表示一个实体(如用户)可以对应多个子实体(如订单)。在实际的业务场景中,例如,一个用户可能有多个订单,这就是一对一到多的关系。本教程将...
这涉及到`<resultMap>`标签,可以设置`id`, `association`, `collection`, `discriminator`等子元素,处理复杂的一对一、一对多、多对多关系。 总的来说,MyBatis的XML配置是其灵活性和强大功能的体现,它使得...