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

本文主要是介绍【Mybatis】介绍+搭建+参数传递+增删改查操作+事务与连接池,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一. 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.创建SqlSessionSqlSession 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(欢迎大家与我交流)   

这篇关于【Mybatis】介绍+搭建+参数传递+增删改查操作+事务与连接池的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1107232

相关文章

vite搭建vue3项目的搭建步骤

《vite搭建vue3项目的搭建步骤》本文主要介绍了vite搭建vue3项目的搭建步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1.确保Nodejs环境2.使用vite-cli工具3.进入项目安装依赖1.确保Nodejs环境

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多

MyBatis延迟加载与多级缓存全解析

《MyBatis延迟加载与多级缓存全解析》文章介绍MyBatis的延迟加载与多级缓存机制,延迟加载按需加载关联数据提升性能,一级缓存会话级默认开启,二级缓存工厂级支持跨会话共享,增删改操作会清空对应缓... 目录MyBATis延迟加载策略一对多示例一对多示例MyBatis框架的缓存一级缓存二级缓存MyBat

idea+spring boot创建项目的搭建全过程

《idea+springboot创建项目的搭建全过程》SpringBoot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目,:本文主要介绍idea+springb... 目录一.idea四种搭建方式1.Javaidea命名规范2JavaWebTomcat的安装一.明确tomcat

使用Java填充Word模板的操作指南

《使用Java填充Word模板的操作指南》本文介绍了Java填充Word模板的实现方法,包括文本、列表和复选框的填充,首先通过Word域功能设置模板变量,然后使用poi-tl、aspose-words... 目录前言一、设置word模板普通字段列表字段复选框二、代码1. 引入POM2. 模板放入项目3.代码

mybatis直接执行完整sql及踩坑解决

《mybatis直接执行完整sql及踩坑解决》MyBatis可通过select标签执行动态SQL,DQL用ListLinkedHashMap接收结果,DML用int处理,注意防御SQL注入,优先使用#... 目录myBATiFBNZQs直接执行完整sql及踩坑select语句采用count、insert、u

利用Python操作Word文档页码的实际应用

《利用Python操作Word文档页码的实际应用》在撰写长篇文档时,经常需要将文档分成多个节,每个节都需要单独的页码,下面:本文主要介绍利用Python操作Word文档页码的相关资料,文中通过代码... 目录需求:文档详情:要求:该程序的功能是:总结需求:一次性处理24个文档的页码。文档详情:1、每个

Python内存管理机制之垃圾回收与引用计数操作全过程

《Python内存管理机制之垃圾回收与引用计数操作全过程》SQLAlchemy是Python中最流行的ORM(对象关系映射)框架之一,它提供了高效且灵活的数据库操作方式,本文将介绍如何使用SQLAlc... 目录安装核心概念连接数据库定义数据模型创建数据库表基本CRUD操作创建数据读取数据更新数据删除数据查

Go语言中json操作的实现

《Go语言中json操作的实现》本文主要介绍了Go语言中的json操作的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录 一、jsOChina编程N 与 Go 类型对应关系️ 二、基本操作:编码与解码 三、结构体标签(Struc

5 种使用Python自动化处理PDF的实用方法介绍

《5种使用Python自动化处理PDF的实用方法介绍》自动化处理PDF文件已成为减少重复工作、提升工作效率的重要手段,本文将介绍五种实用方法,从内置工具到专业库,帮助你在Python中实现PDF任务... 目录使用内置库(os、subprocess)调用外部工具使用 PyPDF2 进行基本 PDF 操作使用