mybatis介绍

mybatis就是一个封装了jdbc的持久层框架,它的前身是ibatis。
Mybatis与hibernate一样都是持久层框架,但是它与hibernate不同的是,它不是一个完全的orm框架。
Mybatis只需要让程序员去关注sql本身。对于数据库的创建及关闭,statement的创建等都由mybatis进行封装。
Mybatis可以对输入的参数进行映射,可以对输出的结果进行映射。

分析原生jdbc的问题

1、创建数据库连接时存在硬编码
---配置文件
2、执行statement时存在硬编码
---配置文件
3、频繁的开启和关闭数据库连接存在性能浪费
---连接池

mybatis框架原理

mybatis开发dao方式

原始dao开发方式

即开发dao接口和实现类

问题分析:

1、存在大量的模板代码
2、存在硬编码

mapper代理开发方式

即开发mapper接口即可,mapper接口,也就是dao接口。

接口开发规范:

1、mapper接口的类名的全限定名和mapper映射文件的namespace值一致。
2、mapper接口的方法名称要和mapper映射文件的statement的id一致。
3、mapper接口的方法参数类型要和mapper映射文件的statement的parameterType的值一致。
4、mapper接口的方法返回值类型要和mapper映射文件的statement的resultType的值一致。

mapper接口

mapper映射文件

全局配置文件加载mapper

测试代码

全局配置文件SqlMapConfig.xml

Properties(属性)

加载java的配置文件的信息到mybatis配置文件中进行使用

Properties标签的加载顺序如下:
1、先加载《property》标签声明的变量
2、再加载properties标签引入的变量
3、最后加载的就是statement标签中parameterType的值

Settings(全局参数设置)

配置了mybatis的全局参数,该参数会影响整个mybatis的运行行为

typeAliases(类型别名)

类型的别名,它只对po类进行别名的定义

自定义别名

mappers(映射器)

1.<mapper resource=’’/>
使用相对于类路径的资源
如:<mapper resource="sqlmap/User.xml" />
2.<mapper url=’’/>
使用完全限定路径
如:<mapper url="file:///D:\workspace_spingmvc\mybatis_01\config\sqlmap\User.xml" />
3.<mapper class=’’/>
使用mapper接口的全限定名
如:<mapper class="cn.itcast.mybatis.mapper.UserMapper"/>
注意:此种方法要求mapper接口和mapper映射文件要名称相同,且放到同一个目录下;
4.<package name=’’/>(推荐)
注册指定包下的所有映射文件
如:<package name="cn.itcast.mybatis.mapper"/>
注意:此种方法要求mapper接口和mapper映射文件要名称相同,且放到同一个目录下;

映射文件

输入映射

在mybatis中,输入映射使用parameterType来进行映射

映射简单类型

映射pojo

映射包装pojo

映射文件

pojo包装类

mapper接口

映射mapper集合

同传递POJO对象一样,map的key相当于pojo的属性

映射文件
<!-- 传递hashmap综合查询用户信息 -->
<select id="findUserByHashmap" parameterType="hashmap" resultType="user">
select * from user where id=#{id} and username like '%${username}%'
</select>

输出映射

Mybatis在进行输出结果的映射时,有两种映射方式,一种 是使用resultType标签、一种是使用resultMap标签

resultType:需要满足查询的列名和映射对象属性名称保持一致即可。

resultMap:不需要查询的列名和映射对象的属性名称一致。但是需要定义一个resultMap标签来完成列名和属性名的映射关系。

动态sql

Mybatis提供了一些动态标签,可以让程序员再编写映射文件时,更加方便灵活、提高代码的可重用性

If、where标签:在综合查询时,查询条件由客户输入,不能固定,所以映射文件中的查询条件不能写死

Sql片段:Sql片段可以提高代码的可重用性。先定义后使用

Foreach标签:可以将集合参数传入到映射文件中,然后通过foreach标签对集合参数进行遍历映射

mybatis与hibernate的各自应用场景

Mybatis技术特点:

1、通过直接编写SQL语句,可以直接对SQL进行性能的优化;
2、学习门槛低,学习成本低。只要有SQL基础,就可以学习mybatis,而且很容易上手;
3、由于直接编写SQL语句,所以灵活多变,代码维护性更好。
4、不能支持数据库无关性,即数据库发生变更,要写多套代码进行支持,移植性不好。

Hibernate技术特点:

1、标准的orm框架,程序员不需要编写SQL语句。
2、具有良好的数据库无关性,即数据库发生变化的话,代码无需再次编写。
3、学习门槛高,需要对数据关系模型有良好的基础,而且在设置OR映射的时候,需要考虑好性能和对象模型的权衡。
4、程序员不能自主的去进行SQL性能优化。

Mybatis应用场景:

需求多变的互联网项目,例如电商项目。

Hibernate应用场景:

需求明确、业务固定的项目,例如OA项目、ERP项目等。

Mybatis框架_part1的更多相关文章

  1. Mybatis框架的多对一关联关系(六)

    一.一对多的关联映射 一对多关联查询多表数据 1接口 public interface IDeptDAO { //根据部门编号查询该部门单个查询 public Emp getEmpById(Integ ...

  2. Spring+SpringMvc+Mybatis框架集成搭建教程

    一.背景 最近有很多同学由于没有过SSM(Spring+SpringMvc+Mybatis , 以下简称SSM)框架的搭建的经历,所以在自己搭建SSM框架集成的时候,出现了这样或者那样的问题,很是苦恼 ...

  3. Mybatis框架中实现双向一对多关系映射

    学习过Hibernate框架的伙伴们很容易就能简单的配置各种映射关系(Hibernate框架的映射关系在我的blogs中也有详细的讲解),但是在Mybatis框架中我们又如何去实现 一对多的关系映射呢 ...

  4. Hibernate框架与Mybatis框架的对比

    学习了Hibernate和Mybatis,但是一直不太清楚他们两者的区别的联系,今天在网上翻了翻,就做了一下总结,希望对大家有帮助! 原文:http://blog.csdn.net/firejuly/ ...

  5. 初识Mybatis框架,实现增删改查等操作(动态拼接和动态修改)

    此第一次接触Mybatis框架确实是有点不适应,特别是刚从Hibernate框架转转型过来,那么为什么要使用Mybatis框架,Mybatis框架和Hibernate框架又有什么异同呢? 这个问题在我 ...

  6. Spring+MyBatis框架中sql语句的书写,数据集的传递以及多表关联查询

    在很多Java EE项目中,Spring+MyBatis框架经常被用到,项目搭建在这里不再赘述,现在要将的是如何在项目中书写,增删改查的语句,如何操作数据库,以及后台如何获取数据,如何进行关联查询,以 ...

  7. SSM框架-----------SpringMVC+Spring+Mybatis框架整合详细教程

    1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One  ...

  8. Spring3.0 与 MyBatis框架 整合小实例

    本文将在Eclipse开发环境下,采用Spring MVC + Spring + MyBatis + Maven + Log4J 框架搭建一个Java web 项目. 1. 环境准备: 1.1 创建数 ...

  9. 手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版)

    手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版) SSM(Spring+SpringMVC+Mybatis),目前较为主流的企业级架构方案.标准的MVC设计模式, ...

随机推荐

  1. ztree树 叶子节点路径的集合

    1.Question Description: ztree树各个节点都带有路径,如“/根节点”,"/根节点/一级节点",“根节点/一级节点/二级节点‘; 现在想获取所选的最末级节点 ...

  2. oracle client ORA-12541: TNS: 无监听程序

    1. Question description: if you are setting the oracle client to add a local network service,  you m ...

  3. python函数和常用模块(二),Day4

    内置函数2 装饰器 字符串格式化 生成器 迭代器 递归 模块 序列化相关 time模块 datetime模块 内置函数2 callable() # 是否可以被执行,是否可以被调用 chr() # as ...

  4. maven-dependency-plugin插件的使用

    maven-dependency-plugin插件的使用   maven-dependency-plugin是 处理与依赖相关的插件.它有很多可用的goal,大部分是和依赖构建.分析和解决相关的goa ...

  5. restful架构的理解

    资源的表现层状态转化. 简单的理解即:     1 URI对应一种"资源".     2 客户端与服务端传输资源的某种"表现层".     3 客户端通过HTT ...

  6. SQL数据库基础(八)

    连接查询:通过连接运算符可以实现多个表查询.连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志. 常用的两个链接运算符: 1.join   on 2.union     在关 ...

  7. [iOS] 使用xib作为应用程序入口 with IDE

    [iOS] 使用xib作为应用程序入口 with IDE 在「使用xib做为应用程序入口 with Code」这篇文章中,介绍了如何透过写Code的方式,来使用xib做为应用程序的入口.但其实在Xco ...

  8. css实现垂直居中的方法

    1,设置其line-height值,使之与其高度相同 2,设置table结构,用vertical-align:middle; 3,应用定位,父级别:position:relative:子级:posit ...

  9. 关于HTML的编码问题

    平时我在写html文件时,很容易忘掉这个文件的编码类型,<meta charset=”utf-8”> 的语句,因为编辑器默认设置了一个编码,所以在我没有写编码格式设置语句的情况下,效果依然 ...

  10. SharePoint 2013 术语和术语集介绍

    托管元数据是一个集中管理的术语的分层集合,我们可以定义术语和术语集,然后将其用作 SharePoint Server 2013 中项目的属性.简单的说,术语是一个可与 SharePoint Serve ...