Mybatis 中一对多,多对一的配置

现在有很多电商平台,就拿这个来说吧。顾客跟订单的关系,一个顾客可以有多张订单,但是一个订单只能对应一个顾客。

  一对多的顾客

<?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.zdp.domain.Person">

	<resultMap type="Person" id="personBean">
		<id column="personId" property="id"/>
		<result column="personName" property="name"/>
		<result column="personAddress" property="address"/>
		<result column="personTel" property="tel"/>

		<!-- 一对多的关系 -->
		<!-- property: 指的是集合属性的值, ofType:指的是集合中元素的类型 -->
		<collection property="orders" ofType="Order">
			<id column="orderId" property="id"/>
			<result column="orderNumber" property="number"/>
			<result column="orderPrice" property="price"/>
		</collection>
	</resultMap>

	<!-- 根据id查询Person, 关联将Orders查询出来 -->
	<select id="selectPersonById" parameterType="string" resultMap="personBean">
		select p.*, o.* from person p, orders o where p.personId  = o.pid and p.personId = #{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.zdp.domain.Order">
	<resultMap type="Order" id="orderBean">
		<id column="orderId" property="id"/>
		<result column="orderNumber" property="number"/>
		<result column="orderPrice" property="price"/>

		<!-- 多对一的关系 -->
		<!-- property: 指的是属性的值, javaType:指的是属性的类型-->
		<association property="person" javaType="Person">
			<id column="personId" property="id"/>
			<result column="personName" property="name"/>
			<result column="personAddress" property="address"/>
			<result column="personTel" property="tel"/>
		</association>
	</resultMap>
	<!-- 根据id查询Order, 关联将Person查询出来 -->
	<select id="selectOrderById" parameterType="string" resultMap="orderBean">
		select p.*, o.* from person p, orders o where p.personId  = o.pid and o.orderId = #{id}
	</select>
</mapper>

总配置: sqlMapConfig.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>     //这块儿做了别名的配置所以上面两个配置文件中可以使用Person和Order直接去代表类的全名
	<typeAliases>
	  <typeAlias type="com.zdp.domain.Person" alias="Person"/>
          <typeAlias type="com.zdp.domain.Order" alias="Order"/>
	</typeAliases>
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url" value="jdbc:mysql://localhost/test" />
				<property name="username" value="root" />
				<property name="password" value="root" />
			</dataSource>
		</environment>
	</environments>
	<mappers>
		<!-- 映射文件的位置 -->
		<mapper resource="com/zdp/domain/Person.xml" />
		<mapper resource="com/zdp/domain/Order.xml" />
	</mappers>
</configuration>
时间: 2024-10-07 18:32:33

Mybatis 中一对多,多对一的配置的相关文章

mybatis 一对一 一对多 多对多

一对一 一对多 多对多 原文地址:https://www.cnblogs.com/cwone/p/11909271.html

mybatis 中一对多关系简单应用

1:应用场景 主要需要实现是一个实体类中存在一个字段,该字段为一个集合,集合存放的是另外一个实体类类型 如教室类(Class)中有一个学生类(student)的集合,即表示一个教室中 存在多个学生 项目保存路径: D:\海同\mybatis\9.16\FirstMybatis 2:相关代码 创建数据库中表语句 CREATE TABLE teacher( t_id INT PRIMARY KEY AUTO_INCREMENT, t_name VARCHAR(20) ); CREATE TABLE

Hibernate中一对多的注解和配置案例

1.实现hibernate4.3.8的简单案例: 2.注解方式下的一对多和多对一: a.业务场景:学校的专业.班级.学生之间的关系:[周知:一个专业有多个班级:一个班级有多个学生] 3.xml方式下的一对多和多对一: 4.案例下载[面积分下载地址:]

mybatis的一对多,多对一,以及多对对的配置和使用

1.本文章是无意中看见易百教程的Mybatis教程才注意到这个问题,平时都仅仅是在用CRUD,忽略了这方面的问题,真实十分羞愧 2.首先我们开始对mybatis的一对多的探究 根据这个应用场景,我们需要获取在查询一个用户信息的时候还要去读取这个用户发布的帖子 现在我们来看一看用户级联文章在JavaBean中的编写方式,这就是一对多在JavaBean中的配置 现在我们再来看一看Mybatis的Mapper该如何编写一对多?很简单,就是在resultMap标签中配置<collection>标签,用

MyBatis一对多和多对多xml配置

MyBatis一对多和多对多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.ktcx.

7.Mybatis的一对多,多对一处理

一.代码简化工具Lombok(只要了解,一般不用) Lombok能以简单的注解形式来简化java代码,提高开发人员的开发效率.例如开发中经常需要写的javabean,都需要花时间去添加相应的getter/setter,也许还要去写构造器.equals等方法,而且需要维护,当属性多时会出现大量的getter/setter方法,这些显得很冗长也没有太多技术含量,一旦修改属性,就容易出现忘记修改对应方法的失误. Lombok能通过注解的方式,在编译时自动为属性生成构造器.getter/setter.e

Mybatis中配置Mapper的方法

Mybatis中配置Mapper的方法 在这篇文章中我主要想讲一下Mybatis配置文件中mappers元素的配置.关于基础部分的内容可以参考http://blog.csdn.net/elim168/article/details/40622491. 我们知道在Mybatis中定义Mapper信息有两种方式,一种是利用xml写一个对应的包含Mapper信息的配置文件:另一种就是定义一个Mapper接口,然后定义一些相应的操作方法,再辅以相应的操作注解. 现假设我有这样一个实体类: Java代码 

Mybatis中SqlMapper配置的扩展与应用(1)

奋斗了好几个晚上调试程序,写了好几篇博客,终于建立起了Mybatis配置的扩展机制.虽然扩展机制是重要的,然而如果没有真正实用的扩展功能,那也至少是不那么鼓舞人心的,这篇博客就来举几个扩展的例子. 这次研读源码的起因是Oracle和MySQL数据库的兼容性,比如在Oracle中使用双竖线作为连接符,而MySQL中使用CONCAT函数:比如Oracle中可以使用DECODE函数,而MySQL中只能使用标准的CASE WHEN:又比如Oracle中可以执行DELETE FORM TABLE WHER

Mybatis中collection实现一对多的问题

今天在使用Mybatis中的Collection获取集合信息时,数据库中对应了多条数据,但在做单元测试时只能获取到一条数据. 纠结了很久,突然想到是不是主键的问题,结果一试,还真是这么回事. Mybatis中id和result的唯一不同是id表示的结果将是当比较对象实例时用到的标识属性.这帮助来改进整体表现,特别是缓存和嵌入结果映射.因此在不同的数据中要对ID进行唯一处理,不然就会出现类似我只能查看一条数据. <resultMap type="OrderBaseInfo" id=