MyBatis---(第一部分)

VSCode连接SAP ABAP开发环境 本文介绍了使用VSCode连接ABAP开发环境的详细步骤。首先通过SICF或SMICM事务码获取ABAP连接地址,然后安装ABAP remote filesystem插件。提供了两种创建连接的方法:通过命令面板逐步配置(输入服务器地址、账号、系统标识等)或直接编辑JSON配置文件。最后通过命令面板选择已创建的连接即可完成连接,连接成功后可在VSCode左侧工作区查看ABAP系统内容进行开发。JSON配置方式更为简便推荐。整个流程帮助开发者摆脱复杂的Eclipse配置,实现快速便捷的ABAP开发环境搭建。 阅读详情

MyBatis 知识点整理

一、MyBatis 介绍

1. 为什么使用 MyBatis?(JDBC 的缺点)

  • 结果集遍历繁琐​ → MyBatis 通过反射自动映射结果集

  • 手动创建和关闭连接​ → MyBatis 通过连接池管理数据库连接

  • SQL 硬编码在 Java 代码中​ → MyBatis 将 SQL 分离到 XML 文件中配置

2. 什么是 MyBatis?

  • 前身是 Apache 的 iBatis

  • 封装了 JDBC 的持久层框架

  • 开发者只需关注 SQL 语句编写,无需处理底层 JDBC 操作

二、MyBatis 入门案例

1. 项目依赖(pom.xml)

<dependencies>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.9</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.33</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.2</version>
    </dependency>
</dependencies>

2. 日志配置(log4j.properties)

  • 参考 Log4j 官方配置文档

3. POJO 实体类

public class User {
    private Integer id;
    private String username;
    private String password;
    // 省略 getter/setter
}

4. Mapper 接口

public interface UserMapper {
    List<User> findAll();
}

5. Mapper 映射文件(UserMapper.xml)

<?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.hg.mapper.UserMapper">
    <!--
        id:必须和 mapper 接口方法名保持一致
        resultType:返回值的全类名
    -->
    <select id="findAll" resultType="com.hg.pojo.User">
        SELECT * FROM user
    </select>
</mapper>

6. MyBatis 核心配置文件(mybatis-config.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>
    <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://localhost:3306/test"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/hg/mapper/UserMapper.xml"/>
    </mappers>
</configuration>

7. 单元测试

public class UserMapperTest {
    @Test
    public void testFindAll() throws IOException {
        // 1. 加载配置文件
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        // 2. 创建 SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 3. 创建 SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        // 4. 获取 Mapper 代理对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        // 5. 执行查询
        List<User> users = userMapper.findAll();
        // 6. 关闭资源
        sqlSession.close();
    }
}

三、MyBatis 运行原理【重点】

mybatis-config.xml
    |
    v
mapper.xml    mapper.xml    mapper.xml...
    |
    v
Resource → InputStream
    |
    v
SqlSessionFactoryBuilder → Map<namespace+id, MappedStatement(sql,resultType)>
    |
    v
SqlSessionFactory
    |
    v
SqlSession.getMapper(Mapper.class)
    |
    v
MapperProxy → MappedStatement
    |
    v
Executor
    |      |
    v      v
输入映射    输出映射
  • 输入映射:通过反射调用 get 方法获取参数

  • 输出映射:通过反射调用 set 方法设置结果

四、MyBatis 主键回填

方式一:使用 <selectKey>标签

<insert id="insertUser" parameterType="com.hg.pojo.User">
    <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
        SELECT LAST_INSERT_ID()
    </selectKey>
    INSERT INTO user(username, password) VALUES(#{username}, #{password})
</insert>
  • keyProperty="id":回填到 User 的 id 属性上

  • order="AFTER":插入之后再主键回填

  • resultType="java.lang.Integer":返回值的全类名

方式二:使用 useGeneratedKeys 属性

<insert id="insertUser" parameterType="com.hg.pojo.User"
        useGeneratedKeys="true" keyProperty="id">
    INSERT INTO user(username, password) VALUES(#{username}, #{password})
</insert>
  • useGeneratedKeys="true":使用数据库自增主键

  • keyProperty="id":回填到 user 的 id 属性上

五、MyBatis 参数传递【重点】

1. 传递单个参数

User findUserById(Integer id);
<select id="findUserById" parameterType="java.lang.Integer" resultType="com.hg.pojo.User">
    SELECT * FROM user WHERE id = #{id}
</select>
  • #{}是占位符,用于替换实际参数,等价于 JDBC 的 ?

2. 序号传参

User findUser(Integer id, String username);
<!-- 使用 param1, param2... -->
<select id="findUser" resultType="com.hg.pojo.User">
    SELECT * FROM user WHERE id = #{param1} AND username = #{param2}
</select>

<!-- 或使用 arg0, arg1... -->
<select id="findUser" resultType="com.hg.pojo.User">
    SELECT * FROM user WHERE id = #{arg0} AND username = #{arg1}
</select>

3. 注解传参

User findUser2(@Param("id") Integer id, @Param("sb") String username);
<select id="findUser2" resultType="com.hg.pojo.User">
    SELECT * FROM user WHERE id = #{id} AND username = #{sb}
</select>
  • #{注解的属性值}

4. Map 传参

User findUser3(Map<String, Object> map);
<select id="findUser3" parameterType="java.util.Map" resultType="com.hg.pojo.User">
    SELECT * FROM user WHERE id = #{id} AND username = #{sb}
</select>
  • #{map 的 key}

5. 对象传参

User findUser4(User userParam);
<select id="findUser4" parameterType="com.hg.pojo.User" resultType="com.hg.pojo.User">
    SELECT * FROM user WHERE id = #{id} AND username = #{username}
</select>
  • #{对象的属性名}


总结:本文介绍了 MyBatis 的核心概念、使用方法和常见技巧,包括 MyBatis 的配置、映射文件编写、参数传递方式以及运行原理。通过合理使用 MyBatis 可以提高数据库操作的效率和可维护性。

7.1华为OD机试真题 新系统 - 奇偶三数之和 (Java/Py/C/C++/Js/Go) 7.1华为OD机试真题 新系统 - 奇偶三数之和 (Java/Py/C/C++/Js/Go) 阅读详情

相关推荐

别再乱点U盘里的.exe了!手把手教你彻底清除那个伪装成Usb Disk的蠕虫病毒

本文详细介绍了如何识别、清除和预防伪装成Usb Disk的蠕虫病毒。从识别感染迹象到安全备份文件,再到深度清理病毒残留和构建防护策略,提供了一套完整的U盘病毒解决方案。特别提醒用户注意U盘病毒的风险,并养成良好的使用习惯。

weixin_30496999的博客 660

Mybatis接上一部分

1、什么是缓存 [ Cache ]?存在内存中的临时数据。将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库数据文件)查询,从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题。2、为什么使用缓存?减少和数据库的交互次数,减少系统开销,提高系统效率。3、什么样的数据能使用缓存?经常查询并且不经常改变的数据。

daguba的博客 146

Triton推理服务器实战:如何为PaddleOCR的ONNX模型配置动态批处理和并发推理

本文详细介绍了如何使用Triton推理服务器为PaddleOCR的ONNX模型配置动态批处理和并发推理,以提升GPU利用率和推理性能。通过实战案例和参数调优指南,帮助开发者解决高并发场景下的性能瓶颈问题,实现从实验室到生产环境的高效部署。

weixin_42527160的博客 426

MyBatis第一部分 框架简介

MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

2202_75422552的博客 752

Coze 上 OpenClaw 完整使用攻略(零代码 + 24 小时在线 + 飞书 / 微信接入)

Coze(扣子)是目前国内零门槛部署 OpenClaw 最友好的平台,无需服务器、不用命令行,5 分钟即可拥有可执行本地 / 云端任务的 AI 助手,还能一键发布到飞书、微信、钉钉等 IM。

hy行者勇哥的博客 2921

YoloV8改进策略:基于双层路由注意力的视觉Transformer提升YoloV8的检测能力

本文使用2023年最新提出的BiFormer,实现对YoloV8的改进。目前,BiFormer还有在显存占用,还有性能存在问题。我们先试试效果,期待作者在Pytoch上早日实现优化。论文链接:https://arxiv.org/abs/2303.08810代码链接:https://github.com/rayleizhu/BiFormer作为视觉transformer的核心构建模块,注意力是捕捉长程依赖关系的强大工具。

m0_47867638的博客 2844

MyBatis入门第一部分

MyBatis入门官方中文帮助手册快速入门导入依赖环境搭建mybaits全局配置文件,指导mybaits如何正确运行,比如连接哪个数据库sql映射的配置文件(编写每一个方法都如何向数据库发送sql语句,如何指向sql语句),相当于接口的实现类1.第一步: 将mapper的namespace属性改为接口的全类名2.第二步:配置细节3.第三步:我们写的dao接口的实现文件,mybaits默认是不知道的,我们需要在全局配置文件中注册配置总结---两个配置---全局配置文件指导mybaits如何运行----dao接

m0_53157173的博客 436

DDD系列 - 第6讲 仓库Repository - Mybatis篇

书接上回,之前通过一个关于拆解、微服务、面向对象的故事,向大家介绍了如何从微服务、面向对象一步步演进到DDD的,整个演进过程如下图:其中在领域层,我们定义了富血模型的领域模型,包括聚合、聚合根、实体、值对象等。聚合在代码层面中的表现形式即是一个包Package,起到了边界的作用,聚合内的对象间高内聚,而聚合间低耦合。聚合中放着实体、值对象、仓库等,实体相较于值对象的一个典型区别就是实体存在唯一标识,并且可通过该唯一标识查询到该实体并对其进行相关操作,值对象不存在唯一标识且通常作为实体。

罗小爬的技术宝书 1783

Java框架 第一部分 MyBatis

文章目录1 框架概述三层框架JDBC编程回顾MyBatis框架2 MyBatis入门3 MyBatis Dao代理参数传递输出结果resultTyperesultMap4 MyBatis动态SQL5 MyBatis配置文件传送门 1 框架概述 三层框架 三层框架 界面层 业务逻辑层 数据访问层 好处 结构清晰、耦合度低, 各层分工明确 可维护性高,可扩展性高 有利于标准化 开发人员可以只关注整个结构中的其中某一层的功能实现 有利于各层逻辑的复用 JDBC编程回顾 public void findS

日天家的猫 238

SPMI协议学习总结

SPMI(System Power Management Interface)是由MIPI(Mobile Industry Processor Interface)联盟定义的一种硬件接口标准,它主要用于移动设备中,连接SoC(System on Chip)处理器系统的集成电源控制器与一个或多个电源管理IC(PMIC),以实现精确的电源管理

歌颂苦难的行为是无耻的; 1078

威纶通触摸屏与S7-1200以太网通信的具体方法和步骤(非常详细)

威纶通触摸屏与S7-1200以太网通信的具体方法和步骤(非常详细)

Robot_PLC_HMI_Automation 1万+

Mybatis的入门(第一部分)

mybatis的快速入门,直接上手

madebylazy的博客 542

使用R语言绘制Logistic回归模型的亚组分析森林图

亚组分析是一种常用的统计方法,用于探索不同亚组之间的差异,并确定是否存在某些变量对结果的调节作用。在本文中,我们将使用R语言来绘制Logistic回归模型的亚组分析森林图。在该图中,每个亚组都用一个点表示,点的位置表示亚组的均值,而线段表示亚组的置信区间。垂直参考线用于表示效应值为0的点,帮助我们判断亚组之间的差异。希望本文对你有所帮助,让你能够使用R语言绘制Logistic回归模型的亚组分析森林图。是一个二分类的变量,我们希望在亚组分析中探索它与响应变量之间的关系。函数来计算每个亚组的均值,并使用。

PixelNinja的博客 2002

【MyBatis】MyBatis 讲义(第一部分~第五部分)

抄录、备忘,侵删 JDBC问题总结:  原始jdbc开发存在的问题如下:  1、 数据库连接创建、释放频繁造成系统资源浪费,从⽽影响系统性能。  2、 Sql语句在代码中硬编码,造成代码不易维护,实际应⽤中sql变化的可能较⼤,sql变动需要改变java代码。  3、 使⽤preparedStatement向占有位符号传参数存在硬编码,因为sql语句的where条件不⼀定,可能多也可能少,修改sql还要修改代码,系统不易维护。  4、 对结果集解析存在硬编码(查询列名),sql变化导致解析代码变

源僧 232

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

myBatis笔记(第一部分)

mybatis-config.xml文件常用配设 mybatis可以使用: 1.properties来引入外部properties配置文件的内容 resource:引入类路径下的资源 url:引入网络路径或者磁盘路径下的资源 2.settings包含很多重要的设置项 setting标签:用来设置每一个设置项 name:设置项的名字 有很多例如:mapUnderscoreToCamelCase将值设为true的话就可以将数据库的字段名以驼峰命名法映射到实体类 value:设置项的取值 3.typeAlia.

qq_43538697的博客 181

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【MyBatis框架】Mybatis开发dao方法第一部分

下面来讨论mybatis开发Dao的方法 先来说一下基本架构流程中使用到的几个类 1.SqlSession使用范围 1.1SqlSessionFactoryBuilder 1.1SqlSessionFactoryBuilder  通过SqlSessionFactoryBuilder创建会话工厂SqlSessionFactory 将SqlSessionFactoryBuild

盐汽水的博客 256

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【MyBatis框架】MyBatis入门程序第一部分

我们通过写一个简单的MyBatis小项目来在实战中学习MyBatis 1.需求 根据用户id(主键)查询用户信息 根据用户名称模糊查询用户信息 添加用户 删除 用户 更新用户 mybatis运行环境(jar包): 从https://github.com/mybatis/mybatis-3/releases下载,3.2.7版本 lib下:依赖包 mybatis-3.2

程序猿之洞 3299

MyBatis3 User Guide 第一部分

    用iBatis已经很久一段时间了,最近得知iBatis 更名为MyBatis了,而且做了更新,为了方便自己,也为了方便同行,所以从今天开始陆续的翻译MyBatis3 User Guide。时间关系,可能翻译周期会稍长。水平有限,难免会有翻译的不准确的地方,希望不要误人子弟,呵呵。   声明:文章内容只作为学习和交流使用,不得用于商业转载,如需使用,请通过站内短信与本人联系,获得许可。...

dongwei_6688的专栏 199

JavaEE框架---Mybatis第一部分

1.Mabatis入门 1.1Mybatis介绍 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。 MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发...

TDOA1024的博客 516

接上一部分 | Mybatis

两个以后工程中可能会遇到的问题

qq_43214541的博客 212
上一篇: Java反射机制详解
下一篇: MyBatis 知识整理 (第二部分)
StackNoOverflow
博客等级 码龄1年 22粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值