MyBatis基础

01——MyBatis入门

1.Mybatis快速入门

(1)MyBatis介绍

MyBatis本是apache的一个开源项目,原来称为IBatis 2010年这个项目由Apache software foundation 迁移到 google code 应且改名 MyBatisMyBatis是支持普通的SQL查询、存储过程和高级映射的优秀持久层框架。是一个SQL映射框架。消除了几乎所有JDBC代码,使用简单的XML或注解用于配置和映射,将接口和JAVAPOJOsPlan Old Java Objects ,普通的JAVA对象)映射成数据库的记录。

简单来说,MyBatisSQL语句从程序中剥离出来,放到配置文件,并将查询结果和持久化类的属性通过配置文件做了映射,相当于Hibernate ORM框架

它属于一种半自动化的ORM实现。

(2)MyBatisHibernate比较

MyBatisHibernate都属于ORM框架,为数据持久化提供操作的支持。相当于HibernateORMMyBatis属于“SQL-Mapping”的ORM实现。

1.相对MyBatisHibernate的内容较多,学习难度高于MyBatisMyBatis更接近于JDBC的开发,简单易学,容易掌握。

2.Hibernate开发者不需要关注SQL的生成与结果的映射,而MyBatis需要手写SQL语句。

3.Hibernate与具体数据库的关联只需要在XML中配置即可,所有的HQL语句与具体使用的数据库无关,移植性好,而MyBatis直接使用SQL语句,不同数据库可能有差异,可移植性差。

4.由于直接使用SQL,所有MyBatis灵活性更高,而且MyBatis的执行效率比Hibernate略高一些。

(3)MyBatis的优缺点以及使用场合

优点:

MyBatis小巧,简单易学,通过文档和源代码可以比较轻松的掌握它的设计思想和实现。

1.简单且功能强大。通过SQL映射文件和SqlSession能够实现数据持久化层的功能,与JDBC相比减少了很多的代码量

2.开发人员能够完全控制所执行的SQL语句,尤其使用于多表复杂查询

3.容易维护和修改,SQL语句写在配置文件里,只要修改配置文件即可。

缺点:

MyBatis属于半自动的ORM,需要开发人员掌握SQL语句的编写,由于要写SQL语句,不同的数据库需要重新修改SQL,因此MyBatis的数据库移植性不好。

适用场合:

如果不需要太复杂的功能,而需要一个足够灵活的DAO层解决方案,或者对性能的要求很高,MyBatis是不错的选择。

不适合使用MyBatis的场合:

1.当希望对象的持久化对应用程序完全透明时,可以使用对象映射,如Hibernate

2.当数据库有移植性需求,或者需要支持多种数据库时。

3.当应用程序需要完全动态的SQL时,如查询的字段都需要动态生成时。

4.当没有使用关系数据库时,或者使用的不是真正的关系数据库时。

(4)使用MyEclipse实现数据表的查询

1.下载需要的MyBatis jar

2.部署MyBatis jar

3.编写MyBatis配置文件

(1)environments元素:用于配置多个数据环境,可以映射多个数据库信息。 默认Default 

MyBatis中有两种事务管理器类型(type=[JDBC|MANAGED]”)

> JDBC :直接使用JDBC控制事务,它依赖于从数据源得到的连接来管理事务范围

> MANAGEDMyBatis自己不负责控制事务,它会让容器来管理事务的整个生命周期(如Spring 或者JavaEE 应用服务器)

数据类型有三种:

> UNPOOLED:简单打开和关闭连接,有一点慢,简单应用程序的选择,不需要及时的可用连接。

> POOLED:采用连接池以避免创建新的连接实例时必要的初始连接和认证时间。当前Web应用程序快速响应请求的流行方法。

> JNDIMyBatis通过JNDI获取数据源

2mappers:包含所有Mapper的列表,告诉MyBatis去哪里找SQL语句,主要定义SQL的映射文件。

4.创建持久化类和数据库接口

5.创建SQL映射文件

6.创建数据库接口的实现类。

7.编写测试类进行测试

搭建MyBatis开发环境,实现用户表记录数的查询

MyEclipse中创建工程,导入MyBatis  jar包,并设置MyBatis源码

创建MyBatis配置文件mybatis-config.xml,配置数据库信息

借用之前的实体类UserIUserDao

配置映射文件UserDaoMapper.xml

实现UserDaoImpl

2.使用Mybatis实现持久化操作

(1)使用MyBatis实现持久化查询

与查询对应的Select 元素是使用MyBatis时最常用的元素。

Select元素有如下属性可以设置

其中最常用的属性有 :

id :命名空间唯一的标识符可以用来引用这条语句。

parameterType:表示查询语句传入参数的类型的完全限制名或别名。

parameterMap:存在与低版本中,在MyBatis中已经废弃

ResultType :查询语句返回结果类型的完全限定名或别名。

ResultMap :结果类型的映射  resultMapresultType,不能同时使用

flushCache true 执行语句调用后都会导致缓存被情况。默认false

useCache true 本条语句被缓存,默认true

timeout :设置驱动程序等待服务器返回的超时时间,超过设置时间会抛出异常。默认不设置。(驱动自行处理)

fetchSize :设置驱动程序每次批量返回的结果次数。默认不设置。

statementType Statement preparedcallAble 的一种 MyBatis选择使用StatementPrepareStatement和 callAbleStatement 默认prepared 

resultSetType:默认不设置

  1.selectOne():

2.Session.getMapper()

MyBatis面向接口编程中,第二种方式 IEmpDao empdao =Session.getMapperIEmpDao .Class)得到一个IEmpDao 的代理类,代理类是通过JDK的动态代理实现的,只要定义接口及接口的方法,MyBatis就会动态生成实现IEmpDao 接口的代理,由代理解析XML 调用SQL,并返回结果。

使用接口编程需要注意:namespace需要定义接口的全限定名,映射语句的ID配置需要与接口中的方法名相同。

3.使用ResultMap实现结果映射。

Property:数据库列所映射的字段或属性的名称。

Column:从数据库中得到的列名

javaType:一个JAVA类的完全限定名,或一个类型别名。 

jdbcType:设置JDBC类型

4.使用MyBatis实现数据表增删改操作。

Id:命名空间唯一的标识符可以用来引用这条语句

parameterType:表示查询语句传入参数的类型的完全限制名或别名

flushCache: true 执行语句调用后都会导致缓存被情况。增删改默认true

Timeout:设置驱动程序等待服务器返回的超时时间,超过设置时间会抛出异常。默认不设置。(驱动自行处理)

statementTypeStatement preparedcallAble 的一种 默认为Prepared

useGeneratedKeys:取出数据库内部的主键,默认false

keyProperty:设置如何获得主键,默认不设置

(1)数据库支持自动生成主键的字段

(2)数据库不自动生成,而是采用序列生成。

主键采用Oracle的序列生成的代码:

各属性含义:

keyProperty:应该被设置的目标属性

resultType:结果类型

Orderbefore:首先选择主键设置keyProperty后执行插入语句。after  先执行插入语句后设置主角再设置keyProperty

(2)

3.使用动态SQL完成复杂操作

1)动态SQLMyBatis的一个强大的特性。动态SQL基于OGNL的表达式。

实现动态SQL的元素如下:

If:利用if实现条件选择,用于定义where子句的条件

Choosewhen otherwise):相当于JAVA中的switch

Where:简化SQL语句中的where的条件判断。

Set:解决动态更新语句

(2)MyBatis核心类生命周期和管理

a) SqlSessionFactoryBuilder:可以被实例化、使用和丢弃。创建SqlSessionFactory后这个类就不需要了,最佳作用域:方法范围

b) SqlSessionFactory:获取SqlSession的工厂,类似于JDBC中加载数据库驱动。作用域:应用范围。

c) SqlSession:类似于JDBCCollection对象,每个线程都应该有自己的SqlSession实例。SqlSession实例不能共享,因为它的线程是不安全的。最佳作用域:方法范围。

4.使用MyBatis实现员工信息管理

配置缓存:

(1)MyBatis的全局cache配置

全局的开关在MyBatis的配置文件中,默认是true。 False:在Mapper XML中 再配置支持cache也没有用。

(2)在Mapper XML文件中开启二级缓存

默认不开启缓存

<cache>

开启<setting readOnly =true|”>

</cache>

MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架

MyBatis的配置文件中配置全局的参数、数据连接和SQL映射文件的位置,并可以为结果类型映射别名

SQL映射文件中为提供了selectinsertupdatedelete等元素实现SQL语句的映射,结果类型的映射可以使用resultMapresultType,但不能同时使用

SQL映射文件中使用ifchoosewhereset实现动态SQL的映射

使用SqlSession提供的selectOne() selectList()  insert() update() delete() , getMapper()方法更加简洁和方便,而且不容易出错。

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值