Mybatis搭建配置文件基础用法参数传递

news2024/9/25 19:23:53

背景介绍

Mybatis原是Apache的一个开源项目iBatis

2010碾开发团队转移到谷歌旗下改名为Mybatis

Mybatis介绍

Mybatis是一个优秀的数据持久层框架(dao层 数据访问层 数据持久层)

Mybatis是对jdbc进行封装,比见面jdbc这手动设置参数,手动映射结果的操作

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

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

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

Mybatis搭建

1.创建一个maven项目

2.导入Mybatis和mysql依赖的jar包

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

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

注意:导入之后记得刷新maven项目

3,创建一个全局的Mybatis配置文件

配置数据库连接等配置

在这里插入图片描述

创建好之后在该xml文件里面配置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">
<configuration>
<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="此处填写自己的mysql地址" />
<property name="username" value="此处填写自己的数据库账号" />
<property name="password" value="数据库密码"/>
</dataSource>
</environment>
</environments>
</configuration>

4,创建数据库,创建表,准备数据

在自己使用的数据库软件上创建一个数据库

5.创建一个访问接口,定义方法

public interface AdminDao{  
Admin findAdminById(int id);
}

6,创建接口对应的映射文件,编写sql

在resources文件夹下创建一个和AdminDao接口产生映射的文件

<?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="接口的地址">
<select id="findAdminById" parameterType="int" resultType="com.ffyc.mybatis.model.Admin">
select * from admin where id = #{id} </select> </mapper>

7.测试Mybatis

读取配置文件

Reader reader = Resources.getResourceAsReader(“mybatis-config.xml”);

创建 SqlSessionFactory

SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);

创建 SqlSession

SqlSession sqlSession = sessionFactory.openSession();

获得接口代理对象

sqlSession.getMapper(接口.class);

sqlSession .close();关闭

API 接口说明

SqlSessionFactory 接口

使用 SqlSessionFactory 来创建 SqlSession,一旦创建 SqlSessionFactory 就会在整个应用过程中始终存在。由于创建开销较大,所以没有理由去销毁再创建它,一个应用运行中也不建议多次创建 SqlSessionFactory。

SqlSession 接口

Sqlsession 意味着创建与数据库链接会话,该接口中封装了对数据库操作的方法,与数据库会话完成后关闭会话

补充

1.在idea安装MybatisX插件

在这里插入图片描述

在Idea的设置里点开plugin插件市场,在里面搜索MybatisX下载即可使用

该插件方便在Dao和映射之间进行切换

2.数据库连接池

链接数据库,每次访问数据库时创建一个connection,用完关闭

但是访问量大了之后,每次访问都要创建新的连接对象,比较耗时

使用数据库连接池,在池中事先创建一些连接对象

用户访问时就直接获取一个连接对象

用完不销毁,还回到池中

3,设置MybatisUtil类

由于mybatis中每一个方法都需要读取配置文件,并且创建sqlsessionFactory

这是一个重复性的操作,可以将其放在一个工具类中

创建一个静态代码块,将值固定赋值给静态的sqlSessionFactory对象中

public class MyBatisUtil {

    static  SqlSessionFactory sqlSessionFactory = null;
    static {
        //1.mybatis读取配置文件
        Reader resourceAsReader  = null;
        try {
            resourceAsReader = Resources.getResourceAsReader("mybatis.xml");
        } catch (IOException e) {
            e.printStackTrace();
        }
        //2.创建sqlSessionFactory,负责创建SqlSession 对象(连接数据库的会话对象,类似Connection)
        //sqlSessionFactory对象也是只需要创建一个,创建后不需要销毁
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsReader);
    }

    //获得sqlsession对象
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }
}

之后就可以之间调用MybatisUtil中的getSqlSession方法获得Session了

Mybatis-Dao 层面向接口开发

面向接口开发方式只需要程序员编写接口,由 Mybatis 框架创建接口的动态代理对象,使用 sqlsession.getMapper(接口.class);获得代理对象. 面向接口开发需要遵循以下规范:

1、 Mapper.xml 文件中的 namespace 与 mapper 接口的类路径相同.

2、 Mapper 接口方法名和 Mapper.xml 中定义的每个 statement 的id 相同.

3、 Mapper 接口方法的输入参数类型和 mapper.xml 中定义的每个 sql 的parameterType 的类型相同.

4、 Mapper 接口方法的输出参数类型和 mapper.xml 中定义的每个 sql 的resultType 的类型相同.

Mybatis 日志

Mybatis 内置的日志工厂提供日志功能,具体的日志实现有以下几种方式:

SLF4J|LOG4J|JDK_LOGGINGCOMMONS_LOGGING|STDOUT_LOGGING

在这里插入图片描述

在mybatis.xml文件中使用setting标签进行配置

<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>

参数传递

Mybatis可以进行多种参数传递

//单个参数传递
    Admin findAdminByAccount(String account);
    void deleteAdmin(int id);
    Admin findAdminById(int id);

    //多个参数传递
    Admin login(@Param("acc") String account, @Param("pwd") String password);

    //将参数封装在对象中传递
    Admin login1(Admin admin);

对于单个参数传递只需要直接传递

对于多个参数传递可以使用@param(“id”)对参数进行绑定,用于区分参数类型中的具体参数

也可以将参数封装到一个对象内进行传递

<select id="selectAdmins" resultType="Admin">
select id, account, password from admin
where account= #{account} and password=#{password}
</select>
<insert id="insertAdmin" parameterType="Admin">
insert into admin(id, account, password)
values (#{id}, #{account}, #{password})
</insert>

数据库事务

数据库事务:是数据库的一种管理机制,是对一次链接数据库过程的管理
转账:
1.先从A账户减钱
其他代码逻辑(可能出现异常)
2.再向B账户加钱
提交事物 数据库才会真正的在数据库执行这一次

增删改查

提交数据库事务,当程序代码执行没有任何问题时,在向数据库发送提交事物操作,数据库真正执行sql
新增,修改,删除都需要手动提交事务

增加

 @Test
    public  void  insert(){
        Admin admin = new Admin();
        admin.setPassword("123");
        admin.setAccount("aaa");
        admin.setGender("女");
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        AdminDao adminDao = sqlSession.getMapper(AdminDao.class);
        adminDao.insertAdmin(admin);
        sqlSession.commit();
        sqlSession.close();

    }

删除

@Test
    public void  delete(){
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        AdminDao adminDao = sqlSession.getMapper(AdminDao.class);
        adminDao.deleteAdmin(7);

        sqlSession.commit();//提交事务
        sqlSession.close();
    }

修改

@Test
    public void update(){
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        AdminDao adminDao = sqlSession.getMapper(AdminDao.class);

        Admin admin = new Admin();
        admin.setId(1);
        admin.setAccount("bbb");
        admin.setPassword("123");
        adminDao.updateAdmin(admin);

        sqlSession.commit();
        sqlSession.close();
    }

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

高变比LLC谐振变换器中“十”字型低匝比平面变压器设计

导语 为了解决高变比LLC谐振变换器的变压器绕组匝数过多、绕组结构复杂这一技术瓶颈背后的核心科学问题&#xff0c;本文提出一种“十”字型低匝比平面变压器&#xff0c;用于高变比LLC谐振变换器。 1.0引言 大数据中心的建设离不开供配电系统—电源设备的建设&#xff0c;为大…

15天速通java基础:java(J2SE)阶段学习总结(数据类型、数组、方法、面向对象、异常处理、容器、流、多线程、网络编程)

有一段时间没有写博客了&#xff0c;我这段时间去学习java了&#xff0c;谁也不会想到&#xff0c;短短两周的时间&#xff0c;我的java学习已经学习了不少东西了&#xff0c;毕竟python这座山也可以去攻java这块玉&#xff0c;对应python那就是基础的大部分内容&#xff0c;不…

吴恩达机器学习课后作业-06支持向量机(SVM)

SVM 线性可分SVM题目绘制决策边界改变C,观察决策边界代码 线性不可分SVM核函数代码 寻找最优C、gamma垃圾邮件过滤 线性可分SVM 题目 数据分布 绘制决策边界 import numpy as np import matplotlib.pyplot as plt import scipy.io as sio from scipy.optimize import minimi…

电子电路学习之二极管-1

特别感谢&#xff1a;B站博主&#xff1a;唐老师讲电赛 工科男孙老师 本文图片出自两位博主视频 再次感谢 1 半导体 1. 本征半导体 (Intrinsic Semiconductor) 定义&#xff1a;本征半导体是指纯净的、不掺杂任何杂质的半导体材料&#xff0c;如硅&#xff08;Si&#xff09;…

日本人形机器人仿真环境搭建

机器人 官网在这里 http://ai2001.ifdef.jp/uvc/uvc.html 我们可以下载他们的源码 ODE引擎安装 这个是刚体动力学模拟引擎&#xff0c;我用的是windows&#xff0c;大家可以自己参考着官网来&#xff08;http://ode.org/wiki/index.php/Manual#Install_and_Use&#xff09;…

【SpringBoot】自定义spring-boot-starter

目录 定义和目的# 命名规范# 准备阶段# 开发步骤# 一、创建 Starter 项目# 二、导入必要的依赖# 三、编写属性类# 四、自定义业务类# 五、编写自动配置类# 六、编写 spring.factories# ​编辑 七、编写配置提示文件# 八、测试 starter# 测试 starter# 一、导入自…

如何玩转CentOS Linux内核升级?手把手教你内核编译升级至最新版本

文章目录 如何玩转CentOS Linux内核升级&#xff1f;手把手教你内核编译升级至最新版本1 升级环境2 升级需求2.1 升级前的内核版本2.2 升级后的内核版本 3 升级步骤3.1 安装编译环境3.2 更新GCC版本3.2.1 多GCC版本共存3.2.2 永久替换旧的GCC 3.3 下载内核源代码并解压3.4 配置…

《数据结构》(408代码题及应用题)(王道收编真题)

一、线性表 1、线性表的线性表示 分析&#xff1a; “循环”左移&#xff0c;那这个循环就应该是我们需要重点思考的点。先考虑最简单的我们可以设置两个数组&#xff0c;其中一个数组保存的是原数据&#xff0c;另一个初始为空。接着想要实现循环左移就只需要找出相对应的位…

2002-2023年中债国债3年期到期收益率

国债是一种政府发行的债券&#xff0c;它为投资者提供了一种相对安全的投资渠道&#xff0c;因为背后有国家信用的支撑。国债的发行可以帮助政府筹集资金&#xff0c;用于公共支出、基础设施建设、社会福利等项目。国债通常分为两种形式&#xff1a;固定利率国债和浮动利率国债…

PHP 7.4.21 development server 源码泄露漏洞复现

原漏洞地址&#xff1a;https://blog.projectdiscovery.io/php-http-server-source-disclosure/ 版本&#xff1a;PHP<7.4.21 漏洞成因&#xff1a; 通过&#xff1a;PHP -s 开启的内置web服务器存在源码泄露漏洞&#xff0c;可以将PHP文件作为静态代码直接输出源码 POC&…

【区间dp】 P1775 石子合并(弱化版) 题解

题目描述 设有 N ( N ≤ 300 ) N(N \le 300) N(N≤300) 堆石子排成一排&#xff0c;其编号为 1 , 2 , 3 , ⋯ , N 1,2,3,\cdots,N 1,2,3,⋯,N。每堆石子有一定的质量 m i ( m i ≤ 1000 ) m_i\ (m_i \le 1000) mi​ (mi​≤1000)。现在要将这 N N N 堆石子合并成为一堆。每…

20240825 每日AI必读资讯

超6亿&#xff01;文心大模型日调用量半年增长超10倍&#xff0c;AI成百度最强加速引擎 - 文心大模型日调用量超过6亿次&#xff0c;日均处理Tokens文本超1万亿。与23年Q4公布的5000万次日均调用量相比&#xff0c;半年增长超10倍。 - 第二季度&#xff0c;百度云业务营收51亿…

【计算机网络】socket网络编程 --- 实现简易UDP网络程序之字符串回响

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在学习c和算法 ✈️专栏&#xff1a;Linux &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章有啥瑕疵&#xff0c;希望大佬指点一二 如果文章对…

【北京仁爱堂】脖子歪斜,拉扯疼痛怎么办?规律的生活让痉挛性斜颈的恢复事半功倍!

痉挛性斜颈是一种肌张力障碍性疾病&#xff0c;也是一种让人非常痛苦不堪的疾病&#xff0c;他不仅影响患者的外貌&#xff0c;也会对患者的身体和心理造成双重的打击&#xff0c;严重影响正常的生活&#xff0c;社交和工作。 痉挛性斜颈的病因尚不明确&#xff0c;因为做任何仪…

Java Web —— 第八天(登录功能)

基础登录功能 LoginController 类 RestController //用于处理 HTTP 请求 Slf4j //记录日志 RequestMapping("/login") public class LoginController {Autowiredprivate EmpService empService;PostMappingpublic Result login(RequestBody Emp emp){log.info(&quo…

FFmpeg的入门实践系列六(编程入门之常见处理流程)

欢迎诸位来阅读在下的博文~ 在这里&#xff0c;在下会不定期发表一些浅薄的知识和经验&#xff0c;望诸位能与在下多多交流&#xff0c;共同努力 文章目录 前期博客参考书籍一、FFmpeg常见的处理流程复制编解码器的参数完整代码 二、创建并写入音视频文件三、总结附页 前期博客…

《黑神话:悟空》中的实景三维建模

这几天&#xff0c;国产游戏《黑神话:悟空》终于面世&#xff0c;迅速引爆了全球游戏市场。作为一款以《西游记》为背景的3A级动作角色扮演游戏&#xff0c;《黑神话:悟空》不仅在文化表达上极具吸引力&#xff0c;其背后的技术实力更是令人瞩目。本文将深入探讨&#xff0c;3A…

新“冰桶挑战”风靡奥运年,荣耀让科技有温度

巴黎奥运会落幕之后&#xff0c;残奥会即将在8月28日正式开赛&#xff0c;“超越自我&#xff0c;挑战极限”的拼搏精神仍在延续。 而挑战精神&#xff0c;不分场上或台下&#xff0c;存在于生活中的每个角落。 2024年不仅是奥运年&#xff0c;也是“冰桶挑战”的十周年&…

DMP调研(Data Management Platform-数据管理平台)

基础概念 数据资产 CRM、DMP、CDP 定义 Customer Data Platform&#xff08;CDP,客户数据平台&#xff09;&#xff1a;对于企业来说&#xff0c;CDP是作为全链路运营的核心数据系统。是汇集所有客户数据并将数据存储在统一的、可多部门访问的数据平台中&#xff0c;让企业各…

【Remi Pi使用HDMI屏幕显示QT界面】将QT工程在Ubuntu虚拟机交叉编译好拷贝到开发板并运行

开发板和Ubuntu虚拟机ssh连接 可以成功点亮hdmi屏幕&#xff08;默认是运行的mxapp2程序显示如下&#xff09; 可以在开发板上运行自己的qt程序界面 手动配置开发板以太网ip ip addr add 192.168.43.101/24 brd dev eth0 ip link set eth0 &#xff08;2&#xff09;虚拟机…