mybatis mapper配置文件结果集映射resultMap中collection属性(一对多关系结果集映射)和association属性(多对一关系结果集映射)理解:

collection的使用有两种resultMap和select,必须手动指定一种

association的使用和collection使用类似,只是right join需换成left join

1. 实体类:

 1 package com.mrlu.mybatis.domain;2 3 import java.util.List;4 5 /**6  * Created by stefan on 15-12-31.7  */8 public class User {9     private Integer id;
10     private String name;
11     private List<Account> accounts; //user (1)-->(*) account
12
13     public Integer getId() {
14         return id;
15     }
16
17     public void setId(Integer id) {
18         this.id = id;
19     }
20
21     public String getName() {
22         return name;
23     }
24
25     public void setName(String name) {
26         this.name = name;
27     }
28
29     @Override
30     public String toString() {
31         return "User{" +
32                 "id=" + id +
33                 ", name='" + name + '\'' +
34                 ", accounts=" + accounts +
35                 '}';
36     }
37
38     public List<Account> getAccounts() {
39         return accounts;
40     }
41
42     public void setAccounts(List<Account> accounts) {
43         this.accounts = accounts;
44     }
45
46 }
package com.mrlu.mybatis.domain;/*** Created by stefan on 15-12-31.*/
public class Account {private Integer id;private Integer userId;private String num;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 getNum() {return num;}public void setNum(String num) {this.num = num;}@Overridepublic String toString() {return "Account{" +"id=" + id +", userId=" + userId +", num='" + num + '\'' +'}';}
}

2. DAO:

package com.mrlu.mybatis.dao;import com.mrlu.mybatis.domain.User;import java.util.List;/*** Created by stefan on 15-12-31.*/
public interface UserDao {public void insert(User user);public List<User> selectAll();
}
package com.mrlu.mybatis.dao;import com.mrlu.mybatis.domain.Account;/*** Created by stefan on 15-12-31.*/
public interface AccountDao {public void insert(Account account);
}

3. mapper.xml

AccountDao:

<?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.mrlu.mybatis.dao.AccountDao" ><insert id="insert" useGeneratedKeys="true" keyProperty="id">INSERT INTO account(user_id, num) VALUES(#{userId}, #{num})</insert>
</mapper>

UserDao: (collection中标出的属性字段都是必须的,没标出的都是可选的)

resultMap:(若有同名属性,需指定不同的名称)

 1 <?xml version="1.0" encoding="UTF-8" ?>2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >3 <mapper namespace="com.mrlu.mybatis.dao.UserDao" >4        <resultMap id="BaseResultMap" type="com.mrlu.mybatis.domain.User">5               <result column="tid" property="id" />6               <result column="name" property="name" />7               <collection property="accounts" resultMap="accountMap" />8        </resultMap>9        <resultMap id="accountMap" type="com.mrlu.mybatis.domain.Account">
10               <result column="aid" property="id" />
11               <result column="user_id" property="userId" />
12               <result column="num" property="num" />
13        </resultMap>
14        <insert id="insert" keyProperty="id" useGeneratedKeys="true">
15               INSERT INTO user(name) VALUES(
16                #{name}
17               )
18        </insert>
19
20        <select id="selectAll" resultMap="BaseResultMap">
21               SELECT t.id as tid, t.name as name, a.id as aid,a.user_id,a.num FROM user t
22               RIGHT JOIN account a ON t.id=a.user_id
23        </select>
24 </mapper>

select:(select查询的结果需要和java bean属性名称相同)

 1 <?xml version="1.0" encoding="UTF-8" ?>2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >3 <mapper namespace="com.mrlu.mybatis.dao.UserDao" >4        <resultMap id="BaseResultMap" type="com.mrlu.mybatis.domain.User">5               <result column="id" property="id" />6               <result column="name" property="name" />7               <collection property="accounts" column="id" select="selectAccount" />8        </resultMap>9        <insert id="insert" keyProperty="id" useGeneratedKeys="true">
10               INSERT INTO user(name) VALUES(
11                #{name}
12               )
13        </insert>
14
15        <select id="selectAll" resultMap="BaseResultMap">
16               SELECT * FROM user t
17        </select>
18
19        <select id="selectAccount" resultType="com.mrlu.mybatis.domain.Account">
20               SELECT id as id, user_id as userId, num as num FROM account
21               WHERE user_id = #{id}
22        </select>
23 </mapper>

4. mybatis-config.xml

 1 <?xml version="1.0" encoding="UTF-8"?>2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">3 <configuration>4        <!--5               properties属性只能有一个,有三种方式指定:(源码: XMLConfigBuilder.#propertiesElement())6               1. 通过resource引入外部配置文件(优先级最高)7               2. 通过url指定网络文件(次之)8               3. 通过property来内部指定(优先级最低)9        -->
10        <properties resource="jdbc.properties" >
11               <property name="jdbc.url" value="jdbc:mysql://127.0.0.1:3306/user" />
12        </properties>
13        <settings>
14               <setting name="cacheEnabled" value="false"/>
15        </settings>
16        <environments default="development">
17               <environment id="development">
18                      <transactionManager type="JDBC"></transactionManager>
19                      <dataSource type="POOLED">
20                             <property name="driver" value="${jdbc.driver}" />
21                             <property name="url" value="${jdbc.url}" />
22                             <property name="username" value="${jdbc.username}" />
23                             <property name="password" value="${jdbc.password}" />
24                      </dataSource>
25               </environment>
26        </environments>
27
28        <mappers>
29               <mapper resource="com/mrlu/mybatis/dao/UserDao-select.xml" />
30               <mapper class="com.mrlu.mybatis.dao.AccountDao" />
31        </mappers>
32 </configuration>

5. 测试代码

 1 public class Main {2     public static SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();3 4     public static void main(String[] args){5         String resource = "mybatis-config.xml";6         try {7             Reader reader = Resources.getResourceAsReader(resource);8             SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(reader);9             SqlSession sqlSession  = sqlSessionFactory.openSession();
10             UserDao userDao = sqlSession.getMapper(UserDao.class);
11             AccountDao accountDao = sqlSession.getMapper(AccountDao.class);
12
13             User user = new User();
14             user.setId(2);
15             user.setName("z3");
16             userDao.insert(user);
17
18             for (int i = 0; i < 3; i++) {
19                 Account account = new Account();
20                 account.setUserId(user.getId());
21                 account.setNum("123");
22                 accountDao.insert(account);
23             }
24
25             List<User> re = userDao.selectAll();
26             System.out.println("result....");
27             for(User user1: re){
28                 System.out.println(user1);
29             }
30
31             sqlSession.commit(); //这句很重要,因为SqlSessionFactory#openSession()方法默认设置的autoCommit为false,即不自动提交,所以如果不手动调用,则插入不成功
32         } catch (IOException e) {
33             e.printStackTrace();
34         }
35     }
36 } 

6. association(多对一结果集转换)的示例:

 1 <?xml version="1.0" encoding="UTF-8" ?>2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >3 <mapper namespace="com.mrlu.mybatis.dao.AccountDao" >4     <resultMap id="BaseResultMap" type="com.mrlu.mybatis.domain.Account">5         <result column="aid" property="id" />6         <result column="user_id" property="userId" />7         <result column="num" property="num" />8         <association property="user" resultMap="userMap" />9     </resultMap>
10     <resultMap id="userMap" type="com.mrlu.mybatis.domain.User">
11         <result column="tid" property="id" />
12         <result column="name" property="name" />
13     </resultMap>
14
15        <insert id="insert" useGeneratedKeys="true" keyProperty="id">
16               INSERT INTO account(user_id, num) VALUES(
17                 #{userId}, #{num}
18               )
19        </insert>
20
21     <select id="selectAll" resultMap="BaseResultMap">
22         SELECT a.id as aid, t.id as tid, a.user_id as user_id, num as num, t.name as name  FROM account a
23         LEFT JOIN user t on a.user_id = t.id
24     </select>
25 </mapper>

关于mybatis中mapper文件resultMap中collection和association的使用相关推荐

  1. 【Mybatis】Mapper文件中sql不等于的写法

    [Mybatis]Mapper文件中sql不等于的写法 认识误区:在xml文件中,是 不能直接使用 < .>.& 的.因为会被语法检查而报错. 正确使用的两种方法 1. 第一种:转 ...

  2. Mybatis的mapper文件中涉及大于号小于号等特殊符号使用

    什么是 MyBatis? MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBati ...

  3. python中按照文件夹中文件的排列顺序读取文件内容,python文件显示和windows目录显示一致

    原创 python中按照文件夹中文件的排列顺序读取文件内容 2018-12-06 11:49:18 途径北海道 阅读数 3891 更多 分类专栏: python 版权声明:本文为博主原创文章,遵循 C ...

  4. python中读取文件过程中seek()函数的使用

    python中读取文件过程中seek()函数的使用 目录 概述: 语法: 参数: 返回值: 实例: 概述: seek() 方法用于移动文件读取指针到指定位置. 语法: seek() 方法语法如下: 文 ...

  5. Goland中在文件模板中为go文件添加个人声明

    Goland中在文件模板中为go文件添加个人声明 打开文件模板菜单 修改内容如下: 效果演示 打开文件模板菜单 从goland左上角依次点击: [File] – [Settings] – [Edito ...

  6. Mybatis工作流程,附带mybatis的mapper文件和config配置文件模板。mapper文件和dao接口的关系——xml中的namespace和sql标签id命名要求。

    1. Mybatis工作流程 1.1 使用MySQL创建数据库girls并生成一个表boys,如下图. 1.2 创建该表对应的简单实体类Boys,如下图. 1.3 创建Dao接口以及和接口同名的map ...

  7. mybatis的Mapper文件中的大于小于号,为什么要转成“lt ;”、“gt ;”,转义后的lt、gt又代表什么?

    为什么的Mapper文件中的"<".">" 要转成"&lt ;"."&gt ;" 问题分析 ...

  8. 【转】淮左白衣-解决maven管理SSM中mybatis的mapper文件扫描失败的问题

    本文链接: https://blog.csdn.net/youngyouth/article/details/86468910 好久没有写博客了,11月底来到公司实习,上个月写个小demo,趁此回顾下 ...

  9. mybatis的Mapper文件配置

    一.resultMap resultMap 元素是 MyBatis 中最重要最强大的元素. 该配置节点下如下子节点配置 id – 一个 ID 结果;标记结果作为 ID 可以帮助提高整体效能 const ...

最新文章

  1. 约瑟夫环之循环链表实现
  2. 如何使用logminer查看日志内容
  3. 2020最详细安装Ubuntu指南
  4. 【目标检测_概述】recent advances in deep learning for object detection_2019
  5. docker的安装与安装mysql(mac,centos为例)
  6. 文本删除空行_010 Editor for mac(文本和十六进制编辑器)
  7. 【转】Visual Studio 2005/2008中的快捷键与小技巧整理
  8. 解读:滴滴“猜你去哪儿”功能的算法实现
  9. 引领移动协同需求Cnskype结合微信企业号推出企业办公、通讯整合方案
  10. kron matlab_使用kron来实现repmat, repelem的功能
  11. oracle sql的优化方法
  12. CloseHandle(),TerminateThread(),ExitThread()的区别
  13. 各个版本的金蝶kis的区别
  14. DNS 解析器(DNS Resolver)
  15. 识别IOS和android方法
  16. mysql 备份 发送邮件_mysql 自动备份发邮件 到指定邮箱
  17. GNU/Linux与Windows魔兽争霸3局域网对战安装与配置
  18. ESP32程序调试 win10 使用OPENOCD及GDB工具
  19. ExecuteNonQuery(),ExecuteDataSet() ,ExecuteReader() ,ExecuteScalar(),DataTable() 用法
  20. 图书信息管理系统(数据结构顺序表,c语言版)

热门文章

  1. JavaScript笔记8-DOM中的事件、获取元素、操作元素
  2. Matlab图像处理基础(1):图像表示,点处理
  3. 我的三个月实习——PB运维(2)
  4. plc的毕业设计冷门题目_PLC毕业设计题目
  5. Go语言十周年 | Go精华资料整理
  6. PDF文档工具:pdfFactory快照功能详解
  7. 我,北漂5年程序员,终于在帝都全款买房
  8. 安装了微信支付的安全控件,检测不到,总提示安装-解决方案
  9. 唐诗宋词 v3.0 软件下载 唐诗宋词三百首 唐诗三百首 宋词三百首 唐诗三百首下载 宋词三百首下载 SQL优化前后的代码:...
  10. vscode php中文乱码,vscode打开乱码怎么办