文档章节

MyBatis学习整理0

阿信sxq
 阿信sxq
发布于 2016/08/19 15:37
字数 1238
阅读 102
收藏 1

学习java的基本都会“ssh”,我也不例外,其中就包括了hibernate,当时感觉挺神奇的,去年开始接触mybatis,一对比发现,这mybatis有不少优点。

下面分享一下我在学习mybatis的时候整理的内容。

1、组织

基本配置的xml
映射关系的xml
映射的接口
获取`session`的工具类
实体类

这里需要注意的是:

  1. 两个xml文件都是使用dtd进行约束描述的,(dtd文件不一样);
  2. 基本配置的xml文件配置项是有顺序的,properties,settings,typeAliases,typeHandlers,objectFactory,objectWrapperFactory,plugins,environments,databaseIdProvider,mappers;
  3. 映射配置可以使用xml也可以使用接口类,而且可以共存;
  4. 使用接口类进行映射配置,不需要写实现类,只需要在接口方法上进行注解配置即可;
  5. 接口上注解配置映射时,可以直接写sql,也可以使用单独的工具类提供sql,不同的注解配置;
  6. 对于使用单独工具类为注解接口提供sql的情况,需要在注解时为参数提供名字,同时工具类中使用`SQL`类,进行链式编程

2、实体类中的属性名和表中的字段名不一致时

当实体类中的属性名和表中的字段名不一致时,使用MyBatis进行查询操作时无法查询出相应的结果的问题以及针对问题采用的两种办法:

1. 通过在查询的sql语句中定义字段名的别名,让字段名的别名和实体类的属性名一致,这样就可以表的字段名和实体类的属性名一一对应上了,
    这种方式是通过在sql语句中定义别名来解决字段名和属性名的映射关系的。

2. 通过`<resultMap>`来映射字段名和实体类属性名的一一对应关系。这种方式是使用MyBatis提供的解决方式来解决字段名和属性名的映射关系的。

3、SQL类的链式编程

首先需要新建SQL类的实例,然后调用构造sql的方法

该类的每一个方法均返回当前对象的引用,故使得链式编程成为可能,按照sql语句的顺序依次调用对应的方法即可

在构造中,函数会接收到一个`Map<String, Object>`的对象列表,里面键就是对应接口方法的参数的注解名称,在向对应的`SQL`的方法传参数的时候要使用对应的占位符,例如对于键`id`,需要使用占位符`#{id}`,甚至可以加上数据的类型`#{id,javaType=string,jdbcType=VARCHAR}`

4、关联映射

一对一

处理一对一的关联映射,可以按照两种处理思路:

- 一次查询出需要的数据,在作映射的时候进行嵌套
- 分两次进行查询,根据第一次查询出来的结果进行第二次查询

两种处理方式都需要使用到`association`标签,分别的用法为(分别对应两种处理方式):

<association property="teacher" javaType="Teacher">
    <id property="id" column="t_id" />
    <result property="name" column="t_name" />
</association>

 

<association property="teacher" column="teacher_id" select="getTeacher" />
<!-- 需要借助另外的一个查询映射配置 -->

`association`标签可用的属性如下:

- property:对象属性的名称
- javaType:对象属性的类型
- column:所对应的外键字段名称
- select:使用另一个查询封装的结果

一对多

处理一对多关联和处理一对一关联类似,使用collection标签来解决一对多的关联查询,ofType属性指定集合中元素的对象类型。

5、mybatis中调用存储过程

在xml中还是普通的标签,但是多了属性`statementType="CALLABLE"`,
并且配置单独的parameterMap属性和节点进行参数的配置,使用mode="IN"配置参数的类型

    <!--
        查询得到男性或女性的数量, 如果传入的是0就女性否则是男性
     -->
    <select id="getUserCount" parameterMap="getUserCountMap" statementType="CALLABLE">
        CALL ges_user_count(?,?)
    </select>
    
    <!--
        parameterMap.put("sexid", 0);
        parameterMap.put("usercount", -1);
     -->
    <parameterMap type="java.util.Map" id="getUserCountMap">
        <parameter property="sexid" mode="IN" jdbcType="INTEGER" />
        <parameter property="usercount" mode="OUT" jdbcType="INTEGER" />
    </parameterMap>

在调用的时候和普通的调用没什么较大的区别,只是返回的值是通过从传入的map中获取的,而不是方法的返回值

    String statement = "mapper.userMapper.getUserCount";// 映射sql的标识字符串
    Map<String, Integer> parameterMap = new HashMap<String, Integer>();
    parameterMap.put("sexid", 0);
    parameterMap.put("usercount", -1);
    sqlSession.selectOne(statement, parameterMap);
    Integer result = parameterMap.get("usercount");
    System.out.println(result);

对应查询方法的返回值是null

6、补充说一下

可能会觉得奇怪,怎么感觉文章里面的内容了乱七八糟的?这里面的内容是我当时学习的时候记下来的,现在只是粘在了一起而已,下一篇将慢慢叙述知识点了

© 著作权归作者所有

共有 人打赏支持
下一篇: SVN日常使用
阿信sxq

阿信sxq

粉丝 228
博文 83
码字总数 73652
作品 1
成都
后端工程师
私信 提问
加载中

评论(2)

阿信sxq
阿信sxq

引用来自“bblzjp”的评论

13正在学
13学习起来很容易的,一周时间就可以比较熟练了
繁华成落叶
繁华成落叶
13正在学
Mysql配置参数innodb_buffer_pool_size的学习与整理

原文地址:Mysql配置参数innodbbufferpoolsize的学习与整理 这半个月来,一直在做一些关于服务器交易端性能的提升工作,主要是分析和讨论交易端性能的瓶颈,找出导致性能减慢的原因,拟定出合...

Realfighter
2015/01/15
0
1
ZHENFENGSHISAN/perfect-ssm

Quick Start 项目简介 ssm系列 ssm-demo:Spring+SpringMVC+Mybatis+easyUI整合 perfect-ssm:RESTful API+redis缓存 ssm-cluster:前后端分离+集群部署 ssm-dubbo:dubbo服务化 ssm-micro-se......

ZHENFENGSHISAN
2017/09/18
0
0
MyBatis学习笔记(三) 关联关系

首先给大家推荐几个网页: http://blog.csdn.net/isea533/article/category/2092001 没事看看 - MyBatis工具:www.mybatis.tk http://www.mybatis.org/mybatis-3/zh/getting-started.html 入......

陈嘻嘻哈哈
2016/02/27
0
0
关于MyBatis sqlSession的一点整理

原文地址:关于MyBatis sqlSession的一点整理 工作中,需要学习一下MyBatis sqlSession的产生过程,翻看了mybatis-spring的源码,阅读了一些mybatis的相关doc,对mybatis sqlSession有了一些...

Realfighter
2015/01/04
0
1
ORM框架 hibernate和mybatis 连接数据详解

工作中,需要学习一下MyBatis sqlSession的产生过程,翻看了mybatis-spring的源码,阅读了一些mybatis的相关doc,对mybatis sqlSession有了一些认知和理解,这里简单的总结和整理一下。 首先...

LYQ1990
2016/04/28
37
0

没有更多内容

加载失败,请刷新页面

加载更多

《大数据白皮书(2018年)》发布(解读版+完整版PPT)

数据观微信小编获悉,为更好促进大数据与实体经济融合,研判技术发展路径,总结管理痛点、描绘发展趋势,总结行业应用渗透路径,4月18日,在“2018大数据产业峰会”上,中国信息通信研究院(...

了凡川
9分钟前
0
0
从小白到月薪上万,一份完整的大数据路线分析出自我成长书单

大数据原理与实践 大数据分三大部分,包括:大数据基础、技术原理和创新实践。 大数据基础部分主要介绍大数据的基本概念、技术架构和大数据的应用场景; 第二部分大数据技术原理主要介绍大数...

董黎明
20分钟前
0
0
斗鱼直播确定赴美IPO 此前融资额已达70亿元

据最新消息,斗鱼直播高层人士向新京报证实,斗鱼直播确定赴美IPO(首次公开募股),此前融资额已达70亿元。 此前,多家媒体报道,由国内知名直播平台斗鱼(Douyu)已秘密提交赴美IPO文件。 ...

ThinkSNS官方帐号
22分钟前
0
0
虎牙直播在微服务改造方面的实践和总结

相比文字和图片,直播提供了人与人之间更丰富的沟通形式,其对平台稳定性的考验很大,那么倡导“以技术驱动娱乐”的虎牙直播(以下简称“虎牙”)是如何在技术上赋能娱乐,本文将为您介绍虎牙...

阿里云云栖社区
25分钟前
0
0
采用SpringBoot整合Mybatis框架插入数据时报错及解决

这两天做SpringBoot整合Mybatis项目的时候,插入时报错: 3:45:59.936 DEBUG [http-nio-8080-exec-8] o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver 133 - Resolving exception from ha......

aiChuang
31分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部