MyBatis 框架学习与实践

news2024/12/15 0:28:30

引言

MyBatis 是一个流行的 Java 持久层框架,它提供了简单的方法来处理数据库中的数据。本文将结合笔记和图片内容,详细讲解 MyBatis 的使用,包括配置、注解、优化技巧以及如何处理特殊字符和参数。

1. MyBatis 基础

1.1 引入依赖

首先,我们需要在项目中引入 MyBatis 和数据库驱动的依赖。这通常在 Maven 的 pom.xml 文件中完成。

1.2 配置文件

MyBatis 需要一个配置文件来设置数据源和映射文件。配置文件通常名为 mybatis-config.xml

xml

<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/day1211" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mapper/TeacherMapper.xml"/>
    </mappers>
</configuration>

1.3 映射文件

映射文件用于定义 SQL 语句和 Java 接口方法之间的映射关系。

xml

<mapper namespace="com.ykq.dao.TeacherDao">
    <select id="getById" resultType="Teacher">
        select * from tbl_teacher where id=#{id}
    </select>
</mapper>

2. 注解模式

MyBatis 支持使用注解来编写 SQL 语句,这可以减少 XML 配置的复杂性。

java

public interface TeacherDao {
    @Select("select * from tbl_teacher where id=#{id}")
    Teacher getById(int id);
}

3. MyBatis 优化

3.1 添加 SQL 日志

通过引入 Log4j 依赖并在 log4j.properties 文件中配置,可以在控制台显示 SQL 执行语句,帮助调试。

properties

log4j.rootLogger=DEBUG, Console
log4j.logger.java.sql=DEBUG

3.2 实体类别名

为实体类起别名可以简化映射文件中的配置。

xml

<typeAliases>
    <typeAlias type="com.ykq.entity.Teacher" alias="t"/>
</typeAliases>

3.3 提取数据源信息

将数据源信息提取到属性文件中,便于管理和修改。

properties

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/day1211
jdbc.username=root
jdbc.password=root

4. 处理多个参数

当方法有多个参数时,可以使用 @Param 注解为参数命名,避免 MyBatis 自动生成的 param1, param2 等。

java

public Userinfo selectByNameAndPwd(@Param("name") String name, @Param("password") String password);

5. 处理特殊字符

在 XML 中处理特殊字符,可以使用转义符或 CDATA 标签。

xml

<select id="selectByAge" resultType="Userinfo">
<![CDATA[select * from tbl_userinfo where age>#{minAge} and age<#{maxAge}]]>
</select>

6. 获取主键递增的值

使用 useGeneratedKeyskeyProperty 属性,可以在插入数据后获取数据库自动生成的主键值。

xml

<insert id="add" useGeneratedKeys="true" keyProperty="id">
    insert into tbl_teacher(name,age,salary) values(#{name},#{age},#{salary})
</insert>

7. 模糊查询

使用 SQL 的 LIKE 语句和 MyBatis 的字符串拼接功能,可以实现模糊查询。

xml

<select id="selectByLike" resultType="Teacher">
    select * from tbl_teacher where name like concat('%',#{name},'%')
</select>

8. 解决列名和属性名不一致的问题

8.1 为列起别名

在查询时为列起别名,使其与实体类的属性名一致。

xml

<select id="selectByAge" resultType="Userinfo">
    select id as id, username as name, password, ... from tbl_userinfo where age>#{minAge}
</select>

8.2 使用 resultMap 标签

resultMap 可以更灵活地映射列名和属性名。

xml

<resultMap id="baseMapper" type="Userinfo">
    <id column="id" property="id"/>
    <result column="name" property="username"/>
</resultMap>

结语

MyBatis 作为一个功能强大的持久层框架,通过本文的介绍,相信读者已经对其有了更深入的了解。在实际开发中,合理利用 MyBatis 的各种特性,可以极大地提高开发效率和代码的可维护性。希望本文能为读者在 MyBatis 的学习和实践中提供帮助。

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

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

相关文章

【Kafka】Kafka-Eagle 和 Kafka-UI 的安装使用

前言 Kafka Eagle 提供了完善的管理页面&#xff0c;可以监控 Kafka 集群的整体运行情况&#xff0c;很方便的去管理和可视化 Kafka 集群的一些信息&#xff0c;例如 Broker 详情、性能指标趋势、Topic 集合、消费者信息等&#xff0c;在生产环境中经常使用。 一、MySQL 环境…

HCIA-Access V2.5_2_2_2网络通信基础_IP编址与路由

网络层数据封装 首先IP地址封装在网络层&#xff0c;它用于标识一台网络设备&#xff0c;其中IP地址分为两个部分&#xff0c;网络地址和主机地址&#xff0c;通过我们采用点分十进制的形式进行表示。 IP地址分类 对IP地址而言&#xff0c;它细分为五类&#xff0c;A,B,C,D,E,…

TÜLU 3: Pushing Frontiers inOpen Language Model Post-Training

模型&#xff1a;https://huggingface.co/allenai 技术报告&#xff1a;https://allenai.org/papers/tulu-3-report.pdf 数据集&#xff1a;https://huggingface.co/collections/allenai/tulu-3-datasets-673b8df14442393f7213f372 GitHub&#xff1a;https://github.com/al…

【卷积神经网络】LeNet实践

模型建立 数据初始化根据模型搭建前向传播打印模型结构 前向传播数据初始化 def __init__(self):super(LeNet, self).__init__()# 第一层卷积层&#xff1a;# 输入&#xff1a;灰度图像 (1通道&#xff0c;大小 28x28)# 输出&#xff1a;6个特征图 (大小 28x28, 通过padding2保…

ubuntu20.04复现 Leg-KILO

这里写目录标题 opencv版本问题下载3.2.0源代码进入解压后的目录创建构建目录运行 CMake 配置 配置时指定一个独立的安装目录&#xff0c;例如 /opt/opencv-3.2&#xff1a;出错&#xff1a; 使用多线程编译错误1&#xff1a; stdlib.h: 没有那个文件或目录错误2&#xff1a;er…

python学习笔记—7—变量拼接

1. 字符串的拼接 print(var_1 var_2) print("supercarry" "doinb") name "doinb" sex "man" score "100" print("sex:" sex " name:" name " score:" score) 注意&#xff1a; …

Redis - 消息队列 Stream

一、概述 消息队列 定义 消息队列模型&#xff1a;一种分布式系统中的消息传递方案&#xff0c;由消息队列、生产者和消费者组成消息队列&#xff1a;负责存储和管理消息的中间件&#xff0c;也称为消息代理&#xff08;Message Broker&#xff09;生产者&#xff1a;负责 产…

3D 生成重建034-NerfDiff借助扩散模型直接生成nerf

3D 生成重建034-NerfDiff借助扩散模型直接生成nerf 文章目录 0 论文工作1 论文方法2 实验结果 0 论文工作 感觉这个论文可能能shapE差不多同时期工作&#xff0c;但是shapE是生成任意种类。 本文提出了一种新颖的单图像视图合成方法NerfDiff&#xff0c;该方法利用神经辐射场 …

聊聊Oracle自适应查询优化

成也AQO败也AQO 因为工作的原因&#xff0c;我们接触到的客户大部分是金融和运营商行业&#xff0c;这些客户有个最大的特点是追求稳定&#xff0c;对于使用数据库新特性持保守的态度&#xff0c;不会轻易尝试某些可能会导致生产系统不稳定的新特性。上线前通常都会将一些新特…

【数据库】选择题+填空+简答

1.关于冗余数据的叙述中&#xff0c;不正确的是&#xff08;&#xff09; A.冗余的存在容易破坏数据库的完整新 B.冗余的存在给数据库的维护增加困难 C.不应该在数据库中存储任何冗余数据 D.冗余数据是指由基本数据导出的数据 C 2.最终用户使用的数据视图称为&#xff08;&…

Comparator.comparing 排序注意

1. 对数字型字符串排序 List<String> values new ArrayList<>();values.add("10");values.add("6");values.add("20");values.add("30");values.add("50");//方法1 &#xff08;正确的排序方法&#xff09;//倒…

R语言的数据结构-矩阵

【图书推荐】《R语言医学数据分析实践》-CSDN博客 《R语言医学数据分析实践 李丹 宋立桓 蔡伟祺 清华大学出版社9787302673484》【摘要 书评 试读】- 京东图书 (jd.com) R语言医学数据分析实践-R语言的数据结构-CSDN博客 矩阵是一个二维数组&#xff0c;矩阵中的元素都具有相…

动态分区存储管理

一、实验目的 目的&#xff1a;熟悉并掌握动态分区分配的各种算法&#xff0c;熟悉并掌握动态分区中分区回收的各种情况&#xff0c;并能够实现分区合并。 任务&#xff1a;用高级语言模拟实现动态分区存储管理。 二、实验内容 1、实验内容 分区分配算法至少实现首次适应算法、…

JPG 转 PDF:免费好用的在线图片转 PDF 工具

JPG 转 PDF&#xff1a;免费好用的在线图片转 PDF 工具 在日常工作和生活中&#xff0c;我们经常需要将图片转换为 PDF 格式。无论是制作电子文档、准备演示材料&#xff0c;还是整理照片集&#xff0c;将图片转换为 PDF 都是一个常见的需求。今天为大家介绍一款完全免费、无需…

10、C++继承2

本章介绍菱形继承、虚继承和类型适应。 1、菱形继承与虚继承 在多继承中&#xff0c;可能会发生多个父类共基类的问题&#xff0c;即菱形继承。 例如&#xff1a; 解决办法&#xff1a; 父类继承基类时使用虚继承&#xff0c;在继承前加virtual&#xff0c;即&#xff1a;虚…

探索Telnet:实现Windows远程登录Ubuntu的实践指南

前言 在互联网技术日新月异的今天&#xff0c;远程登录已经成为许多开发者和系统管理员日常工作中不可或缺的一部分。虽然SSH已经成为远程登录的首选协议&#xff0c;但了解并掌握Telnet这一经典协议仍然具有重要意义。本文将带您一起探索如何使用Telnet实现Windows远程登录Ub…

字符串的常见操作【C语言】

一、案例内容 字符串的常见操作主要有创建&#xff0c;输出&#xff0c;查找指定字符或查找指定位置的字符、删除指定字符或删除指定位置的字符&#xff0c;在指定位置插入指定字符等。 二、案例代码 #include <stdio.h> #include <stdlib.h> #include <stri…

axios的引入和基本使用

一、axios的引入 使用 pnpm add axios 二、使用axios 三、axios的使用方法补充 axios除了直接使用它实例上的方法&#xff0c;还可以通过配置的方式进行使用axios({})&#xff0c;传入一个对象&#xff0c;这个对象可以有如下属性&#xff1a; url&#xff08;字符串&#…

Dart 3.6 发布,workspace 和 Digit separators

workspace 之前我们就聊过 Flutter 正在切换成 Monorepo 和支持 workspaces &#xff0c;Dart 3.6 开始&#xff0c;Pub 现在正式支持 monorepo 或 workspace 中 package 之间的共享解析。 pub workspaces 功能可确保 monorepo 中的 package 共享一组一致的依赖项&#xff0c…

三、nginx实现lnmp+discuz论坛

lnmp l&#xff1a;linux操作系统 n&#xff1a;nginx前端页面 m&#xff1a;mysql数据库&#xff0c;账号密码&#xff0c;数据库等等都保存在这个数据库里面 p&#xff1a;php——nginx擅长处理的是静态页面&#xff0c;页面登录账户&#xff0c;需要请求到数据库&#…