【Mybatis】介绍+搭建+参数传递+增删改查操作+事务与连接池

news2024/11/15 9:05:45

目录

一. Mybatis介绍

二. Mybatis搭建

1. 导入Mybatis依赖的jar包

2. 创建Mybatis全局配置文件  

3. 定义一个接口

4. 创建sql映射文件

5. 测试 

* MyBatisX插件安装

三. 数据库连接池

四. 参数传递

1. 将数据封装到对象中

2. 使用@Param注解

五. 数据库事务

六. 单元测试

七. Mybatis基础操作

1. 新增操作

2. 删除操作

3. 修改操作 

4. 单表查询


一. Mybatis介绍

 Mybatis的历史  

• Mybatis原是apache下面的一个开源项目,起初叫ibatis,2010年开发团队转移到谷歌旗下,改名为Mybatis

▐ Mybatis介绍

• Mybatis是一款优秀的持久层框架(dao层)

• Mybatis是对JDBC进行了封装,避免了几乎所有的JDBC代码手动设置参数以及手动获取结果集的操作

• Mybatis将JDBC中的接口进行封装,提供了它自己的类和接口实现

• Mybatis可以使用xml配置和注解的方式,将数据库中的数据自动映射到java对象中,是一种ORM实现(对象关系映射)

• Mybatis还提供了动态sql数据缓存

二. Mybatis搭建

1. 导入Mybatis依赖的jar包

创建maven项目,并在pom.xml文件中导入Mybatis所依赖的jar包,由于Mybatis是对JDBC代码进行了封装,所以还需要导入mysql数据库驱动包,如图所示:

    <dependencies>
        <!--  mybatis-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.2</version>
        </dependency>

        <!--  mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.16</version>
        </dependency>
    </dependencies>

2. 创建Mybatis全局配置文件  

右键resources目录,选择File,创建一个xml文件,此文件用来写Mybatis全局配置相关的代码,如图所示:

创建之后将下面的代码复制粘贴到此配置文件中(mybatis.xml):

<?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>
    <settings>
        <!-- 日志 -->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
        <!-- 开启数据库列名与java属性名转换,例如user_name  userName  -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>

    <typeAliases>
        <package name="com.ffyc.mybatispro.model"/>
    </typeAliases>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/ssmdb?serverTimezone=Asia/Shanghai" />
                <property name="username" value="root" />
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <!--    配置sql映射文件-->
    <mappers>
    </mappers>

</configuration>

注意将参数修改为自己的数据库连接信息 

代码解读:

3. 定义一个接口

 我们以通过id查询管理员信息为例,数据库表如图所示 :

➱ 表创建代码:

-- 创建一张表(admin)
CREATE TABLE admin(
 id INT PRIMARY KEY AUTO_INCREMENT,
 account VARCHAR(20) UNIQUE,
 PASSWORD VARCHAR(50) NOT NULL,
 gender CHAR(1)
)

➱ 当然还需要创建一个实体类:(Admin) 

package com.ffyc.mybatispro.model;

public class Admin {
    private int id;
    private String account;
    private String password;
    private String gender;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getAccount() {
        return account;
    }

    public void setAccount(String account) {
        this.account = account;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }
}

4. 创建sql映射文件

与全局配置文件一样,sql映射文件同样在resources目录下创建,同样是xml文件,并且通常写在mappers目录下,如图所示:

<?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 namespace="com.ffyc.mybatispro.dao.AdminDao">

    <select id="findAdminById" parameterType="int" resultType="Admin">
        select * from admin where id = #{id}
    </select>
</mapper>

创建完sql映射文件后还需要再全局配置文件中进行配置:

5. 测试 

import com.ffyc.mybatispro.dao.AdminDao;
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 java.io.IOException;
import java.io.Reader;

public class Test1 {
    public static void main(String[] args) throws IOException {
        //1.Mybatis读取配置文件
        Reader reader = Resources.getResourceAsReader("mybatis.xml");
        //2.创建SqlSessionFactory,负责创建SqlSession(负责连接数据库的会话对象,,类似Connection)
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
        //3.创建SqlSession
        SqlSession sqlSession =sessionFactory.openSession();
        //4.创建接口的代理对象
        AdminDao adminDao = sqlSession.getMapper(AdminDao.class);
        adminDao.findAdminById(1);
        //提交数据库事务
        sqlSession.commit();
        //关闭连接
        sqlSession.close();
    }
}

* MyBatisX插件安装

三. 数据库连接池

连接数据库后,每次访问数据库时都需要创建一个Connection连接对象,并且用完后关闭销毁,若在访问量很大的情况下,这样每次创建新的连接对象是很耗时的,所以可以使用数据库连接池,在池中事先创建一些连接对象(Connection),当用户访问时直接从池中获取一个连接对象,并且用完后不会销毁,而是继续返还到池中,从而减少频繁地创建和销毁连接对象,提高效率!

在Mybatis全局配置文件中对应代码如图:

四. 参数传递

上文中通过id查询管理员信息的案例中,我们只需要传入单个参数(id)即可,属于单个参数的传递,那么要是多个参数该怎么传递呢?

1. 将数据封装到对象中

解决方法1:封装到对象中,通过对象中定义的属性传参

以登录为例:需要传入account和password两个参数

2. 使用@Param注解

解决方法2:使用@Param注解

五. 数据库事务

•  简单讲,事务管理就是一次对数据库操作过程中,执行多条sql的管理。

 •  事务只针对新增,修改,删除操作,查询是不需要提交事务的。

 •  当执行一系列数据库操作时,JDBC事务管理器会确保要么所有操作都成功提交,要么在出现错误时全部回滚,以保证数据的完整性和一致性。

 •  例如生活中的转账操作,要从A账户向B账户转200元,那么就需要向数据库发送2条sql

    sql1:A账户 -200                                   ①

    其它代码(可能出现异常)                    ②

    sql2:B账号 +200                                  ③

当JDBC把sql代码发送给数据库时,此时不会立刻执行,而是把所有操作都成功执行完后再提交事务

若每执行一条sql就提交一次事务,那么如果①成功执行,②出现异常,导致③没有执行,但由于①成功执行后提交了事务,会出现A账号-200,B账户没有+200的情况!

六. 单元测试

单元测试就是以方法为单位进行测试

首先需要在maven项目的pom.xml文件中导入junit组件,然后在要测试的方法上添加@Test注解标签即可。

        <!--junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>provided</scope>
        </dependency>

七. Mybatis基础操作

1. 新增操作

 

添加成功! 

<!--    映射文件新增操作sql语句-->
    <insert id="insertAdmin" parameterType="Admin">
        insert into admin (account,password,gender)values(#{account},#{password},#{gender})
    </insert>

2. 删除操作

<!--    删除操作-->
    <delete id="deleteAdmin" parameterType="int">
        delete from admin where id=#{id}
    </delete>

3. 修改操作 

<!--    修改操作-->
    <update id="updateAdmin" parameterType="Admin">
        update admin set account=#{account},password=#{password} where id=#{id}
    </update>

4. 单表查询

简单的单表查询在案例中已经给大家演示了,这里不做具体解读了,只分享代码:

//定义接口
Admin findAdminById(int id);

//映射sql
<select id="findAdminById" parameterType="int" resultType="Admin">
    select * from admin where id = #{id}
</select>
    
//测试类          
Reader reader = Resources.getResourceAsReader("mybatis.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession sqlSession =sessionFactory.openSession();
AdminDao adminDao = sqlSession.getMapper(AdminDao.class);
adminDao.findAdminById(1);  //单个参数传递
//查询操作不需要提交事务

关于多表的关联查询内容涉及较多,会在下一篇文章中详细讲解...




 本次的分享就到此为止了,希望我的分享能给您带来帮助,创作不易也欢迎大家三连支持,你们的点赞就是博主更新最大的动力!如有不同意见,欢迎评论区积极讨论交流,让我们一起学习进步!有相关问题也可以私信博主,评论区和私信都会认真查看的,我们下次再见

 海漫浩浩,我亦苦作舟!大家一起学习,一起进步!    本人微信:g2279605572(欢迎大家与我交流)   

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

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

相关文章

11、Redis高级:Key设置、BigKey解决、批处理优化、集群下批处理、慢查询

Redis高级篇之最佳实践 今日内容 Redis键值设计批处理优化服务端优化集群最佳实践 1、Redis键值设计 1.1、优雅的key结构 Redis的Key虽然可以自定义&#xff0c;但最好遵循下面的几个最佳实践约定&#xff1a; 遵循基本格式&#xff1a;[业务名称]:[数据名]:[id]长度不超过…

【golang学习之旅】复杂数据类型——切片(slice)

系列文章 【golang学习之旅】使用VScode安装配置Go开发环境 【golang学习之旅】报错&#xff1a;a declared but not used 【golang学习之旅】Go 的基本数据类型 【golang学习之旅】深入理解字符串string数据类型 【golang学习之旅】go mod tidy 【golang学习之旅】记录一次 p…

OpenHarmony实战开发: unittest单元测试的编写

背景 程序开发与单元测试二者密不可分&#xff0c;是每个开发人员的基本业务。当功能性代码开发完成后&#xff0c;要自行测试其是否满足设计预期&#xff0c;如果不满足就要回去完善代码&#xff0c;满足则可以提交功能代码及测试用例。 测试用例的另一个重要作用就是阅读者…

【USRP】 Link 16 战术数据链 实训系统

Link 16 战术数据链 实训系统 一、基于USRP的Link16平台简介1、整体架构2、JTIDS终端架构3、平台特点3.1、提高技术理解与应用能力3.2、培养创新思维与问题解决能力3.3、加强跨学科融合与团队合作 4、平台建设4.1、基础理论教学模块4.2、LabVIEW 算法模块4.3、USRP仿真模块4.4、…

如何用ChatGPT快速提升论文质量:实用技巧大公开

近年来&#xff0c;人工智能技术急速发展&#xff0c;尤其在自然语言处理领域取得了显著进展。作为OpenAI推的一款先进的语言模型&#xff0c;ChatGPT不仅在日常交互中表现卓越&#xff0c;也在专业写作领域显示了巨大的潜力。本文旨在详尽介绍如何高效运用ChatGPT来撰写和修改…

JWT双令牌认证实现无感Token自动续约

概念 JSON Web Token (JWT)是一个开放标准(RFC 7519) &#xff0c;它定义了一种紧凑和自包含的方式&#xff0c;用于作为 JSON 对象在各方之间安全地传输信息。此信息可以进行验证和信任&#xff0c;因为它是经过数字签名的。JWT 可以使用机密(使用 HMAC 算法)或使用 RSA 或 E…

LeetCode --- 411周赛

题目列表 3258. 统计满足 K 约束的子字符串数量 I 3259. 超级饮料的最大强化能量 3260. 找出最大的 N 位 K 回文数 3261. 统计满足 K 约束的子字符串数量 II 一、统计满足K约束的子字符串数量I 这种要求满足区间内某种性质的题&#xff0c;一般都可以用滑动窗口来做。这题…

STM32MP157_uboot_初次编译

STM32MP157_uboot_初次编译 前言&#xff1a; 为了快速入门&#xff0c;这边选择直接使用正点原子提供的uboot源码&#xff0c;先体验一下uboot的编译流程&#xff0c;为后面的移植原厂uboot做环境准备。 1、获取正点原子的uboot源码&#xff08;复制到虚拟机里面&#xff09; …

均值漂移算法原理及Python实践

均值漂移算法&#xff08;Mean Shift Algorithm&#xff09;是一种基于密度的非参数聚类算法&#xff0c;其原理主要基于核密度估计和梯度上升方法。以下是均值漂移算法原理的详细解析&#xff1a; 1. 基本思想 均值漂移算法的基本思想是通过迭代地更新数据点的位置&#xff…

Android APK优化系列瘦身篇:实战一个APK从11MB压缩到4MB,APK无用资源去除与代码压缩、混淆,瘦身维度的选型分析

目录&#xff1a; 为什么要进行APK瘦身呢&#xff1f;APK瘦身主要是瘦身哪些呢&#xff1f; a. 优化resources.arsc&#xff1a; b. res优化 c. lib优化 d. 资源优化&#xff0c;代码混淆和压缩总结 一、为什么要进行APK瘦身呢&#xff1f; 减少下载时间和流量消耗&#xff1…

el-table 表格自定义添加表格数据后自动滚动到最底部

动态表格&#xff0c;可以新增行列数&#xff0c;为了用户体验&#xff0c;新增后超出表格流体高度后&#xff0c;自动滚动到最下方 需要element-plus如下api 代码如下&#xff1a; const addCapacity () > {inputList.value.push({name: "",desc: "&quo…

案例-登录认证

案例-登录认证 登录认证。 最终实现的效果就是用户必须登录之后&#xff0c;才可以访问后台系统中的功能。 1. 登录功能 1.1 需求 在登录界面中&#xff0c;我们可以输入用户的用户名以及密码&#xff0c;然后点击 “登录” 按钮就要请求服务器&#xff0c;服务端判断用户输入…

streamlit创建python的web应用

目录 简介基本示例&#xff1a;运行 Streamlit 应用&#xff1a; 简介 Streamlit 是一个开源的 Python 库&#xff0c;可以让你快速创建和分享自定义的 Web 应用&#xff0c;尤其适用于机器学习和数据科学项目。它简化了将数据脚本转换为交互式应用的过程&#xff0c;不需要任…

【案例54】登录显示ORA-28000 账户被锁定

问题现象 登录后显示ora-28000 账户被锁定 问题分析 ORA-28000 表示账户被锁定。 错误原因分析 1、密码多次输入错误&#xff1a;这是最常见的导致账户锁定的原因之一。用户在尝试登录数据库时&#xff0c;如果连续多次输入错误的密码&#xff0c;数据库系统为了安全起见&am…

sheng的学习笔记-AI-生成式方法

AI目录&#xff1a;sheng的学习笔记-AI目录-CSDN博客 需要额外的知识对应连接&#xff1a; EM&#xff1a;sheng的学习笔记-AI-EM算法-CSDN博客 贝叶斯&#xff1a; sheng的学习笔记-AI-贝叶斯&#xff08;Bayesian&#xff09;分类-CSDN博客 高斯混合模型&#xff1a;shen…

利用Matlab求解常微分方程(dsolve与ode45)

1.微分方程的基本概念 含义微分方程&#xff08;英语&#xff1a;Differential equation&#xff0c;DE&#xff09;是一种数学方程&#xff0c;用来描述某一类函数与其导数之间的关系。微分方程的通解是一个符合方程的函数。而在初等数学的代数方程里&#xff0c;解析解是一个…

RocketMQ~刷盘机制、主从复制方式、存储机制

刷盘机制 生产者发布MQ给Brocker&#xff0c;Brocker在存储这些数据的时候&#xff0c;需要进行刷盘&#xff0c;分为同步刷盘和异步刷盘。 在同步刷盘中需要等待一个刷盘成功的ACK&#xff0c;同步刷盘对MQ消息可靠性来说是一种不错的保障&#xff0c;但是性能上会有较大影响…

推荐5款能够写出高质量文章的ai写作工具!

在如今的信息爆炸时代&#xff0c;内容创作者面临着前所未有的挑战&#xff1a;如何快速而高质量地产生内容&#xff0c;满足日益增长的读者群需求。 无论是自媒体人士、博客作者、学者还是学生&#xff0c;大家都在寻找一种能够提升写作效率与质量的解决方案。 幸运的是&…

oneapi 获取通义千问模型密钥

1、打开 阿里云百炼大模型平台&#xff0c;点击开通&#xff0c;登录账号 2、获取密钥 3、查看模型名称&#xff0c;可以添加到 oneapi 的渠道中 别忘了添加向量模型

基于Java+SpringBoot+Vue的师生共评的作业管理系统设计与实现

基于JavaSpringBootVue的师生共评的作业管理系统设计与实现 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方…