Mybatis 入门
1.什么是Mybatis?
MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。 MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索。 MyBatis 可以使用简单的XML 或注解用于配置和原始映射,将接口和 Java 的 POJO( Plain Old Java Objects,普通的Java 对象)映射成数据库中的记录. mybatis提供一种“半自动化”的ORM实现。Mybatis主要业务是实现数据访问层
2.如何使用Mybatis?
1.下载jar包;
2.导入jar包;
3.创建数据库连接;
4.添加mabatis配置文件mybatis.cfg.xml;
几个常用元素的作用如下:
1.configuration:配置文件的根元素节点。
2.properties:通过resource属性从外部制定properties属性文件(database。properties),该属性文件描述数据库连接的相关配置,位置也是再/resource目录下。
3.settings:设置mybatis运行中的一些行为。
4.environments:表示配置mybatis的多套运行环境,将SQL映射到多个不同的数据库上,该元素节点下可以配置对各environment子元素节点,但是必须制定其中一个默认运行环境。
5.environment:配置Mybatis的一套运行环境,需指定运行环境ID,事务管理,数据源配置等相关信息。
6.mappers:作用是告诉Mybatis去哪里找到SQL映射文件,整个项目中可以有1个或者多个SQL映射文件。
7.mapper:mappers的子元素节点,具*定sql映射文件的路径,其中resource属性的值表述了SQL映射文件的路径。
5.创建对应的实体类
6.创建方法接口和对应接口的XML配置文件。
7.创建工具类util 实现获取sqlsession 和关闭sqlsession方法。
8.编写测试类测试。
3.Mybatis的基本要素---核心对象
》核心接口和类。
》Mybatis核心配置文件(mybatis-config.xml)。
mybatis-config.xml的文件结构
》SQL映射文件(mapper.xml)。
(1)每个mybatis的应用程序都以一个SqlsessionFactory对象的实列为核心。
(2)首先获取SqlsessionFactoryBuilder对象,可以根据XML配置文件或Configuration类的实列构建该对象。
(3)然后获取SqlsessionFactiory对象,该对象实例可以通过SqlsessionFactoryBulider对象来获得。
(4)有了SqlsessionFactiory对象之后,就可以进而获取Sqlsession实例,Sqlsession对象中完全包含以数据库为背景的所有执行SQL操作的方法,可以用实例来直接执行已映射的SQL语句。
4.resultType 和 resultMap
resultType直接表示返回类型,包括基础数据类型和复杂数据类型。
resultMap则是对外部resultMap定义的引用,对应外部resultMap的id,表示返回结果映射到具体哪一个resultMap上。
5.关联关系
一对一关系:
比如获取用户角色信息,就需要在javabean中添加一个角色对象,使用多表查询
实列说明:
association:映射到javaBean的某个“复杂类型”属性。
使用association给角色对象进行赋值
一对多关系:
collection元素的作用和association元素的作用差不多一样,事实上,它们非常类似,也是映射捣javabean的某个"复杂类型"属性,只不过这个属性是一个集合列表。
即JavaBean内部嵌套一个复杂数据类型属性,和使用association元素一样,我们使用嵌套查询,获取从连接中嵌套的结果集。
示例,用户有多个住址:
Mybatis对resultMap自动映射的三个匹配级别:
》 NONE:禁止自动匹配。
》 PARTIAL(默认):自动匹配所有属性,有内部嵌套(association,collection)的除外。
》 FULL:自动匹配所有。
6.使用动态SQL完成多条件查询
》if:利用if实现简单的条件选择
》choose(when,ohterwise):相当于Java中的switch语句,通常与when和otherwise搭配。
》where:简化SQL语句中where的条件判断
》set:解决动态更新语句
》trim:可以灵活的去除多余关键字
属性:
prefix:前缀,作用是通过自动识别是否有返回值后,在trim包含的内容上加上前缀。
suffix:后缀,作用是在trim包含的内容上加上后缀。
prefixOverrides:对于trim包含的首部进行指定内容的忽略。
suffixOverrides:对于trim包含内容的首尾部进行指定内容的忽略。
》foreach:迭代一个集合,通常用于IN条件
属性:
item:表示集合中每一个元素进行迭代时的别名。
index:指定一个名称,用于表示在迭代过程中,每次迭代到的位置。
open:表示该语句以什么开始。(如果是in条件语句,以“(”开始)
separator:表示在每次进行迭代之间以什么符号作为分隔符。(如果是in条件语句,以“,”作为分隔符)
close:表示该语句以什么结束。(如果是in条件语句,以“)”结束)
collection:该属性必须指定,不同情况下,该属性的值是不一样的。主要有三种情况:
若入参为单参数且参数类型是一个List的时候,collection属性值为list。
若入参为单参数且参数类型是一个数组的时候,collection属性值为array。
若传入参数为多参数,就需要把它们封装为一个Map进行处理。
7. 1)MyBatis框架的优点
(1)与JDBC相比,减少了50%以上给的代码量
(2)MyBatis是最简单的持久化框架,小巧并且简单易学
(3)MyBatis相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL写在XML里,从程序代码中彻底分离,降低耦合度,便于同意管理和优化,并可重用。
(4)提供XML标签,支持编写动态SQL语句
(5)提供映射标签,支持对象与数据库的ORM字段关系映射
2)MyBatis的缺点
(1)SQL语句的编写工作量较大,对开发人员编写SQL语句的功底有一定要求
(2)SQL语句依赖与数据库,导致数据库移植性差,不能随意更换数据库
3)MyBatis框架适用场合
MyBatis专注于SQL本身,是一个足够灵活的DAO层解决方案,对性能的要求很高,或者需求变化较多的项目,如互联网项目,那么MyBatis将是不错的选择。