5.持久层框架Mybatis

一、Mybatis概述

Mybatis官网:https://mybatis.org/mybatis-3/zh/index.html

什么是 MyBatis?

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

Mybatis是一款优秀的半 ORM 框架,底层以 JDBC 为基础,实现持久化操作。

二、Mybatis基本实现

1、下载Mybatis类库(maven依赖)

2、提供Mybatis总配置文件,在总配置文件中设置 mybatis 全局属性

3、提供 Mybatis 映射文件,在映射文件中添加 orm 配置 (需进行前置基础数据添加——实体、dao接口设计等)

4、创建 Mybatis 核心工厂对象,并获取 session ,获取映射器对象,通过调用对应方法完成数据库交互

5、测试完成后,关闭会话

实践:

引入依赖:

Maven依赖查询:https://mvnrepository.com/

mybatis依赖:

<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.6</version>
</dependency>

mysql依赖:

<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.20</version>
</dependency>

文件名为mybatis-config.xml

粘贴以下代码:

从 XML 中构建 SqlSessionFactory

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
 <!-- 配置mybatis数据源 -->
  <environments default="development">
    <environment id="development">
      <!-- 配置 数据库 事务管理器 -->
      <transactionManager type="JDBC"/>
      <!-- 数据库源属性 -->
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3308/xbmu?useUnicode=true&amp;characterEncoding=utf8"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
      </dataSource>
    </environment>
  </environments>
  <!-- 配置要引入的映射器文件 -->
  <mappers>
  	<!-- 配置让mybatis自动扫描该包下的所有映射器并自动注册 -->
    <package name="com.xmd.web.dao"/>
  </mappers>
</configuration>

查看自己的MySQL端口号:

mysql> show global variables like 'port';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 3308  |
+---------------+-------+
1 row in set, 1 warning (0.03 sec)

映射SQL 语句:

此处namespace做接口绑定,映射器中的id则是和接口方法绑定且限定唯一标识。

 映射文件中不必对dao文件中的所有方法进行实现,可以预留二期工程需实现的部分方法,因为执行时不会报错。

在对数据库进行写操作时涉及jdbc事务,需要手动提交事务,否则源数据库不会发生变化。

MySQL默认事务自动提交,但加了事务管理器后则会变化为事务手动提交。

测试类:

package com.xmd.web.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import com.xmd.web.dao.RolesDao;
import com.xmd.web.dao.UserDao;
import com.xmd.web.entity.Roles;
import com.xmd.web.entity.User;

public class Test {
	public static void main(String[] args) throws IOException {
		//通过读取总配置文件构建mybatis对象
		String resource = "mybatis-config.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		//通过mybatis获取交互数据库的会话对象
		SqlSession session = sqlSessionFactory.openSession();
		//通过会话对象 获取对应的映射器实例代理类
//		UserDao mapper = session.getMapper(UserDao.class);
//		int  i = mapper.addUser(new User(0, "爱丽丝", "alis","123123", "13567899999", "67899876@qq.com", 0));
//		System.out.println(i);
//		List<User> users = mapper.getUsers();
//		for (User user : users) {
//			System.out.println(user);
//		}
		RolesDao dao2 = session.getMapper(RolesDao.class);
		Roles role = dao2.getRole(3);
		System.out.println(role.getId() +"   " +role.getRoleName()+"   "
				+ role.getUsers());
		
		
//		User user = mapper.getUser(3);
//		System.out.println(user);
		
		//手动提交事务
		session.commit();
		//操作完成后,关闭会话
		session.close();
		
	
	}
}

 

 

 

 

 

三、Mybatis配置文件解析

Mybatis总配置文件解析: MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。对MyBatis总配置文件进 行配置设置会改变Mybtatis运行时的整体行为。 必配配置: environments(环境配置) mappers(映射器配置) 常用配置: properties(属性文件/属性配置) settings(系统配置) typeHanddler(类型处理器配置) plugins(插件/拦截器配置) Mybatis映射文件配置: cache cache-ref resultMap :是mybatis用于映射数据表和Java实体的核心,功能强大。id :让实体的某个字段与数据库主键进行映射 result :让实体的普通字段与数据库的列进行映射 association :用于进行一对一、多对一级联映射 可以通过调用一个已有的查询方法完成级联查询 可以在查询中使用连表查询一次性查询出级联数据 collection :用于进行一对多、多对多级联映射 实现方式与association相同 discriminator:使用结果值来决定使用哪个 resultMap case :用于匹配选项 sql :用于抽取可重用SQL片段的 select : 绑定查询功能方法实现 insert : 绑定新增功能方法实现 update : 绑定修改功能方法实现 delete : 绑定删除功能方法实现 Mybatis的缓存支持: 缓存:存储在内存中的临时数据。缓存的作用是为了提升查询速度从而提升性能的! mybatis提供的一级缓存与二级缓存,同时允许通过第三方类库实现扩展缓存 一级缓存:基于SqlSession级别的缓存,该缓存默认开启,它只能在同一个 sqlSession中共享 缓存 二级缓存:基于SqlSessionFactory级别的缓存,该缓存在新版本中页默认开启,如果需要关闭 二级缓存,那么需要去全局设置 setting 中配置缓存设置。 如果要将一级缓存中的数据加入到二级缓存 中,那么需要在当前映射器配置文件中加入 cache 配置,被添加到二级缓存中的数据须可序列化。 cache 标签: eviction :定义缓存清除策略 flushInterval :定义缓存刷新事件 size :定义缓存中存储数据量 扩展缓存:Mybatis为了适应更多的业务场景,提供了扩展缓存功能支持,开发者只需要实现 Mybatis提供的 Cache 接口,并添加缓存实现类配置即可(一般情况下,我们直接使用第三方缓存实现 类库即可)。 缓存又称为查询缓存,只对查询生效,写(增删改)操作会刷新缓存。 Mybatis动态SQL标签: mybatis的动态SQL标签也是其强大功能之一,它允许开发者在映射器文件中使用动态标签来定制 业务更为复杂的SQL语句。 if :用来进行单条件流程控制choose : 用于进行多条件分支流程控制 foreach : 用于进行 迭代/循环 流程控制 trim where set

四、Mybatis运行流程解析

Mybatis 的核心组件: SqlSessionFactoryBuilder :Mybatis建造者对象(Mybatis的构建器),主要作用是根据配置 文件去创建Mybaris核心工厂。 SqlSessionFactory :Mybatis核心工厂对象。主要作用是对全局进行管理及各个持久化交互会 话进行管理。 SqlSession :通过Mybatis核心工厂对象创建的与数据库交互的会话对象,主要作用是交互数据 库。 Executor : 执行器对象,主要作用是控制并调度其他组件进行持久化交互工作。 ParameterHandler : 参数处理器对象,主要作用是完成参数的转换处理。 ResultSetHandler : 结果集处理器对象,主要作用是完成查询结果集的提取处理工作。 TypeHandler : 类型处理器对象,主要作用是完成参数注入、结果集提取时数据的转换工作。 StatementHandler : 交互对象处理器,主要作用是根据我们的业务SQL动态的控制使用哪种交 互数据库对象。 MappedStatement : 真正与数据库完成完整交互的对象,它内部封装了交互数据库所需的全部 数据、对象等的映射内容。

五、mybatis逆向工程

mybatis-generator MyBatis Generator (MBG) 是 MyBatis 的代码生成器。它将为所有版本的 MyBatis 生成代码。它将 内省一个数据库表(或多个表)并生成可用于访问表的工件。这减少了设置对象和配置文件以与数据库 表交互的初始麻烦。MBG 试图对大量简单的 CRUD(创建、检索、更新、删除)的数据库操作产生重 大影响。您仍然需要为连接查询或存储过程编写 SQL 和对象代码。 如何使用: 1、引入MBG,加载依赖 2、添加MBG相关配置 3、通过测试类启动MBG完成逆向生成 4、修改自定义配置或完成级联配置修改

本节完整工程文件获取:

https://download.csdn.net/download/anmin8888/19763824

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kylinmin

江湖纷争,刀光剑影,求点过路费

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值