mybatis_映射查询

一、一对一映射查询:

第一种方式(手动映射):借助resultType属性,定义专门的pojo类作为输出类型,其中该po类中封装了查询结果集中所有的字段。此方法较为简单,企业中使用普遍。

 1   <!--
 2         【手动映射:】
 3         查询用户和用户所属的订单信息:
 4         定义一个包含用户和订单实体的所有属性的全pojo类,将查询结果中的所有字段和全pojo类中的属性相对应。
 5      -->
 6     <select id="findUserAndOrders1" resultType="com.itheima.mybatis.pojo.OrdersAnduser">
 7         select o.*,u.id uid,u.username,u.address,u.birthday
 8         from user u,orders o
 9         where u.id=o.user_id
10     </select>

第二种方式(自动映射):借助resultMap属性,定义专门的resultMap用于映射一对一查询结果。

以用户订单关联关系为例,一个订单只能所属一个用户(一对一查询)

 1    <!--
 2         type:表示返回的数据类型
 3         id:表示resultMap的唯一标识
 4      -->
 5     <resultMap type="com.itheima.mybatis.pojo.Orders" id="OrdersUserResultMap">
 6         <!-- 主键列对应的实体类中的唯一属性 -->
 7         <id column="id" property="id"/>
 8         <!-- 普通列对应实体类中的普通属性 -->
 9         <result column="user_id" property="userId"/>
10         <result column="number" property="number"/>
11         <result column="createtime" property="createtime"/>
12         <result column="note" property="note"/>
13         <!-- association表示进行关联查询的实体映射
14             property:表示被关联对象在查询对象中的属性民称
15             javaType:表示被关联对象的全路径名称
16          -->
17         <association property="user" javaType="com.itheima.mybatis.pojo.User">
18             <id column="uid" property="id"/>
19             <result column="username" property="username"/>
20             <result column="gender" property="gender"/>
21             <result column="birthday" property="birthday"/>
22             <result column="address" property="address"/>
23         </association>
24     </resultMap>
25     <!--
26         【自动映射:】
27         使用resultMap,封装一对一映射关系:
28         在orders订单类配置User对象,一个订单只能所属一个用户。
29     -->
30     <select id="findUserAndOrders2" resultMap="OrdersUserResultMap">
31         select o.*,u.id uid,u.username,u.address,u.birthday
32         from user u,orders o
33         where u.id=o.user_id
34     </select>

二、一对多映射查询:

只能使用手动映射, 在resultMap中可以使用collection标签来标记对集合对象的关系映射。

以用户订单关联关系为例,一个用户可以有多个订单(一对多查询)

 1   <!-- 一对多映射: -->
 2     <select id="findUserAndOrders3" resultMap="UserOrdersResultMap">
 3         select u.*,o.id oid,o.createtime,o.number
 4         from user u,orders o
 5         where u.id=o.user_id
 6     </select>
 7     <!--
 8         type:表示返回的数据类型
 9         id:表示resultMap的唯一标识
10      -->
11     <resultMap type="com.itheima.mybatis.pojo.User" id="UserOrdersResultMap">
12         <id column="oid" property="id"/>
13         <result column="username" property="username"/>
14         <result column="gender" property="gender"/>
15         <result column="birthday" property="birthday"/>
16         <result column="address" property="address"/>
17         <!--
18             collection:表示关联查询的结果集
19             property:关联查询的结果集存储在User对象的上的哪个属性
20             ofType:表示返回集合中的数据类型
21          -->
22         <collection property="ordersList" ofType="com.itheima.mybatis.pojo.Orders">
23             <id column="id" property="id"/>
24             <result column="user_id" property="userId"/>
25             <result column="number" property="number"/>
26             <result column="createtime" property="createtime"/>
27             <result column="note" property="note"/>
28         </collection>
29     </resultMap>
时间: 2024-10-25 21:57:29

mybatis_映射查询的相关文章

MyBatis高级映射查询(3)

一.数据库数据和项目搭建过程 1.主要要四张表,分别为user用户信息表.items商品表.orderdetail订单明细表.orders订单表.表的结构和数据如下: 表结构 CREATE DATABASE mybatis DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci CREATE TABLE `items` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `name` VARCHAR(32) NOT NUL

MyBatis之Mapper XML 文件详解(五)-自动映射查询结果

正如你在前面一节看到的,在简单的场景下,MyBatis可以替你自动映射查询结果. 如果遇到复杂的场景,你需要构建一个result map. 但是在本节你将看到,你也可以混合使用这两种策略. 让我们到深一点的层面上看看自动映射是怎样工作的. 当自动映射查询结果时,MyBatis会获取sql返回的列名并在java类中查找相同名字的属性(忽略大小写). 这意味着如果Mybatis发现了ID列和id属性,Mybatis会将ID的值赋给id. 通常数据库列使用大写单词命名,单词间用下划线分隔:而java属

hibernate里联合主键composite-id映射,查询单个主键的问题(转)

今天项目中遇到这个问题,搞了大半天,我郁闷...hibernate里联合主键配置(多个字段一起作为主键) <class name="com.cskj.hibernate.map.BbWjjc" table="bb_wjjc" schema="dbo" catalog="wjgl">        <composite-id name="id" class="com.cskj.hi

hibernate里联合主键composite-id映射,查询单个主键的问题

今天项目中遇到这个问题,搞了大半天,现在记录下来hibernate里联合主键配置(多个字段一起作为主键) <class name="com.cskj.hibernate.map.BbWjjc" table="bb_wjjc" schema="dbo" catalog="wjgl"> <composite-id name="id" class="com.cskj.hibernate

mybatis 一对一,一对多,多对多关系映射查询操作

定义两个类(对应数据库内两张表) User ,Account,每个Account属于一个User User类 及其 对应的IUserDao package com.itheima.domain; import java.io.Serializable; import java.util.Date; import java.util.List; public class User implements Serializable { private Integer id; private Strin

Mybatis_映射文件配置

获取自增主键的值 若数据库支持自动生成主键的字段(比如 MySQL 和 SQL Server),则可以设置 useGeneratedKeys=”true”,然后再把 keyProperty 设置到目标属性上. <insert id="addEmp" useGeneratedKeys="true" keyProperty="id"> insert into tbl_employee (last_name,email,gender) VA

MyBatis_关联查询

1:N dao层: 测试 N:1

MyBatis_模糊查询

like 条件

Java框架之MyBatis 06-全局配置-mapper映射-分步查询

MyBatis MyBatis是Apache的一个开源项目iBatis, iBatis一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架. iBatis  提供的持久层框架包括SQL Maps和Data Access Objects(DAO) Mybatis 是一个 半自动的ORM(Object   Relation  Mapping)框架 sql和java编码分开,功能边界清晰,一个专注业务.一个专注数据 MyBatis全局配置 MyBatis全局配置文件结