09、spring+mybatis

     

MyBatis

1. MyBatis 概述 1-1

1.1. MyBatis 是什么 1-1

1.2. MyBatis 应用场景 1-1

1.3. MyBatis 核心API以及应用 1-2

2. MyBatis 编程基础 2-3

3. MyBatis 编程进阶 3-3

4. 总结 4-3

4.1. 重点和难点分析 4-3

4.2. 常见FAQ 4-3

 

1. MyBatis 概述

  1.1. MyBatis 什么

  MyBatis 是一个优秀持久层框架,由apache的开源项目iBatis演化而来,主要用于解决数据持久化问题,底层实现了对JDBC操作的封装。

 

1.2. MyBatis 应用场景

 

  首先我们看一张图,理解mybatis在企业级应用架构中的定位。如下图所示

 

 

 

从这张图我们可能会看到mybatis为企业级架构中的一个持久层对象,在DAO中进行访问,用于简化我们传统编程中相关JDBC代码的编写,例如ORM操作。

 

 

1.3. MyBatis 核心API以及应用

在MyBatis应用中有如何几个核心角色:

1) Configs(xml) 配置文件&映射文件(mapper)

2) SqlSessionFactoryBuilder(加载配置文件,创建SQLSessionFactory对象)

3) SqlSessionFactory(负责创建session对象)

4) SqlSession(负责执行SQL操作)

 

MyBatis 基于这些核心对象以及配置构建我们的应用程序,其应用过程如下图所示

 

2. MyBatis 编程基础

2.1. 准备工作

在test数据库中创建表sys_users;

2.2. 编成步骤

Step01: 创建maven项目(java)

Step02:添加依赖(mybatis,mysql-driver,junit)

Step03: 创建核心配置文件(mybatis-config.xml)

Step04: 创建SysUserDao接口以及接口对应的映射文件

Step05:将映射文件添加到mybatis-config.xml中

Step06: 编写测试类对接口方法进行单元测试

2.3. 基本实现

 

 

 

2.4. 应用总结

  1. Mybatis 案例编程过程以及运行流程?

1) 通过SqlSessionFactory获取SqlSession对象

2) 通过SqlSession对象获取接口对象(底层会创建接口实现类对象)

3) 执行接口对象的相关方法(例如查询)

4) 释放资源(SqlSession)

  1. MyBatis 接口与映射文件如何实现映射?

1) 接口的类全名与映射文件的命名空间必须一致

2) 接口中方法名与映射文件中元素的id相同

3) 对于查询而言映射文件中元素的resultType的值必须与接口方法有对应。

  1. Mybatis 映射文件中对象别名的应用。

1) 系统提供了很多默认的对象别名(例如map,int,string,…)

2) 自己定义对象别名(核心配置文件定义,映射文件中应用)

3) 在映射文件的参数类型(parameterType)或者结果类型(resultType)上进行应用

3. MyBatis 编程进阶

3.1. 映射文件常用元素

MyBatis 映射文件中最常用的元素为

1) Select  元素(定义查询操作)

2) Insert  元素(定义插入操作)

3) Update元素(定义更新操作)

4) Delete 元素(定义删除元素)

 

以上每个元素在定义时,在指定命名空间下必须有一个唯一的id。

3.1.1. Select 元素应用

select 元素应用案例

 

<select id="findObjectById"

parameterType=”int”

          resultType="sysUser">

      select *

      from sys_users

      where id=#{id}

</select>

 

对于select元素常用属性为:

 

1) paramterType 表示参数类型(可写也可以不写),其值可以是全类名也可以是别名

2) resultType从这条语句中返回的期望类型的类的完全限定名或别名。注意如果是集合情形,那应该是集合可以包含的类型,而不能是集合本身。

3) resultMap外部 resultMap 的命名引用。结果集的映射是 MyBatis 最强大的特性,在复杂映射的场景下可选择resultMap.

 

提示resultType&resultMap在应用时只能二者选其一

 

 

 

 

3.2. MyBatis 事务控制

MyBatis 中的事务控制通过SQLSession对象进行控制,当

我们在使用SQLSessionFactory获取SQLSession对象时,

假如使用的是OpenSession()方法,默认是手动提交事务,对于insert/update/delete操作,这些操作执行完需要手动提交事务,执行SQLSession的Commit方法。

假如需要自动控制事务,可调用openSession(true)方法。

 

3.3. MyBatis 中#{},${}表达式

表达式之间的异同点:

相同点:#{}和${}表达式都可以获取接口方法参数中的数据

不同点:

1)${}表示在获取接口方法参时,参数需要使用@Param注解进行修饰。

2)${}表达式还可以获取xxx.properties文件中的数据

3)${}获取接口方法参数值时是直接将值拼接在SQL中,这样可能会存在SQL注入问题。

4)${}假如在SQL语句中应用,应尽量使用参数值替换语句中的表名,字段名而不是字段的具体值。

5)#{}mybatis解析sql语句时,发现#号会自动使用?替换,然后用预编译的PreparedStatement处理此SQL,以提高SQL的执行性能.

6)#{}表达式不会存在SQL注入的问题

 

3.4. MyBatis 中@Param注解应用

如果你的映射器的方法需要多个参数, 这个注解可以被应用于映射器的方法 参数来给每个参数一个名字。否则,多 参数将会以它们的顺序位置来被命名 (不包括任何 RowBounds 参数) 比如。 #{param1} , #{param2} 等 , 这 是 默 认 的 。 使 用 @Param(“person”),参数应该被命名为 #{person}

 

原文地址:https://www.cnblogs.com/xiangyuqi/p/8656275.html