MyBatis框架入门(含实例)

news2025/1/20 1:03:59

目录

1.MyBatis简介

2.ORM框架

3.数据持久化

4.Mybatis入门实战案例

4.1 下载mybatis的jar包

4.2 将jar包导入工程中

4.3 配置Mybatis的核心配置文件

4.3.1 MyBatis核心文件模板(mybatis-config)

4.3.2 mybatis-config模板的设置

4.4 创建User 实体类

4.5定义DAO层Mapper接口

4.6定义SQL映射文件

4.6.1 SQL映射文件模板

4.6.2 定义User实体类的映射文件

4.7创建测试类

4.7.1读取MyBatis核心配置文件

4.7.2创建SqlSessionFactory实例

4.7.3 创建SqlSession实例

4.7.4 创建Mapper实例并执行SQL映射文件中的SQL语句

4.7.5 关闭sql会话

5.封装SqlSession

6.小结

1.MyBatis简介

    MyBatis是一个半自动化的ORM框架,主要用来执行对象属性与数据库字段的一个映射,其实就是对JDBC的封装,使用MyBatis会把公共资源进行一个封装,如数据库的开关及执行SQL语句,映射等,开发人员只需关注SQL即事务,做到了程序和业务相分离。

温馨提示:想复习JDBC的友友们可以看这篇文章哦: JDBC访问数据库_千小半的博客-CSDN博客_jdbc数据库访问

2.ORM框架

概述:ORM 全称: (Object Relational Mapping) 即对象关系映射。

作用:   对实体类中的属性与数据库中的字段做一个映射。

3.数据持久化

持久化 :将数据从内存中写到磁盘上,即时计算机重新启动,数据依然不会丢失。

持久化手段:写到文件里,写入数据库中等。

4.Mybatis入门实战案例

4.1 下载mybatis的jar包

- 下载地址: Releases · mybatis/mybatis-3 (github.com)

-  直接下载最新版本解压版的即可

4.2 将jar包导入工程中

 - 找到jar包路径导入工程勾选即可

4.3 配置Mybatis的核心配置文件

4.3.1 MyBatis核心文件模板(mybatis-config)

- db.properties 外部属性文件:用于配置数据库的前置操作:如: driver,username...

<?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>
    <!--加载其他配置文件-->
    <properties resource="db.properties"></properties>
    <environments default="development">
        <!--开发环境-->
        <environment id="development">
            <!--数据源类型  jdbc-->
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!--驱动-->
                <property name="driver" value="${driver}"/>
                <!--数据库地址-->
                <property name="url" value="${uri}"/>
                <!--用户名-->
                <property name="username" value="${username}"/>
                <!--密码-->
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--mapper文件所在路径-->
    <mappers>
        <mapper resource=""/>
    </mappers>
</configuration>

4.3.2 mybatis-config模板的设置

4.4 创建User 实体类


public class User implements Serializable {
    private Integer id;
    private String  name;
    private String password;

    //省略get set 方法...

}

4.5定义DAO层Mapper接口

- 在此接口中定义与操作数据库的一系列方法

public interface UserMapper {

    /**
     * 获取所有用户信息
     */
    List<User> getAllUser();

}

4.6定义SQL映射文件

4.6.1 SQL映射文件模板

<?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">
<!--命名空间,所对应的mapper接口的完全限定路径-->
<mapper namespace="">
    
</mapper>

4.6.2 定义User实体类的映射文件

- namespace 为命名空间,表示该SQL文件与接口发生映射

<?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">
<!--命名空间,所对应的mapper接口的完全限定路径-->
<mapper namespace="cn.bdqn.mapper.UserMapper">
    <!--id写的是方法名称-->
 <select id="getAllUser" resultType="user">
     select id,name,password from user
 </select>

<mapper>

4.7创建测试类

4.7.1读取MyBatis核心配置文件

//1.加载Mybatis配置文件转换为输入流
 InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");

4.7.2创建SqlSessionFactory实例

 //2.创建sqlSession工厂
  SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);

4.7.3 创建SqlSession实例

 //3.打开Sqlsession
  SqlSession  sqlSession = build.openSession();

4.7.4 创建Mapper实例并执行SQL映射文件中的SQL语句

   //4.获取映射文件并调用方法
    List<User> allUser = sqlSession.getMapper(UserMapper.class).getAllUser();

4.7.5 关闭sql会话

//5.拿到数据进行操作.....省略
//6.关闭会话
sqlsession.close();

5.封装SqlSession

-  SqlSessionFactory的生命周期是在整个应用运行时,如果在这期间,分别创建了多个是实例的话,就不符合单例模式的要求,即一个应用只能存在一个实例

封装方式: 创建一个MyBatis工具类 定义创建,关闭两个方法,使他们成为静态的,类加载时就已创建成功,当然这不是更好的封装方式,再完美一点,就要用spring框架来解决了(当然我还没学到哈哈)。

MyBatisUtil 工具类

/**
 * Mybatis封装工具类
 */
public class MybatisUtil {
    private static InputStream resourceAsStream;

    static {
        //加载Mybatis配置文件转换为输入流
        try {
            resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
    /**
     * 获取SqlSession
     *
     * @param flag 是否开启事务
     * @return
     */
    public static SqlSession getSqlSession(boolean flag) {
        SqlSession sqlSession = null;
        SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //打开SqlSession
        sqlSession = build.openSession();
        return sqlSession;
    }

    /**
     * 关闭SqlSession
     */
    public static void closeSqlSession(SqlSession sqlSession) {
        sqlSession.close();
    }
}

6.小结

  1. 先填入MyBatis核心配置文件名称地址
  2. 通过流去加载mybatis-config 配置文件
  3. 通过SqlSessionFactoryBuilder 去加载并构建SqlSessionFactory实例,该实例用完方法就会被丢弃
  4. SqlSessionFactory去生成SqlSession的一个会话,作用域为整个应用
  5. Sqlsession去打开连接并去创建获取映射文件中的sql执行,作用域为一个会话内
  6. 最后关闭sql会话

  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/41096.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

11.25学到的东西==命令行

创建文件&#xff0c;可以直接选择文件之后再加上.py import argparse# 单个参数 # 创建解析器 # ArgumentParser 对象包含将命令行解析成 Python 数据类型所需的全部信息。 parser argparse.ArgumentParser() # 单独的参数 square 之后这个help就是提示的信息 # 显示给定数字…

【药材识别】基于matlab GUI SVM色差色温判断药材炮制程度系统【含Matlab源码 2241期】

⛄一、SVM色差色温判断药材炮制程度系统简介 本课题来源于"十二五"国家科技支撑计划项目(2012BAI29B11).颜色是中药质量标准中性状评价极为重要的内容,但传统的中药颜色检测大多依靠人的感官评估,人对颜色的辨别是一个非常复杂的过程,受到光学,视觉生理,视觉心理等诸…

JDBC操作数据库实现增、删、查、改

0.JDBC概念 实际开发中,手动的输入SQL语句是少之又少,大多数情况下是通过编译代码进行来控制自动执行. 具体操作如下: 上述展示有一个【自己写的Mysql客户端】&#xff0c;这种操作是非常容易的&#xff0c;因为各种数据库本身就提供一系列的API&#xff0c;可以让用户很方便…

wordpress 安装主题显示要配置FTP的解决办法

目录 问题复现 1、在安装插件的时候会弹出一个窗口 2、输入相关信息后显示失败 问题解决方法 1、查看wordpress文件权限 2、修改wordpress文件权限 3、插件安装完后&#xff0c;将权限改回 场景&#xff1a;基于Linux 的 wordpress 安装主题显示要配置FTP 安装插件或者主…

RegExp 对象

文章目录RegExp 对象创建RegExp对象正则表达式语法RegExp 对象方法支持正则表达式的 String 对象的方法RegExp.prototype[search]()replace() 方法match()常用正则表达式RegExp 对象 RegExp对象表示正则表达式&#xff0c;是由普通字符和特殊字符(也叫元字符或限定符)组成的文…

基于节点分层的配网潮流前推回代方法matlab程序(IEEE33节点潮流计算)

基于节点分层的配网潮流前推回代方法matlab程序&#xff08;IEEE33节点潮流计算&#xff09; 摘要&#xff1a;结合配电网特有的辐射状特点&#xff0c;提出了一种新的基于节点分层的配网潮流前推回代方法。该方法利用配网支路及其节点参数所形成的节点-节点关联矩阵推导出节点…

MiniAlphaGo黑白棋 蒙特卡洛搜索

做个笔记。 一、蒙特卡洛在黑白棋的应用 输入&#xff1a;棋盘&#x1d44f;&#x1d45c;&#x1d44e;&#x1d45f;&#x1d451;、当前执子方&#x1d450;&#x1d45c;&#x1d459;&#x1d45c;&#x1d45f;、搜索时间&#x1d461;&#x1d456;&#x1d45a;&#x…

小米平板5ProWIFI(elish)刷ArrowOS

文章目录警告下载奇兔刷机系统本体及Recovery清除数据刷入AospRec开始刷入警告完成设置输入法变砖头了qwq又是警告芝士截图Root方法结尾警告 此文章只针对 小米平板5Pro Wifi版本&#xff08;elish&#xff09; 由于条件限制&#xff0c;本文大部分无配图 请务必仔细认真阅读此…

Airflow用于ETL的四种基本运行模式, 2022-11-20

(2022.11.20 Sun) 基本运行模式(pattern)是data pipeline使用Airflow的DAG的不同结构&#xff0c;基本模式有如下四种 &#xff1a; 序列Sequence平行拆分Parallel split同步Synchronisation单选Exclusive choice 序列模式 序列模式即若干task按先后顺序依次执行&#xff0c;…

中远通在创业板IPO过会:前三季度收入11亿元,罗厚斌为董事长

近日&#xff0c;深圳证券交易所创业板披露的新显示&#xff0c;深圳市核达中远通电源技术股份有限公司&#xff08;下称“中远通”&#xff09;获得上市委会议通过。据贝多财经了解&#xff0c;中远通于2021年6月30日在创业板递交申请。 本次冲刺创业板上市&#xff0c;中远通…

以go rabbitmq为例子--用最少的时间最好的掌握消息队列

为什么要使用消息队列&#xff1f; 流量削峰 举个例子&#xff0c;如果订单系统最多能处理一万次订单&#xff0c;这个处理能力应付正常时段的下单时绰绰有余&#xff0c;正常时段我们下单一秒后就能返回结果。但是在高峰期&#xff0c;如果有两万次下单操作系统是处理不了的…

向QTableView单元格插入窗体小部件的功能实现

1.前言 我们知道&#xff1a;QTableWidget类有如下函数&#xff1a; void QTableWidget::setCellWidget(int row, int column, QWidget *widget) 可以实现在指定的单元格插入窗体部件QWidget对象&#xff0c;如下代码&#xff1a; setCellWidget(row, column, new QLineEdi…

2023年天津财经大学珠江学院专升本管理学原理专业考试大纲

天津财经大学珠江学院2023年高职升本科专业课考试《管理学原理》考试大纲一、本大纲系天津财经大学珠江学院2023年高职升本科《管理学原理》课程考试大纲。所列考试范围出自徐碧琳主编的教材《管理学原理&#xff08;第二版&#xff09;》&#xff0c;机械工业出版社&#xff0…

刨根问底 Kafka,面试过程真好使

大家好&#xff0c;这里是 菜农曰&#xff0c;欢迎来到我的频道。 充满寒气的互联网如何在面试中脱颖而出&#xff0c;平时积累很重要&#xff0c;八股文更不能少&#xff01;下面带来的这篇 Kafka 问答希望能够在你的 offer 上增添一把&#x1f525;。 Kafka最初是由Linkedin公…

【掌握K8S集群部署】手把手真正实现Kubernetes集群的配置与部署(附问题解决方法)

1、环境准备 IPHOSTNAME10.10.20.15k8s110.10.20.16k8s210.10.20.17k8s3 注意hostname不要用下划线、小数点与字母。 2、环境配置&#xff08;所有节点&#xff09; # stop firewalld systemctl stop firewalld systemctl disable firewalld# disable selinux sed -i s/enfo…

读 RocketMQ 源码,学习并发编程三大神器

笔者是 RocketMQ 的忠实粉丝&#xff0c;在阅读源码的过程中&#xff0c;学习到了很多编程技巧。 这篇文章&#xff0c;笔者结合 RocketMQ 源码&#xff0c;分享并发编程三大神器的相关知识点。 1 CountDownLatch 实现网络同步请求 CountDownLatch 是一个同步工具类&#xff…

高性能MySQL-创建高性能索引

什么是索引 MySQL并没有统一的索引标准&#xff0c;不同存储引擎的索引的工作方式并不一样&#xff0c;也不是所有的存储引擎都支持所有类型的索引。即使多个存储引擎支持同一种类型的索引&#xff0c;其底层的实现也可能不同。 索引是存储引擎用于快速找到记录的一种数据结构&…

LeetCode 图解 | 206.反转链表(附有知识点回顾)

206.反转链表题目描述思路分析递归方式代码实现迭代方式&#xff08;非递归&#xff09;代码实现知识点回顾题目描述 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 /*** Definition for singly-linked list.* public class ListNode {*…

AtCoder Beginner Contest 279 G. At Most 2 Colors(计数/组合数学/dp递推)

题目 n(2<n<1e6)个格子&#xff0c;从左到右一字排开&#xff0c; 现在需要给格子涂色&#xff0c;有c(1<c<1e9)种颜色&#xff0c; 要求连续的k(2<k<n)个格子的颜色数最多只有2种&#xff0c; 求方案数&#xff0c;答案对998244353取模 思路来源 TOYO…

3. HTML的语法规范

3. HTML的语法规范 3.1.2 注释的作用和写法 ➢ 注释的作用&#xff1a; ​ •为代码添加的具有解释性、描述性的信息&#xff0c;主要用来帮助开发人员理解代码 ​ •浏览器执行代码时会忽略所有的注释 ➢ 注释的快捷键&#xff1a; ​ • 在VS Code中&#xff1a;ctrl / 3.1.…