mybatis第一次课

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: mybatis第一次课

1,课程回顾
2,本章重点

1, ORM 思想

2, mybatis 原理

3, mybatis 配置详解

3,具体内容

3.1 ORM思想

对象关系映射(Object Relational Mapping,简称ORM) ORM是通过使用描述对象和数据库之间映射的元数据,元数据一般采用XML格式,并且存放在专门的对象一映射文件中。将程序中的对象自动持久化到关系数据库中。

3.2 mybatis简介

mybatis官网:

https://mybatis.org/mybatis-3/zh/getting-started.html

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

3.3 结构图

架构分为三层:

接口层:给应用程序提供一系列的数据接口。(CRUD) ;SqlSession数据处理层:

接口层传递参数,sql命令,在数据处理层进行处理,返回对应的结果映射。

基础支撑层:提供最基础的底层的操作:连接管理(连接池),事务管理(增、删、改),配置加载

(读取配置信息),缓存(一级缓存,二级缓存)。

3.4 mybatis 工作原理

3.5 mybatis 快速入门

(完成增删改查操作)

3.5.1 创建项目引入jar

<!--mybatis包-->
<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>3.5.7</version>
</dependency>
<!--mysql驱动包-->
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>5.1.10</version>
</dependency>

3.5.2 创建mybatis主配置文件,创建数据源配置文件

<?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">
<!--mybatis主配置 dtd = document type definition-->
<configuration>
    <!--多种环境-->
    <environments default="development">
        <!--mysql链接环境-->
        <environment id="development">
            <!--配置事务管理类型   JDBC 自行处理事务  MANAGED 事务交给容器管理-->
            <transactionManager type="JDBC"/>
            <!--数据源配置   配置类型 3种 POOLED  UNPOOLED  JNDI-->
            <dataSource type="POOLED">
                <!--链接数据库的4要素-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/db_aiops03?useUnicode=true&amp;characterEncoding=utf-8"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <!--mappers映射器-->
    <mappers>
        <!--注册映射文件-->
      <!--  <mapper url="" class=""/>-->
        <mapper resource="mapper/DeptMapper.xml"/>
        <!-- <package name="mapper/*"/>-->
    </mappers>
</configuration>

3.5.3 创建mybatis Mapper文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace 命名空间 在mybatis该属性可选的,在当前版本必须的,作用:
1,隔离语句,2 绑定接口-->
<mapper namespace="com.aa.mybatis.dao.DeptMapper">
    <!--查询标签  部门列表查询  parameterType  定义参数类型  resultType 定义返回值类型 -->
   <select id="list"    resultType="com.aa.mybatis.entity.Dept">
         <!--使用列别名的方式 把数据库的列和Dept实体种的属性做映射,查询时映射不区分大小写-->
          select deptno,dname deptName,loc location from tb_dept
   </select>
</mapper>

3.5.4 创建Mapper文件中用到的实体及接口,完善Mapper文件

3.5.5 创建编写SqlSessionFactoryUtil类

加载主配置
               生成SqlSessionFactory
               生成sqlSession
package com.aa.mybatis.util;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
/**
 * @ fileName:SqlSessionFactoryUtil
 * @ description: SqlSession工厂工具类 使用静态单例方式,创建作用域全局单例工厂类,然后使用工厂类创建多个SqlSession
 * @ author:zhz
 * @ createTime:2021/6/17 11:11
 * @ version:1.0.0
 */
public class SqlSessionFactoryUtil {
    //1,私有构造
    private SqlSessionFactoryUtil(){};
    //2,私有静态的SqlSessionFactory属性
    private static SqlSessionFactory sqlSessionFactory;
    //   使用匿名静态块,创建对象
    static {
        try {
            //使用mybatis 提供的Resources类,加载主配置文件及mapper文件,变为流,放入内存
            InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
            //SqlSessionFactoryBuilder  方法作用域,创建完sqlSessionFactory后,就可以被GC(garbage collect)
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //3,提供公共静态的方法
    public static SqlSessionFactory getSqlSessionFactory(){
        sqlSessionFactory.openSession(ExecutorType.SIMPLE);
        return sqlSessionFactory;
    }
}

3.5.6 编写测试类

加粗样式片: https://shimo.im/fake.png

图片: https://shimo.im/fake.png

图片: https://shimo.im/fake.png

图片: https://shimo.im/fake.png

3. 6 关键类介绍:

SqlSessionFactoryBuilder

这个类可以被实例化、使用和丢弃,一旦创建了 SqlSessionFactory,就不再需要它了。 因此 SqlSessionFactoryBuilder 实例的最佳作用域是方法作用域(也就是局部方法变量)。 你可以重用 SqlSessionFactoryBuilder 来创建多个 SqlSessionFactory 实例,但是最好还是不要让其一直存在,以保证所有的 XML 解析资源可以被释放给更重要的事情。

SqlSessionFactory

SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例。 使用 SqlSessionFactory 的最佳实践是在应用运行期间不要重复创建多次,多次重建 SqlSessionFactory 被视为一种代码“坏味道(bad smell)”。因此 SqlSessionFactory 的最佳作用域是应用作用域。 有很多方法可以做到,最简单的就是使用单例模式或者静态单例模式。

SqlSession

每个线程都应该有它自己的 SqlSession 实例。SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。 绝对不能将 SqlSession 实例的引用放在一个类的静态域,甚至一个类的实例变量也不行。 也绝不能将 SqlSession 实例的引用放在任何类型的托管作用域中,比如 Servlet 框架中的 HttpSession。 如果你现在正在使用一种 Web 框架,要考虑 SqlSession 放在一个和 HTTP 请求对象相似的作用域中。 换句话说,每次收到的 HTTP 请求,就可以打开一个 SqlSession,返回一个响应,就关闭它。 这个关闭操作是很重要的,你应该把这个关闭操作放到 finally 块中以确保每次都能执行关闭。

3.5 mybatis 配置文件详解

3.5.1 主配置详解:

3.5.2 mapper文件详解: 可配置标签: cache – 对给定命名空间的缓存配置。 cache-ref – 对其他命名空间缓存配置的引用(已经不用了)。 resultMap – 是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象。 parameterMap – 已被废弃!老式风格的参数映射。更好的办法是使用内联参数,此元素可能在将来被移除。文档中不会介绍此元素。 sql – 可被其他语句引用的可重用语句块。 insert – 映射插入语句 update – 映射更新语句 delete – 映射删除语句 select – 映射查询语句 标签的属性描述: 1)id:命名空间中唯一的标识符,可以来引用该条语句 也是接口的方法名称 2)parameterType:这里设置传入该条语句的参数类的完全限定名或者普通java类型 3)resultType:返回结果的类的完全限定名或者普通java类型 4)resultMap:外部resultMap的命名引用,结果集的映射是Mybatis最强大的特性 5)flushCache:如果设置为true,则任何时候该语句被调用,都会导致本地缓存和二级缓存都被清空。默认是false 6)useCache:如果设置为true,将会导致本条语句的结果被二级缓存。默认是true 7)timeout:抛出异常之前,驱动程序等待数据库返回请求结果的秒数

4,知识点总结

5,本章面试题

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
Nacos 数据安全/隐私保护 Docker
nacos区分权限
nacos区分权限
292 0
|
2天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1080 0
|
11天前
|
人工智能 运维 安全
|
10天前
|
人工智能 测试技术 API
智能体(AI Agent)搭建全攻略:从概念到实践的终极指南
在人工智能浪潮中,智能体(AI Agent)正成为变革性技术。它们具备自主决策、环境感知、任务执行等能力,广泛应用于日常任务与商业流程。本文详解智能体概念、架构及七步搭建指南,助你打造专属智能体,迎接智能自动化新时代。
|
2天前
|
弹性计算 Kubernetes jenkins
如何在 ECS/EKS 集群中有效使用 Jenkins
本文探讨了如何将 Jenkins 与 AWS ECS 和 EKS 集群集成,以构建高效、灵活且具备自动扩缩容能力的 CI/CD 流水线,提升软件交付效率并优化资源成本。
267 0
|
9天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
|
10天前
|
机器学习/深度学习 人工智能 自然语言处理
B站开源IndexTTS2,用极致表现力颠覆听觉体验
在语音合成技术不断演进的背景下,早期版本的IndexTTS虽然在多场景应用中展现出良好的表现,但在情感表达的细腻度与时长控制的精准性方面仍存在提升空间。为了解决这些问题,并进一步推动零样本语音合成在实际场景中的落地能力,B站语音团队对模型架构与训练策略进行了深度优化,推出了全新一代语音合成模型——IndexTTS2 。
763 23
|
2天前
|
缓存 供应链 监控
VVIC seller_search 排行榜搜索接口深度分析及 Python 实现
VVIC搜款网seller_search接口提供服装批发市场的商品及商家排行榜数据,涵盖热销榜、销量排名、类目趋势等,支持多维度筛选与数据分析,助力选品决策、竞品分析与市场预测,为服装供应链提供有力数据支撑。
|
2天前
|
缓存 监控 API
Amazon item_review 商品评论接口深度分析及 Python 实现
亚马逊商品评论接口(item_review)可获取用户评分、评论内容及时间等数据,支持多维度筛选与分页调用,结合Python实现情感分析、关键词提取与可视化,助力竞品分析、产品优化与市场决策。