日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

mybatis教程--映射之一对一查询

發(fā)布時(shí)間:2025/3/20 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mybatis教程--映射之一对一查询 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一對一查詢

這里我們是在用戶表,訂單表,訂單詳情表,商品表的基礎(chǔ)上進(jìn)行講解的。下面我也會把這四張表的po類列出來。

1.1?需求

查詢訂單信息關(guān)聯(lián)查詢用戶信息

1.2?sql語句

查詢語句:

先確定主查詢表:訂單信息表

再確定關(guān)聯(lián)查詢表:用戶信息

通過orders關(guān)聯(lián)查詢用戶使用user_id一個(gè)外鍵,只能關(guān)聯(lián)查詢出一條用戶記錄就可以使用內(nèi)連接

SELECTorders.*,user.username,user.sexFROMorders,USERWHERE orders.user_id = user.id

1.3?使用resultType實(shí)現(xiàn)

1.3.1?創(chuàng)建po類

基礎(chǔ)的單表的 po類:

?user.java

package com.sihai.mybatis.po;import java.io.Serializable; import java.util.Date; import java.util.List;/*** @author sihai*/ public class User implements Serializable {private int id;private String username;// 用戶姓名private String sex;// 性別private Date birthday;// 生日private String address;// 地址//多個(gè)訂單private List<Orders> orderlist;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public List<Orders> getOrderlist() {return orderlist;}public void setOrderlist(List<Orders> orderlist) {this.orderlist = orderlist;}@Overridepublic String toString() {return "User [id=" + id + ", username=" + username + ", sex=" + sex+ ", birthday=" + birthday + ", address=" + address + "]";}}


items.java

package com.sihai.mybatis.po;import java.io.Serializable; import java.util.Date;public class Items implements Serializable {private Integer id;private String name;private Float price;private String pic;private Date createtime;private String detail;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 == null ? null : name.trim();}public Float getPrice() {return price;}public void setPrice(Float price) {this.price = price;}public String getPic() {return pic;}public void setPic(String pic) {this.pic = pic == null ? null : pic.trim();}public Date getCreatetime() {return createtime;}public void setCreatetime(Date createtime) {this.createtime = createtime;}public String getDetail() {return detail;}public void setDetail(String detail) {this.detail = detail == null ? null : detail.trim();}@Overridepublic String toString() {return "Items [id=" + id + ", name=" + name + ", price=" + price+ ", pic=" + pic + ", createtime=" + createtime + ", detail="+ detail + "]";}}


order.java

package com.sihai.mybatis.po;import java.io.Serializable; import java.util.Date; import java.util.List;public class Orders implements Serializable {private Integer id;private Integer userId;private String number;private Date createtime;private String note;//關(guān)聯(lián)用戶信息private User user;//訂單明細(xì)private List<Orderdetail> orderdetails;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public Integer getUserId() {return userId;}public void setUserId(Integer userId) {this.userId = userId;}public String getNumber() {return number;}public void setNumber(String number) {this.number = number == null ? null : number.trim();}public Date getCreatetime() {return createtime;}public void setCreatetime(Date createtime) {this.createtime = createtime;}public String getNote() {return note;}public void setNote(String note) {this.note = note == null ? null : note.trim();}public User getUser() {return user;}public void setUser(User user) {this.user = user;}public List<Orderdetail> getOrderdetails() {return orderdetails;}public void setOrderdetails(List<Orderdetail> orderdetails) {this.orderdetails = orderdetails;}}


orderDetails.java

package com.sihai.mybatis.po;import java.io.Serializable;public class Orderdetail implements Serializable {private Integer id;private Integer ordersId;private Integer itemsId;private Integer itemsNum;//商品信息private Items items;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public Integer getOrdersId() {return ordersId;}public void setOrdersId(Integer ordersId) {this.ordersId = ordersId;}public Integer getItemsId() {return itemsId;}public void setItemsId(Integer itemsId) {this.itemsId = itemsId;}public Integer getItemsNum() {return itemsNum;}public void setItemsNum(Integer itemsNum) {this.itemsNum = itemsNum;}public Items getItems() {return items;}public void setItems(Items items) {this.items = items;}@Overridepublic String toString() {return "Orderdetail [id=" + id + ", ordersId=" + ordersId+ ", itemsId=" + itemsId + ", itemsNum=" + itemsNum + "]";}}

1.3.2?一對一查詢映射的pojo

創(chuàng)建pojo包括 訂單信息和用戶信息,resultType才可以完成映射。

創(chuàng)建OrderCustom作為自定義pojo,繼承sql查詢列多的po類。

?OrderCustom.java

package com.sihai.mybatis.po; /** * @author sihai */

public class OrderCustom extends Orders {//補(bǔ)充用戶信息private String username;private String sex;private String address;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}@Overridepublic String toString() {return "OrderCustom [username=" + username + ", sex=" + sex+ ", address=" + address + "]";}}

1.3.3?mapper.xml

定義mapper.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.sihai.mybatis.mapper.OrdersMapperCustom"><!-- 一對一查詢r(jià)esultMap --><resultMap type="orders" id="ordersUserResultMap"><!-- 完成了訂單信息的映射配置 --><!-- id:訂單關(guān)聯(lián)用戶查詢的唯 一 標(biāo)識 --><id column="id" property="id"/><result column="user_id" property="userId"/><result column="number" property="number"/><result column="createtime" property="createtime"/><result column="note" property="note"/><!-- 下邊完成關(guān)聯(lián)信息的映射association:用于對關(guān)聯(lián)信息映射到單個(gè)pojoproperty:要將關(guān)聯(lián)信息映射到orders的哪個(gè)屬性中javaType:關(guān)聯(lián)信息映射到orders的屬性的類型,是user的類型--><association property="user" javaType="user"><!-- id:關(guān)聯(lián)信息的唯 一標(biāo)識 --><!-- property: 要映射到user的哪個(gè)屬性中--><id column="user_id" property="id"/><!-- result就是普通列的映射 --><result column="username" property="username"/><result column="sex" property="sex"/></association></resultMap><!-- 一對一查詢延遲加載 的配置 --><resultMap type="orders" id="orderCustomLazyLoading"><!-- 完成了訂單信息的映射配置 --><!-- id:訂單關(guān)聯(lián)用戶查詢的唯 一 標(biāo)識 --><id column="id" property="id" /><result column="user_id" property="userId" /><result column="number" property="number" /><result column="createtime" property="createtime" /><result column="note" property="note" /><!-- 配置用戶信息的延遲加載 select:延遲加載執(zhí)行的sql所在的statement的id,如果不在同一個(gè)namespace需要加namespace sql:根據(jù)用戶id查詢用戶信息 column:關(guān)聯(lián)查詢的列 property:將關(guān)聯(lián)查詢的用戶信息設(shè)置到Orders的哪個(gè)屬性 --><association property="user"select="com.sihai.mybatis.mapper.UserMapper.findUserById" column="user_id"></association></resultMap><!-- 一對一查詢使用reusltType完成查詢訂單關(guān)聯(lián)查詢用戶信息--><select id="findOrderUserList" resultType="orderCustom">SELECT orders.*,user.username,user.sex FROMorders,USER WHERE orders.user_id = user.id </select><!-- 一對一查詢使用reusltMap完成查詢訂單關(guān)聯(lián)查詢用戶信息--><select id="findOrderUserListResultMap" resultMap="ordersUserResultMap" >SELECT orders.*,user.username,user.sex FROMorders,USER WHERE orders.user_id = user.id </select><!-- 一對一查詢延遲加載開始只查詢訂單,對用戶信息進(jìn)行延遲加載 --><select id="findOrderUserListLazyLoading" resultMap="orderCustomLazyLoading">SELECT orders.*FROMorders</select></mapper>

1.3.4?mapper.java

package com.sihai.mybatis.mapper;import java.util.List;import com.sihai.mybatis.po.OrderCustom; import com.sihai.mybatis.po.Orders; import com.sihai.mybatis.po.User; /** * @author sihai */

public interface OrdersMapperCustom {// 一對一查詢,查詢訂單關(guān)聯(lián)查詢用戶,使用resultTypepublic List<OrderCustom> findOrderUserList() throws Exception;// 一對一查詢,使用resultMappublic List<Orders> findOrderUserListResultMap() throws Exception;//一對一查詢,延遲加載public List<Orders> findOrderUserListLazyLoading() throws Exception;// 一對多查詢,使用resultMappublic List<Orders> findOrderAndOrderDetails() throws Exception;// 一對多查詢,使用resultMappublic List<User> findUserOrderDetail() throws Exception;}

1.4?使用resultMap實(shí)現(xiàn)一對一

1.4.1?resultMap映射思路

resultMap提供一對一關(guān)聯(lián)查詢的映射和一對多關(guān)聯(lián)查詢映射,一對一映射思路:將關(guān)聯(lián)查詢的信息映射到pojo中,如下:

在Orders類中創(chuàng)建一個(gè)User屬性,將關(guān)聯(lián)查詢的信息映射到User屬性中。

private Integer id;private Integer userId;private String number;private Date createtime;private String note;//關(guān)聯(lián)用戶信息private User user;

1.4.2?mapper.xml

<!-- 一對一查詢使用reusltMap完成查詢訂單關(guān)聯(lián)查詢用戶信息--><select id="findOrderUserListResultMap" resultMap="ordersUserResultMap" >SELECT orders.*,user.username,user.sex FROMorders,USER WHERE orders.user_id = user.id </select>

1.4.3?resultMap定義

<!-- 一對一查詢r(jià)esultMap --><resultMap type="orders" id="ordersUserResultMap"><!-- 完成了訂單信息的映射配置 --><!-- id:訂單關(guān)聯(lián)用戶查詢的唯 一 標(biāo)識 --><id column="id" property="id"/><result column="user_id" property="userId"/><result column="number" property="number"/><result column="createtime" property="createtime"/><result column="note" property="note"/><!-- 下邊完成關(guān)聯(lián)信息的映射association:用于對關(guān)聯(lián)信息映射到單個(gè)pojoproperty:要將關(guān)聯(lián)信息映射到orders的哪個(gè)屬性中javaType:關(guān)聯(lián)信息映射到orders的屬性的類型,是user的類型--><association property="user" javaType="user"><!-- id:關(guān)聯(lián)信息的唯 一標(biāo)識 --><!-- property: 要映射到user的哪個(gè)屬性中--><id column="user_id" property="id"/><!-- result就是普通列的映射 --><result column="username" property="username"/><result column="sex" property="sex"/></association></resultMap>

1.4.4?mapper.java

// 一對一查詢,使用resultMappublic List<Orders> findOrderUserListResultMap() throws Exception;

1.5 總結(jié)

resultType:要自定義pojo 保證sql查詢列和pojo的屬性對應(yīng),這種方法相對較簡單,所以應(yīng)用廣泛。

resultMap:使用association完成一對一映射需要配置一個(gè)resultMap,過程有點(diǎn)復(fù)雜,如果要實(shí)現(xiàn)延遲加載就只能用resultMap實(shí)現(xiàn) ,如果為了方便對關(guān)聯(lián)信息進(jìn)行解析,也可以用association將關(guān)聯(lián)信息映射到pojo中方便解析。

總結(jié)

以上是生活随笔為你收集整理的mybatis教程--映射之一对一查询的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。