MyBatis的一对一关联关系映射
程序员文章站
2022-04-15 13:43:00
原文链接:http://www.yiidian.com/mybatis/one to one.html 1 什么是一对一、一对多映射? 以用户和订单举例, 一对一 : 一个订单只属于一个用户 == 订单对用户是一对一关系 一对多 : 一个用户可以拥有多个订单 == 用户对订单是一对多关系 注意:在M ......
原文链接:http://www.yiidian.com/mybatis/one-to-one.html
1 什么是一对一、一对多映射?
以用户和订单举例,
一对一 : 一个订单只属于一个用户 ==> 订单对用户是一对一关系
一对多 : 一个用户可以拥有多个订单 ==> 用户对订单是一对多关系
注意:在mybatis中,如果要完成多对多关系,其实就是两个一对多映射!
接下来先讲解mybatis的一对一映射如何实现。
2 建立表结构
2.1 创建用户表
create table `t_user` ( `id` int(11) default null, `username` varchar(50) default null, `password` varchar(50) default null ) engine=innodb default charset=utf8
2.2 创建订单表
create table `t_order` ( `id` int(11) default null, `orderno` varchar(100) default null, `amount` double default null, `user_id` int(11) default null ) engine=innodb default charset=utf8
2.3 插入测试数据
3 设计pojo实体,建立关系
3.1 用户实体类
package com.yiidian.domain; import java.util.list; /** * 用户实体 * 一点教程网 - www.yiidian.com */ public class user { private integer id; private string username; public void setorders(list<order> orders) { this.orders = orders; } public integer getid() { return id; } public void setid(integer id) { this.id = id; } public string getusername() { return username; } public void setusername(string username) { this.username = username; } public string getpassword() { return password; } public void setpassword(string password) { this.password = password; } }
3.2 订单实体类
package com.yiidian.domain; /** * 订单实体 * 一点教程网 - www.yiidian.com */ public class order { private integer id; private string orderno; private double amount; private user user; public integer getid() { return id; } public void setid(integer id) { this.id = id; } public string getorderno() { return orderno; } public void setorderno(string orderno) { this.orderno = orderno; } public double getamount() { return amount; } public void setamount(double amount) { this.amount = amount; } public user getuser() { return user; } public void setuser(user user) { this.user = user; } }
order实体类,通过user属性建立跟user实体的关系。注意,这里是一个user。
4 编写dao接口
4.1 userdao接口
package com.yiidian.dao; import com.yiidian.domain.user; import java.util.list; /** * 用户dao接口 * 一点教程网 - www.yiidian.com */ public interface userdao { }
4.2 orderdao接口
package com.yiidian.dao; import com.yiidian.domain.order; import com.yiidian.domain.user; import java.util.list; /** * 订单dao接口 * 一点教程网 - www.yiidian.com */ public interface orderdao { /** * 查询所有订单 */ public list<order> findallorders(); }
5 编写dao映射配置
5.1 userdao.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"> <!-- namespace: 用于指定该映射文件需要映射的dao接口 --> <mapper namespace="com.yiidian.dao.userdao"> </mapper>
5.2 orderdao.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"> <!-- namespace: 用于指定该映射文件需要映射的dao接口 --> <mapper namespace="com.yiidian.dao.orderdao"> <!--一对一映射--> <resultmap id="orderresultmap" type="com.yiidian.domain.order"> <id property="id" column="oid"/> <result property="orderno" column="orderno"/> <result property="amount" column="amount"/> <!--关联查询订单所属的用户--> <association property="user" column="id" javatype="com.yiidian.domain.user"> <id property="id" column="id"/> <result property="username" column="username"/> <result property="password" column="password"/> </association> </resultmap> <select id="findallorders" resultmap="orderresultmap"> select o.id oid, o.orderno orderno, o.amount amount, u.* from t_order o left join t_user u on o.user_id = u.id </select> </mapper>
- association:用在一对一关联映射
- property:对应order类的user属性
- column:对应外键字段名称
- javatype:user类的全限定名称
6 编写测试类
package com.yiidian.mybatis; import com.yiidian.dao.orderdao; import com.yiidian.domain.order; import com.yiidian.utils.mybatisutils; import org.apache.ibatis.session.sqlsession; import org.junit.test; import java.util.arraylist; import java.util.list; /** * mybatis测试类 - 一对一映射 * 一点教程网 - www.yiidian.com */ public class testone2one { /** * 测试一对一映射 */ @test public void testorderdao(){ //1.获取sqlsession对象 sqlsession sqlsession = mybatisutils.getsession(); //2.创建mapper代理对象 orderdao orderdao = sqlsession.getmapper(orderdao.class); //3.调用方法 list<order> list = orderdao.findallorders(); system.out.println(list); //4.关闭连接 sqlsession.close(); } }
7 运行测试类
以debug模式启动测试类,查看list变量的情况,可以看到order对象中成功封装了user对象的数据!
源码下载:https://pan.baidu.com/s/1jzrfapjqb_vhi_glgkpo4g
欢迎关注我的公众号::一点教程。获得独家整理的学习资源和日常干货推送。
如果您对我的系列教程感兴趣,也可以关注我的网站: