欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

mybatis(一)

时间:2023-07-04
文章目录

Mybatis

一、MyBatis简介

1.1 什么是MyBatis?1.2 MyBatis历史1.3 为什么要使用MyBatis?1.4 MyBatis文档1.5 原始jdbc操作的分析 二、MyBatis的快速入门

2.1MyBatis开发步骤:

2.1.1 导入MyBatis的坐标和其他相关坐标2.1.2 创建user数据库表2.1.3 编写User实体2.1.4 编写UserMapper.xml映射文件2.1.5 编写UserMapper核心配置文件2.1.6 编写测试代码 三、MyBatis的核心配置文件四、MyBatis核心配置文件概述

4.1 MyBatis常用配置解析

4.1.1 environments标签4.12 databaseIdProvider环境4.1.3 mapper标签4.1.4 Properties标签4.1.5 typeAliases标签4.1.6 Setting设置 4.2 MyBatis核心配置文件深入

4.2.1 typeHandlers标签4.2.2 plugins标签 五、MyBatis的DAO层开发六、 MyBatis映射文件深入 动态SQL

6.1 if6.2 foreach6.3 choose、when、otherwise6.4 SQL片段抽取 Mybatis 一、MyBatis简介

• MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。
• MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
• MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录

1.1 什么是MyBatis?

mybatis 是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。mybatis通过xml或注解的方式将要执行的各种 statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句。最后mybatis框架执行sql并将结果映射为java对象并返回。采用ORM思想解决了实体和数据库映射的问题,对jdbc 进行了封装,屏蔽了jdbc api 底层访问细节,使我们不用与jdbc api打交道,就可以完成对数据库的持久化操作。

1.2 MyBatis历史

• 原是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation 迁移到了Google Code,随着开发团队转投Google Code旗下, iBatis3.x正式更名为MyBatis ,代码于2013年11月迁移到Github(下载地址见后)。
• iBatis一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。 iBatis提供的持久层框架包括SQL Maps和Data Access Objects(DAO)

1.3 为什么要使用MyBatis?

• MyBatis是一个半自动化的持久化层框架。
• JDBC
– SQL夹在Java代码块里,耦合度高导致硬编码内伤
– 维护不易且实际开发需求中sql是有变化,频繁修改的情况多见
• Hibernate和JPA
– 长难复杂SQL,对于Hibernate而言处理也不容易
– 内部自动生产的SQL,不容易做特殊优化。
– 基于全映射的全自动框架,大量字段的POJO进行部分映射时比较困难。导致数据库性能下降。
• 对开发人员而言,核心sql还是需要自己优化
• sql和java编码分开,功能边界清晰,一个专注业务、一个专注数据。

1.4 MyBatis文档

• https://github.com/mybatis/mybatis-3/ github上的资源

• http://www.mybatis.org/mybatis-3/ mybatis官网

下面有download lasted 点击它可以下载文档

1.5 原始jdbc操作的分析

原始jdbc开发存在的问题如下:
① 数据库连接创建、释放频繁造成系统资源浪费从而影响系统性能
② sql 语句在代码中硬编码,造成代码不易维护,实际应用 sql 变化的可能较大,sql 变动需要改变java代码。
③ 查询操作时,需要手动将结果集中的数据手动封装到实体中。插入操作时,需要手动将实体的数据设置到sql语句的占位
符位置

应对上述问题给出的解决方案:
① 使用数据库连接池初始化连接资源
② 将sql语句抽取到xml配置文件中
③ 使用反射、内省等底层技术,自动将实体与表进行属性与字段的自动映射

二、MyBatis的快速入门 2.1MyBatis开发步骤:

① 添加MyBatis的坐标② 创建user数据表③ 编写User实体类④ 编写映射文件UserMapper.xml⑤ 编写核心文件SqlMapConfig.xml⑥ 编写测试类

2.1.1 导入MyBatis的坐标和其他相关坐标

org.mybatis mybatis 3.4.5 mysql mysql-connector-java 5.1.6 runtime junit junit 4.12 test log4j log4j 1.2.12

2.1.2 创建user数据库表 2.1.3 编写User实体

public class User { private int id; private String username; private String password; //省略get个set方法}

2.1.4 编写UserMapper.xml映射文件

<?xml version="1.0" encoding="UTF-8" ?> select * from User

注意: 一般创建在resources下 如果用多个文件夹 需要使用 com/itheima/dao/UserMapper.xml 要不然会找不到这个文件

2.1.5 编写UserMapper核心配置文件

#将UserMapper.xml映射sql进行注册

2.1.6 编写测试代码

//加载核心配置文件InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");//获得sqlSession工厂对象SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);//获得sqlSession对象SqlSession sqlSession = sqlSessionFactory.openSession();//执行sql语句List userList = sqlSession.selectList("userMapper.findAll");//打印结果System.out.println(userList);//释放资源sqlSession.close();

三、MyBatis的核心配置文件

映射文件指导着MyBatis如何进行数据库增删改查,
有着非常重要的意义;
•cache –命名空间的二级缓存配置
•cache-ref – 其他命名空间缓存配置的引用。
•resultMap – 自定义结果集映射
•parameterMap – 已废弃!老式风格的参数映射
•sql –抽取可重用语句块。
•insert – 映射插入语句
•update – 映射更新语句
•delete – 映射删除语句
•select – 映射查询语句

insert、update、delete元素中拥有的

主键生成方式

若数据库支持自动生成主键的字段(比如 MySQL 和 SQL Server),则可以设置useGeneratedKeys=”true”,然后再把keyProperty 设置到目标属性上。

四、MyBatis核心配置文件概述

也称为MyBatis-全局配置文件

• MyBatis 的配置文件包含了影响 MyBatis 行为甚深的设置(settings)和属性(properties)信息。文档的顶层结构如下:

• configuration 配置
• properties 属性
• settings 设置
• typeAliases 类型命名
• typeHandlers 类型处理器
• objectFactory 对象工厂
• plugins 插件
• environments 环境
• environment 环境变量
• transactionManager 事务管理器
• dataSource 数据源
• databaseIdProvider 数据库厂商标识
• mappers 映射器

4.1 MyBatis常用配置解析 4.1.1 environments标签

实例

# 指定默认的环境名称 # 指定当前环境的名称 # 指定事务管理类型是JDBC #指定当前数据源类型是连接池 # 数据源配置的基本参数

事务管理器(transactionManager)类型有两种:

• JDBC:这个配置就是直接使用了JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作用域。• MANAGED:这个配置几乎没做什么。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如JEE 应用服务器的上下文)。 默认情况下它会关闭连接,然而一些容器并不希望这样,因此需要将 closeConnection 属性设置为 false 来阻止它默认的关闭行为。• 自定义:实现TransactionFactory接口,type=全类名/别名

数据源(dataSource)类型有三种:

• UNPOOLED:这个数据源的实现只是每次被请求时打开和关闭连接,不使用连接池• POOLED:这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,PooledDataSourceFactory。• JNDI:这个数据源的实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。– 自定义:实现DataSourceFactory接口,定义数据源的获取方式。

扩展实例

#设置另外一个数据库

4.12 databaseIdProvider环境

MyBatis 可以根据不同的数据库厂商执行不同的语句。

基本实例

Mybatis全局配置文件

映射文件

select * from User

MyBatis全局配置文件

1)使用配置文件进行别名设置

配置typeAliases,为com.itheima.domain.User定义别名为user

2)使用@Alias注解为其指定一个别名

@Alias("user")public class User{}

映射文件

# resultType中的user为别名 select * from User where id=#{id}

六、 MyBatis映射文件深入 动态SQL

• 动态 SQL是MyBatis强大特性之一。极大的简化我们拼装SQL的操作。
• 动态 SQL 元素和使用 JSTL 或其他类似基于 XML 的文本处理器相似。
• MyBatis 采用功能强大的基于 OGNL 的表达式来简化操作。

– if
– choose (when, otherwise)
– trim (where, set)
– foreach

6.1 if

select * from User #{id}

执行sql语句为 select * from user where id in (?,?)

参数

foreach标签的属性含义如下:
标签用于遍历集合,它的属性:
• collection:代表要遍历的集合元素,注意编写时不要写#{} 必填, 集合/数组/Map的名称
• open:代表语句的开始部分
• close:代表结束部分
• item:代表遍历集合的每个元素,生成的变量名
• sperator:代表分隔符

扩展 collection的选择

跟接口方法中的参数相关。1、只有一个数组参数或集合参数默认情况:集合collection=list, 数组是collection=array推荐:使用 @Param 来指定参数的名称, 如我们在参数前@Param(“ids”), 则就填写 collection=ids2、多参数多参数请使用 @Param 来指定, 否则SQL中会很不方便3、参数是Map指定为 Map 中的对应的 Key 即可。其实上面的 @Param 最后也是转化为 Map 的。4、参数是对象使用属性.属性即可。

6.3 choose、when、otherwise

这三个标签需要组合在一起使用,类似于 Java 中的 switch、case、default。只有一个条件生效,也就是只执行满足的条件 when,没有满足的条件就执行 otherwise,表示默认条件。

实例

Student selectByIdOrName(Student record);

me != null and name != ‘’">
and name=#{name}


and 1=2


### 6.4 SQL片段抽取Sql 中可将重复的 sql 提取出来,使用时用 include 引用即可,最终达到 sql 重用的目的```xml

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。