mybatis知识点总结和梳理

使用jdbc开发时,和mybatis相比的不足

1,数据库连接,使用时就创建,不使用就释放,对数据库进行频繁连接开关和关闭,造成数据库资源浪费,影响数据库的性能

解决:使用数据库连接池管理数据库的连接

2,sql语句使用硬编码在java程序中,修改sql语句,就需要重新编译java代码,不利于系统维护

解决:把sql语句放在xml配置文件中,修改sql语句也不需要重新编译java代码

3,向预编译语句PreparedStatement中设置参数,对占位符位置和设置参数值,硬编码,修改sql语句也不需要重新编译java代码

解决:把sql语句和占位符设置参数值放在xml配置文件中

4,从result中遍历结果集数据时,存在硬编码,将获取表的字段进行硬编码

解决:将查询的结果集,自动映射成 java对象

二 mybatis框架,是一个持久层框架,是apache下的顶级项目

mybatis让程序员将主要精力放在sql上,通过mytabis提供的映射方式,自动生成满足需要的sql语句

mybatis可以向PreparedStatement中输入参数自动进行输入映射,将查询结果集灵活的映射成Java对象(输出映射),输入映射和输出映射这是mybatis的核心

mybatis框架执行流程图

三 mybatis的工作环境搭建和架构示意图

四 mybatis的开发

1.映射文件的开发如下图

2,映射文件配置好了之后,还需要在全局配置文件sqlMapConfig.xml中添加映射文件

3,sqlsession会话去执行操作查询数据库映射文件,下图中的错误纠正为’%${value}%’

查询出的是单条记录使用selectOne,下图中的错误纠正为把“1”改为int类型的1

sqlsession.selectOne(“test.findUserById”, 1);

查询出的是多条记录使用selectList

sqlsession.selectList(“test.findUserByName”, “hello”);

4,添加用户映射文件配置如下:

程序代码:

5,总结:

四 mybatis开发dao方法

mybatis的配置文件不变

1,先使用原型的开发dao方法

开发接口

2, 开发接口实现

3, 测试代码

4,总结

五 mybatis利用mapper代理开发dao(重点掌握

mapper代理开发,就不需要接口的实现类,只需要接口UserMapper.java和映射文件UserMapper.xml就可以了,但是遵循一定的开发规范:

1,在UserMapper.xml文件中namespace等于UserMapper接口地址

2,UserMapper.java接口中的方法名要和UserMapper.xml中的statement的id一致

3,UserMapper.java接口中的方法输入参数要和UserMapper.xml中的statement的parameterType指定的类型一致

4,UserMapper.java接口中的方法的返回值类型要和UserMapper.xml中的statement的resultType指定的类型一致

测试代码:

上图画线区域:这里没有实现接口的实现类,而是使用mybatis生成的代理对象来生成UserMappper接口的对象,从而能够调用其方法

mapper代理开发dao出现的问题总结:

1,代理对象内部调用selectOne或selectList

如果mapper方法返回单个pojo对象(非集合对象),代理对象内部通过selectOne查询数据库,也可以使用selectList查询。

如果mapper方法返回集合对象,代理对象内部通过selectList查询 数据库,不能使用selectOne查询,否则会出错。

问题是: 编译期间不会报错,二者容易写错使用。

2,mapper接口方法参数只有一个

根据规范编写的代理对象的传入参数只能有一个(mapper.xml文件中的parameterType参数只有一个),不利于系统的扩展

解决:即使mapper接口中只有一个参数,可以使用包装类型的pojo满足不同的业务方法需求

mybatis的一些细节剖析:

1,全局配置文件sqlMapConfig.xml中配置内容如下:

  1. properties(属性)

    注意:mybatis将按照下面的顺序来加载属性:

    (1)在properties元素体内定义的属性首先被读取。(可以在此属性中加入jdbc的配置文件db.properties),在sqlMapConfig.xml中就不需要对数据库连接参数进行硬编码了。

  2. settings全局参数设置

    mybatis框架运行时可以调整一些运行参数,会影响mybatis运行行为,所以建议不要随便修改

    比如:二级缓存,开启延时加载。。。

  3. typeAliases(别名) 重点掌握

  <typeAliases>
           <!--针对单个别名定义
               type:类型的路径
               alias:别名 -->
          <typeAlias type="com.jary.mybatis.po.User" alias="user" />
          <!--还可以进行批量别名定义
          指定包名,mybatis自动扫描包中的po类 -->
          <package name="com.jary.mybatis.po" />
      </typeAliases> 

上面的别名定义后,在mapper.xml中就可以这样使用了

user代替了输出结果类型com.jary.mybatis.po.User。

4.映射文件(mapper)

通过resource加载单个的映射文件

<mapper resource="mapper/UserMapper.xml" />

通过mapper接口加载单个mapper,要遵循一定的规范:

(1)前提是使用mapper代理开发(已经有4个规范)

(2)需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在同一目录下

<mapper class="com.jary.mybatis.mapper.UserMapper" />

通过批量加载mapper(推荐使用):实现条件是

要满足mapper接口加载映射文件和使用mapper代理开发同时满足

mybatis的一些细节剖析结束

mybatis的核心输入映射和输出映射开始:

输入映射

通过parameterType指定输入参数类型,类型可以是简单类型、hashmap、pojo的包装类型

1,传递pojo的包装对象

(1)需求

完成用户信息的综合查询,需要传入查询条件复杂(可能包括用户信息,商品信息,商品订单等),这样靠一个parameterType只能传入一个输入参数,所有需要pojo的包装类型来实现

(2)定义包装类型pojo

针对上面的需求,在包装类型的pojo中把这些复杂的查询条件包装进去,定义包装类UserQueryVo,把需要查询的条件全部定义在里面

上图中标注的用户查询条件使用的是User的扩展类(因为User类一般是由逆向工程自动生成的,不要进行修改,所有使用的扩展类来实现

输出映射

1,resultType

使用resultType进行输出映射时,只有查询输出结果列名和pojo中的属性名一致才可以,映射成功

如果查询出来的列名和pojo中的属性名没有一个一致的,就不会创建pojo对象

如果查询出来的列名和pojo中的属性名有一个一致,就会创建pojo对象

输出pojo对象和pojo列表

不管是输出的pojo单个对象还是一个列表(list中包含pojo),在mapper.xml中resultType指定的类型是一样的

在mapper.java指定的方法返回值类型不一样:

(1)输出单个pojo对象,方法返回值是个单个对象类型

(2)输出pojo对象list,方法返回值就是list对象类型

在动态代理对象中,是根据mapper方法的返回值类型来确定是调用selectOne(返回单个对象)还是selectList(返回集合对象)

2,resultMap

使用resultMap进行映射时,查询结果列名和pojo的属性名不一致时,resultMap会对列名和pojo属性名进行映射,保证其成功映射

使用resultMap需要这二步:

(1)定义resultMap

(2)使用resultMap作为statement的输出映射类型

时间: 2024-10-12 19:16:56

mybatis知识点总结和梳理的相关文章

MyBatis 知识点梳理

简单地梳理下MyBatis相关的知识点,主要想让自己重新捡起以前学的框架,如果能给广大程序猿朋友有所帮助那就更好了.有疏漏的地方也欢迎大家评论指出.闲言少叙,进入正题....... MyBatis知识梳理 简介(百度,随便看看) MyBatis最早源自Apache基金会的一个开源项目iBatis,2010年这个项目有Apache software foundation迁移到了google code,并且改名为MyBatis. MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架

MyBatis知识点总结(一)

前言:本篇主要记录在MyBatis学习过程中的主要知识点. 1.mybatis环境的搭建,通过maven可以快速的进行环境的搭建. 1 <!--文件版本--> 2 <properties> 3 <mybatis.version>3.4.5</mybatis.version> 4 <junit.version>4.12</junit.version> 5 <mysql-driver.version>5.1.38</my

MyBatis知识点整理

1.MyBatis一般使用步骤 1.1获取Configuration实例或编写配置文件 //获取Configuration实例的样例 TransactionFactory transactionFactory = new JdbcTransactionFactory();//定义事务工厂 Environment environment = new Environment("development", transactionFactory, dataSource); Configurat

mybatis知识点(已掌握)

1.${} 和 #{} 的区别? ${} 是Properties文件中的变量占位符,它可以用于标签属性值和sql内部,属于静态文本替换,比如${driver}会被静态替换为com.mysql.jdbc.Driver #{} 是sql的参数占位符,Mybatis会将sql中的#{}替换为?号,在sql执行前会使用PreparedStatement的参数设置方法,按序给sql的?号占位符设置参数值,比如ps.setInt(0, parameterValue),#{item.name}的取值方式为使用

(补)4.生成器知识点补充和梳理

这篇文章是对上一篇讲生成器和迭代器的文章做的补充. 回顾一下概念,什么是生成器? 生成器就是一个包涵yield关键字的函数,当这个函数被调用的时候,函数体中的代码不会被执行! 而是返回了一个迭代器. 每请求一个值,就回执行一次生成器中的代码,直到遇到yield或者return. 其中yield意为着生成一个值,而return意为着生成器要停止执行,不再生成任何东西,这是yield和return本质上的区别. 其实函数式生成器,可以当做是分文两部分组成的,生成器的函数和生成器的迭代器. 下面是关于

SSM框架开发web项目系列(二) MyBatis真正的力量

前言 上篇SSM框架环境搭建篇,演示了我们进行web开发必不可少的一些配置和准备工作,如果这方面还有疑问的地方,可以先参考上一篇“SSM框架开发web项目系列(一) 环境搭建篇”.本文主要介绍MyBatis的基础内容,包括基本概念.开发步骤.使用实例等.说起MyBatis,工作中做过SSH/SSM相关Web开发的或者正在学习MyBatis的人或多或少都会接触到类似“MyBatis和Hibernate有什么区别?”,“MyBatis和Hibernate哪个更好?”,“为什么Mybatis用的人越来

对tomcat来说,每一个进来的请求(request)都需要一个线程,直到该请求结束。

这段时间折腾了哈java web应用的压力测试,部署容器是tomcat 7.期间学到了蛮多散碎的知识点,及时梳理总结,构建良好且易理解的知识架构把它们组织起来,以备忘.对web应用开发者来说,我们很关心应用可同时处理的请求数,以及响应时间.应用本身和它运行在其中的web容器是两个很重要的影响因素.对tomcat来说,每一个进来的请求(request)都需要一个线程,直到该请求结束.如果同时进来的请求多于当前可用的请求处理线程数,额外的线程就会被创建,直到到达配置的最大线程数(maxThreads

基于HTML5的Web SCADA工控移动应用

在电力.油田燃气.供水管网等工业自动化领域Web SCADA的概念已经提出了多年,早先年的Web SCADA前端技术大部分还是基于Flex.Silverlight甚至Applet这样的重客户端方案,在HTML5流行前VML和SVG算是真正纯种Web方案也是有不少应用,近些年随着HTML5的流行,加上移动终端对HTML5支持的普及,越来越多新项目开始采用真正纯HTML5的方案,更具体的说大数据量应用性能高于SVG的Canvas方案,已经逐渐成为当今Web SCADA前端技术的首选标配方案. htt

20135219洪韶武——信息安全系统设计基础第四周学习总结

信息安全系统设计基础第四周学习总结 学习任务:教材第三章 学习时间:10小时 学习内容 一.教材知识梳理 1.程序编码与机器级代码 程序编码: gcc编译器,将源代码转化成可执行代码,C预处理器-汇编器-链接器 机器级代码: 机器级程序的格式和行为,定义[指令集体系结构ISA],定义了处理器状态,指令格式,以及指令对状态的影响 机器级程序实用的存储地址使用的是虚拟地址 2.数据格式 整数型.长整数型存储为4字节格式 指针类型存储为4字节格式 浮点数有三种形式:单精度.双精度.扩展精度,分别为4字