Mybatis学习周报总结

学习Mybatis的周报

在过去的一周里,我们在飞思学习和掌握Mybatis这一优秀的持久层框架。通过谭老师的两周课程,我也有很大的收获。以下是本周的学习总结和收获:

一:Mybatis概述:

MyBatis,全称为My Batis SQL Mapper,是一个优秀的持久层框架,它的设计思想是将SQL语句与Java方法进行映射,从而实现数据库操作的简化和灵活性。相比于传统的JDBC编程,使用MyBatis可以大幅度减少重复的样板代码,提高开发效率和代码可读性。该框架的核心思想是将数据库操作抽象为一个个Mapper接口,开发者只需定义接口,并在XML配置文件中编写对应的SQL语句,MyBatis会自动将二者进行关联。这种分离的设计使得SQL语句与Java代码分离,方便维护和修改。另外,MyBatis还提供了丰富的功能和特性,如动态SQL、参数映射、结果集映射、缓存机制等,可以满足各种复杂的数据库操作需求。同时,MyBatis与Spring等常用框架无缝集成,使得在企业级应用中的使用更加便捷。总的来说,MyBatis以其简洁的设计、灵活的配置和强大的功能成为Java持久层框架中的佼佼者,为开发者提供了一种优雅而高效的数据库操作解决方法。


二:怎么使用Mabatis?

1.添加依赖: 在pom.xml中加入MyBatis的依赖:

<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.6</version>
</dependency>

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">
<configuration><!-- 与Spring整合后,environments配置将被废除 --><environments default="development"><!-- 可配置多个环境 --><environment id="development"><!-- 使用JDBC事务管理 --><transactionManager type="JDBC" /><!-- 数据库连接池 --><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql://localhost:3306/userdb" /><property name="username" value="root" /><property name="password" value="root" /></dataSource></environment></environments>
</configuration>

3.编写Mapper映射文件(以User类为例):

<?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="test"><select id="findUserById" parameterType="int" resultType="org.csmf.mybatis.entity.User">select * from t_user where id = #{id}</select>
</mapper>

4.将Mapper加入到全局配置文件中:

<mappers><mapper resource="UserMapper.xml"/>
</mappers>

5.在代码中使用:

首先通过SqlSessionFactoryBuilder创建SqlSessionFactory工厂类,然后通过SqlSessionFactoryopenSession方法获取SqlSession对象,最后通过SqlSession的方法执行Mapper中配置的SQL语句。

InputStream inputStream = null;
try {// 加载MyBatis的主配置文件inputStream = Resources.getResourceAsStream("mybatis-config.xml");
} catch (IOException e) {e.printStackTrace();
}// 通过MyBatis的主配置文件得到SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 通过SqlSessionFactory得到SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();// 通过SqlSession操作数据库
// selectOne():
// 第一个参数是Statement的Id,即SQL映射文件中的<select>标签的Id
// 第二个参数是输入参数
User user = sqlSession.selectOne("findUserById", 2);

MyBatis是一个非常方便的持久层框架,它的确简化了与数据库的交互过程,让开发者能够更专注于SQL本身,而无需处理繁琐的JDBC代码。

在你提供的使用方法中,重点说明了MyBatis的配置和使用步骤,对于初学者来说十分有用。另外,我可以补充一些关于MyBatis的重点:

重点补充说明

  1. #{}${}的区别

    • #{}用于占位符,在SQL语句中可以安全地传递参数,MyBatis会将参数进行预编译,防止SQL注入攻击,因此推荐使用。
    • ${}用于字符串替换,在SQL语句中会直接替换为参数值,存在SQL注入的风险,因此仅在需要动态拼接SQL的场景下使用,并且需要注意防范SQL注入。
  2. selectOne()selectList()的区别

    • selectOne()用于查询单个结果,当查询结果超过一个时会抛出异常,适用于期望结果唯一的场景。
    • selectList()用于查询多个结果,没有结果限制,适用于返回多行数据的情况。
  3. 事务管理

    • MyBatis可以与Spring等框架整合,以便更好地管理事务。在配置中,你可以选择不同的事务管理器类型,如JDBC、MANAGED等,以满足项目的需求。
  4. 动态SQL

    • MyBatis提供了丰富的动态SQL功能,可以根据条件动态生成SQL语句,例如<if><choose><when><otherwise><foreach>等标签,帮助你构建灵活的SQL语句。
  5. 缓存机制

    • MyBatis支持一级缓存和二级缓存,默认情况下一级缓存是开启的,可以通过配置来启用或禁用。二级缓存是跨SqlSession的缓存,需要手动配置开启,并且需要注意缓存的更新策略以及缓存的失效时机,以避免数据不一致的问题。

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

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

相关文章

FA-128晶振用于医疗设备

血糖仪已成为家庭常用的医疗设备,日本爱普生晶振公司生产的2016封装,32MHz贴片晶振可完美应用于医疗器械血糖仪,此款晶振订货型号为X1E000251005900晶振,型号为FA-128,负载电容分8PF,精度10PPM,其尺寸参数为2.0x1.6x0.5mm,符合ROHS标准且无铅,具有封装尺寸超小,高精度,频率范围…

C++ | Leetcode C++题解之第55题跳跃游戏

题目&#xff1a; 题解&#xff1a; class Solution { public:bool canJump(vector<int>& nums) {int n nums.size();int rightmost 0;for (int i 0; i < n; i) {if (i < rightmost) {rightmost max(rightmost, i nums[i]);if (rightmost > n - 1) {r…

【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(一)

课程地址&#xff1a; 黑马程序员HarmonyOS4NEXT星河版入门到企业级实战教程&#xff0c;一套精通鸿蒙应用开发 &#xff08;本篇笔记对应课程第 1 - 2节&#xff09; P1《课程介绍》 开场白&#xff0c;HarmonyOS 的一个简介&#xff0c;话不多说&#xff0c;直接看图吧&…

第十五届蓝桥杯省赛第二场C/C++B组C题【传送阵】题解(AC)

解题思路 由于 a a a 数组是一个 1 1 1 到 n n n 的一个排列&#xff0c;那么形成的一定是如下形式&#xff1a; 一定会构成几个点的循环&#xff0c;或者是几个单独的点。 从任意点开始&#xff0c;如果能进入一个循环&#xff0c;一定可以将整个循环的宝藏都拿走&#x…

[vant] 图片预览关闭按钮显示不正常

如果这里显示不正常, 那就应该是按照文档引入了 显示有问题, 直接不引入, 声明一下就行

每日论文推荐:我们距离GPT-4V有多远,最接近GPT-4V的开源多模态大模型

&#x1f4cc; 元数据概览&#xff1a; 标题&#xff1a;How Far Are We to GPT-4V? Closing the Gap to Commercial Multimodal Models with Open-Source Suites作者&#xff1a;Zhe Chen, Weiyun Wang, Hao Tian, Shenglong Ye, Zhangwei Gao, Erfei Cui, Wenwen Tong, Kon…

企业计算机服务器中了helper勒索病毒怎么办?Helper勒索病毒解密处理流程

网络技术的不断发展与成熟&#xff0c;为企业的生产运营提供了极大便利&#xff0c;让企业的发展速度大大提升&#xff0c;但网络毕竟是虚拟服务系统&#xff0c;虽然可以为企业提供便利&#xff0c;但也会给企业数据安全带来严重威胁。近日&#xff0c;云天数据恢复中心接到山…

c++中的链表list的模拟实现

拖更了半个月&#xff0c;我终于来填c的坑啦。上次我们说的vetcor不知道小伙伴还记得多少呢&#xff1f;今天我们要讲list的模拟实现。 目录 架构结点list表的结构 构造函数尾插push_back()尾删pop_back()计算个数&#xff1a;size()判断空empty()※迭代器问题普通迭代器迭代器…

CSS高级选择器

一、属性选择器 以value开头的att属性的E元素&#xff1a;E[att^"value"]{ ;} a[href^http]{background-color"red";} css a[href^http]{background-color"red"; } html <!DOCTYPE html> <html lang"en"> <head&…

《QT实用小工具·四十四》支持图片和动图的文本编辑器

1、概述 源码放在文章末尾 该项目实现了一个功能丰富的文本编辑器&#xff0c;除了包含文本常规的编辑功能&#xff0c;还包括图片的插入功能和动图的插入功能&#xff0c;项目demo演示如下所示&#xff1a; 项目部分代码如下所示&#xff1a; #include "imagehelper.…

echarts实现水滴图

使用echarts实现水滴图 引入依赖&#xff0c;echarts-liquidfill3兼容echarts5; 安装依赖 "echarts": "^5.4.3","echarts-liquidfill": "^3.1.0",npm install echarts-liquidfill3.1.0 -S实现的效果图 构建一个水滴图的页面 <tem…

Scanpy(1)数据结构和样本过滤

注&#xff1a;主要讲述scanpy处理数据的结构、数据过滤&#xff08;生信领域&#xff09;和数据预处理&#xff08;和机器学习类似&#xff0c;但是又有不同。&#xff09; 1. Scanpy简介与安装 Scanpy 是一个可扩展的工具包&#xff0c;用于分析与 AnnData&#xff08;一种…

SpringCloud系列(19)--将服务消费者Consumer注册进Consul

前言&#xff1a;在上一章节中我们把服务提供者Provider注册进了Consul&#xff0c;而本章节则是关于如何将服务消费者Consumer注册进Consul 1、再次创建一个服务提供者模块&#xff0c;命名为consumerconsul-order80 (1)在父工程下新建模块 (2)选择模块的项目类型为Maven并选…

2024LarkXR新增功能系列之九| 优化分配策略:增加GPU检查参数

Paraverse平行云实时云渲染解决方案LarkXR在2024年新增了优化分配策略&#xff0c;增强了GPU检查参数的能力&#xff0c;满足了复杂元宇宙/数字孪生场景多样性的可视化的需求&#xff0c;为这些应用找到了更好的解决方案。新版本的LarkXR在渲染请求分配策略上做出了显著的改进。…

币圈资讯Cryptosquare论坛

在加密货币世界中&#xff0c;信息的及时获取对于投资者和交易者至关重要。今天&#xff0c;我将向大家介绍Cryptosquare这个综合性资讯论坛&#xff0c;它汇集了币圈新闻、空投信息、社会热点以及与Web3相关的工作信息。让我们一起解锁加密世界的种种可能性&#xff0c;探索Cr…

创建SpringBoot和RabbitMQ的整合项目

文章目录 创建SpringBoot和RabbitMQ的整合项目首先快速创建一个maven项目引入SpringBoot整合rabbitMQ的依赖在src/main目录下创建resources目录并引入配置文件写消息发送者MessageSender写消息接收者MessageReceiver写RabbitMQConfig配置类写SpringBoot启动主类CommandLineRunn…

【黑马点评Redis——002商户查询缓存】

1. 商户查询缓存 2. 知识储备和课程内容 2.1 什么是缓存 缓存是数据交换的缓冲区&#xff0c;是存贮数据的临时地方&#xff0c;一般读写性能较高。 浏览器缓存应用层缓存数据库缓存CPU缓存磁盘缓存 缓存的作用&#xff1a; 降低后端负载提高读写效率&#xff0c;降低响应…

B站无限评论暴力截留协议及教程

B站无限评论暴力截留协议及教程 B站无限评论暴力截留协议及教程&#xff0c;需要抓CK &#xff0c;教程里面有讲如何抓取 网盘自动获取 链接&#xff1a;https://pan.baidu.com/s/1lpzKPim76qettahxvxtjaQ?pwd0b8x 提取码&#xff1a;0b8x

springboot路劲映射

般情况下&#xff0c;使用了页面模板后&#xff0c;用户需要通过控制器才能访问页面。有一些页面需要在控制器中加载数据&#xff0c;然后渲染&#xff0c;才能显示出来;还有一些页面在控制器中不需要加载数据&#xff0c;只是完成简单的跳转&#xff0c;对于这种页面&#xff…

C++:week1:C语言基础

文章目录 (一) C语言概述1.预处理指令&#xff1a;宏定义、宏函数2.生成可执行程序的过程3.进程与虚拟内存空间 (二) 格式化输入输出1.变量及命名2.格式化输入输出、输入输出模型(1)CPU、内存、外部设备的速度矛盾(2)printf(3)scanf 3.代码即注释4.程序出错的原因、调试程序5.其…