news 2026/6/15 20:37:47

MyBatis 入门到实践:一篇文章带你掌握核心用法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MyBatis 入门到实践:一篇文章带你掌握核心用法

一、什么是 MyBatis?

MyBatis是一款优秀的Java 持久层框架,它通过XML 或注解的方式,将 SQL 语句与 Java 对象进行映射,简化了 JDBC 操作,同时又保留了 SQL 的灵活性。

一句话总结:

MyBatis = JDBC 封装 + SQL 可控

MyBatis 的优点

  • SQL 可控、可优化(比 Hibernate 更灵活)

  • 与 Spring 集成方便

  • 学习成本低,适合初学者

  • 支持动态 SQL,功能强大


二、MyBatis 的核心组成

MyBatis 的核心主要包括以下几个部分:

组件作用
SqlMapConfig.xml全局配置文件
Mapper.xmlSQL 映射文件
Mapper 接口定义数据库操作方法
SqlSessionFactory创建 SqlSession
SqlSession执行 SQL 的核心对象

三、MyBatis 开发环境搭建

1. 引入依赖(Maven)

<dependencies> <!-- MyBatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.13</version> </dependency> <!-- MySQL 驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> </dependency> </dependencies>

2. 创建 MyBatis 核心配置文件

SqlMapConfig.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="mapper/UserMapper.xml"/> </mappers> </configuration>

四、创建实体类(Entity)

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

五、Mapper 映射文件

1. Mapper.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.qcby.mapper.UserMapper"> <select id="findAll" resultType="com.qcby.entity.User"> select * from user </select> <select id="findById" parameterType="int" resultType="com.qcby.entity.User"> select * from user where id = #{id} </select> <insert id="insertUser" parameterType="com.qcby.entity.User"> insert into user(username,password) values(#{username},#{password}) </insert> </mapper>

2. Mapper 接口

public interface UserMapper { List<User> findAll(); User findById(int id); void insertUser(User user); }

六、MyBatis 执行流程示例

public class MyBatisTest { public static void main(String[] args) throws Exception { // 1. 读取配置文件 InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml"); // 2. 创建 SqlSessionFactory SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in); // 3. 获取 SqlSession SqlSession sqlSession = factory.openSession(); // 4. 获取 Mapper 代理对象 UserMapper mapper = sqlSession.getMapper(UserMapper.class); // 5. 执行方法 List<User> users = mapper.findAll(); users.forEach(System.out::println); // 提交事务 sqlSession.commit(); // 关闭资源 sqlSession.close(); in.close(); } }

七、MyBatis 参数传递方式

1. 基本类型

where id = #{id}

2. 对象参数

where username = #{username}

3. 多参数(@Param)

User find(@Param("name") String name, @Param("pwd") String pwd);
where username = #{name} and password = #{pwd}

八、MyBatis 动态 SQL(重点)

1. if 标签

<select id="findUser" resultType="User"> select * from user <where> <if test="username != null"> and username = #{username} </if> <if test="password != null"> and password = #{password} </if> </where> </select>

2. foreach(批量操作)

<select id="findByIds" resultType="User"> select * from user where id in <foreach collection="list" item="id" open="(" close=")" separator=","> #{id} </foreach> </select>

九、MyBatis 常见问题总结

1. 找不到 Mapper.xml

  • 确认路径是否在resources

  • resource="mapper/UserMapper.xml"路径是否正确

2. Getter 错误

  • 实体类属性名与 SQL 返回字段不一致

  • 缺少 getter / setter 方法

3. 事务未提交

  • 增删改操作后记得sqlSession.commit()


十、总结

MyBatis 作为 Java 后端中使用最广泛的持久层框架之一,具有以下特点:

  • SQL 灵活、易于优化

  • 配置清晰、扩展性强

  • 非常适合学习数据库与 Java 持久层原理

建议学习路线:
JDBC → MyBatis → MyBatis + Spring → MyBatis Plus

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 14:32:06

vivado2021.1安装教程:解决Windows常见报错方法

Vivado 2021.1 安装避坑指南&#xff1a;Windows系统下那些让人崩溃的报错&#xff0c;一文搞定 你有没有遇到过这样的场景&#xff1f; 刚拿到一块Zynq开发板&#xff0c;兴致勃勃准备开启FPGA之旅&#xff0c;结果第一步——安装Vivado就卡住了。 点击 xsetup.exe &…

作者头像 李华
网站建设 2026/6/15 19:32:55

从实验到部署无缝衔接:PyTorch-CUDA-v2.6镜像设计原理揭秘

从实验到部署无缝衔接&#xff1a;PyTorch-CUDA-v2.6镜像设计原理揭秘 在深度学习项目的真实世界里&#xff0c;一个困扰无数开发者的问题从未远离&#xff1a;“为什么我的代码在本地能跑&#xff0c;在服务器上却报错&#xff1f;”更常见的是&#xff0c;明明复现一篇论文的…

作者头像 李华
网站建设 2026/6/15 15:50:32

电感封装邻近敏感线路时的EMI规避操作指南

电感一放&#xff0c;信号全崩&#xff1f;聊聊PCB布局中那些“致命”的EMI陷阱你有没有遇到过这样的场景&#xff1a;系统其他部分都调通了&#xff0c;唯独ADC读数像喝醉了一样来回跳&#xff1b;IC通信隔三差五丢包&#xff0c;示波器上看时钟边沿全是毛刺&#xff1b;射频接…

作者头像 李华
网站建设 2026/6/15 14:35:29

利用PyTorch-CUDA镜像开展高校AI教学实验课程

利用PyTorch-CUDA镜像开展高校AI教学实验课程 在人工智能课程日益普及的今天&#xff0c;许多高校教师都面临一个尴尬的局面&#xff1a;一节90分钟的实验课&#xff0c;学生真正用来写代码、跑模型的时间可能不到半小时——剩下的时间全花在了“为什么我的PyTorch不能用GPU”“…

作者头像 李华
网站建设 2026/6/15 19:58:14

Git commit提交AI成果前必看:PyTorch-CUDA环境一致性保障方案

Git commit提交AI成果前必看&#xff1a;PyTorch-CUDA环境一致性保障方案 在深度学习项目协作中&#xff0c;你是否经历过这样的场景&#xff1f;本地训练好好的模型代码一推到CI流水线就报错&#xff0c;提示“CUDA not available”&#xff1b;或者同事拉下你的实验代码&…

作者头像 李华
网站建设 2026/6/15 14:32:03

计算机视觉项目启动神器:PyTorch-CUDA-v2.6镜像快速入门

计算机视觉项目启动神器&#xff1a;PyTorch-CUDA-v2.6镜像快速入门 在现代AI研发中&#xff0c;一个常见的场景是&#xff1a;团队拿到了一批新数据&#xff0c;准备训练最新的视觉模型。但还没开始写代码&#xff0c;工程师就被卡在了环境配置上——CUDA版本不匹配、cuDNN缺…

作者头像 李华