博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(三)mybatis级联的实现
阅读量:6904 次
发布时间:2019-06-27

本文共 2414 字,大约阅读时间需要 8 分钟。

mybatis级联的实现

开篇

        级联有三种对应关系:

                1.一对一(association):如学号与学生

      2.一对多(collection):如角色与用户

      3.多对多(discriminator):如一个角色可以对应多个用户,一个用户也可以兼任多个角色

下面做一个一对多级联

  数据库表描述:(使用的是derby数据库)

    user表中的role_id 对应role表中的id,一个用户对应一个角色,一个角色对应多个用户。

    standard_user表:

  

    role表:

 

  1.使用上篇分享的代码生成工具mybatis generator,对两个表进行代码生成(链接:)

    生成代码目录如图选中部分(最后会给出详细代码)

  2.对xml文件添加collection级联

    修改UserMapper.XML,同时在user的bean中添加Role的定义。(加粗部分)

UserMapper.xml

1 
2 3
4 5
6
7
8
9
10
11
12
13
14 ID, ACCOUNT, NAME, PASSWORD, ROLE_ID15
16 //省略sql语句代码...17

User.java

package com.standard.model;import java.io.Serializable;public class User implements Serializable{    private Integer id;        private String account;        private String name;        private String password;        private Integer roleId;        private Role role;        //get  set方法省略...}

  3.测试

1 public class UserTest { 2     static SqlSession sqlSession=null; 3     static UserMapper userMapper; 4     public static void main(String[] args ) { 5         try{ 6             sqlSession=SqlSessionFactoryUtil.openSqlSession(); 7             userMapper=sqlSession.getMapper(UserMapper.class); 8             UserTest userTest=new UserTest(); 9             //查询10             userTest.select();11             sqlSession2.commit();12             13         }catch(Exception e){14             System.err.println("---"+e.getMessage());15             sqlSession.rollback();16         }finally{17             if(sqlSession!=null){18                 sqlSession.close();19             }20         }21     }22     public List
select(){23 List
list=userMapper.select();24 int l=list.size();25 for(int j=0;j

  最后查看控制台是否能够输出角色名,若输出成功,则通过用户查询角色成功。(若需要通过角色查询用户,需要在role相关的文件进行配置)。

 

 

  【补充】

  1.mapper.xml中ResultMap可以被继承

  2.超过三层关联时尽量少用级联

  3.会有N+1性能问题:使用延迟加载解决:

    两个全局参数:lazyLoadingEnabled和aggressiveLazy Loading

    lazyLoadingEnabled:是否开启延迟加载

    aggressiveLazy Loading:对任意延迟属性的调用会使带有延迟加载属性的对象完整加载;反之,每种属性将按需加载

  配置:

  4.局部延迟加载:在association和collection元素上加属性值fetchType(eager、lazy)默认为eager,默认值会被全局变量覆盖

  5.另一种级联:尽量使用左连接,定义映射规则

    eg.(来自《深入浅出mybatis技术原理与实战》)

     discriminator是根据sex的结果来判断使用哪个类做映射。

 

结束。

转载于:https://www.cnblogs.com/zuzZ/p/8107907.html

你可能感兴趣的文章
《黑客与画家》读后感
查看>>
jq中html(),text(),val()以及js中innerHTML,innerText和value
查看>>
**RESTful API版本控制策略
查看>>
win7更改配色方案介绍~
查看>>
CImageList用法介绍
查看>>
[LeetCode] 40. Combination Sum II
查看>>
1065. 单身狗(25)
查看>>
《程序员代码面试指南》第八章 数组和矩阵问题 未排序数组中累加和小于或等于给定值的最长子数组长度...
查看>>
23种设计模式
查看>>
ES6_入门(3)_顶层对象属性
查看>>
使用VNC(ubuntu 与 windows 互连 )
查看>>
Map和Stack的STL方法简介
查看>>
Tasks Queues and Cron Jobs(任务队列和时钟守护作业)
查看>>
BZOJ1070[SCOI2007]修车——最小费用最大流
查看>>
elasticsearch映射 mapping
查看>>
UIView常用的一些方法小记之setNeedsDisplay和setNeedsLayout
查看>>
make常见报错原因分析
查看>>
gitlab的安装和配置
查看>>
[转载] OpenCV2.4.3 CheatSheet学习(二)
查看>>
Code::Blocks(完全取代VC6的开源跨平台编程利器)
查看>>