news 2026/4/14 23:21:06

Mybatis入门

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Mybatis入门

1.创建数据库

在数据库中创建一个表,命名随意,字段随意,但是一定要给id主键且自动递增!!!

给表添加数据

2.在idea中创建maven环境

在新建项目中选择maven而不是java

3.配置坐标

打开maven项目中的pox.xml文件

dependencies里面配置相应的mybatis依赖,mysql依赖和junit单元测试

<!--mybatis依赖--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.5</version> </dependency> <!--mysql驱动--> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <version>8.0.33</version> <scope>runtime</scope> </dependency> <!--junit 单元测试--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13</version> <scope>test</scope> </dependency>

4.配置文件

4.1.从 XML 中构建 SqlSessionFactory

!!!配置文件要放在resources下面

4.1.1 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:///mybatis?useSSL=false"/> <property name="username" value="root"/> <property name="password" value="2020"/> </dataSource> </environment> </environments> <mappers> <!-- 告诉mybatis,下面这个mapper.xml文件,是mybatis的配置文件 --> <mapper resource="UserMapper.xml"/> </mappers> </configuration>

在url中:jdbc:mysql:///mybatis?useSSL=false-->mysql是你的数据库类型;mybatis是数据库的名称。

其中mapper是用来指明sql的映射文件的

4.2 sql映射文件

UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!--nameSpace:命名空间,作用就是对sql进行分类化管理,理解为sql隔离--> <mapper namespace="test"> <select id="selectAll" resultType="com.qcby.pojo.User"> select * from tb_user; </select> </mapper>

id是此SQL语句的唯一标识,com.qcby.pojo.User你要包装的类型

5.定义User类

此类用于接受数据库的数据

package com.qcby.pojo; public class User { private Integer id; private String username; private String password; private String sex; private String address; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", password='" + password + '\'' + ", sex='" + sex + '\'' + ", address='" + address + '\'' + '}'; } }

6.测试:

1.加载mybatis核心配置文件,获取SqlSessionFactory对象

String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
2.创建SqlSession对象,用于执行sql操作
SqlSession sqlSession = sqlSessionFactory.openSession();
3.执行 sql

其中添加的内容就是sql映射文件中的命名空间加唯一标识

List<User> users = sqlSession.selectList("test.selectAll");

4.回收资源

sqlSession.close();

完整代码:

package com.qcby; import com.qcby.pojo.User; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException; import java.io.InputStream; import java.util.List; public class mybatisDemo { public static void main(String[] args) throws IOException { //1.创建SqlSessionFactory对象 String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //2.创建SqlSession对象,用于执行sql操作 SqlSession sqlSession = sqlSessionFactory.openSession(); //3.执行 sql List<User> users = sqlSession.selectList("test.selectAll"); System.out.println(users); //4.关闭SqlSession对象 sqlSession.close(); } }

7.优化使用Mapper代理完成第三步执行 sql

  1. 定义与 SQL 映射文件同名的 Mapper 接口,并且将 Mapper 接口和 SQL 映射文件放置在同一目录下将映射文件放于接口同一文件下有两种方法:1.直接放于mapper包中(不推荐);2.在resources下创建与java中同结构的包名,!!!创建不能使用.要用/做为分割
  2. 设置 SQL 映射文件的 namespace 属性为 Mapper 接口全限定名
  3. 在 Mapper 接口中定义方法,方法名就是 SQL 映射文件中 sql 语句的 id,并保持参数类型和返回值类型一致 如果放回的是一个数据就是User,多个就用List<User>.其中User是和映射文件中类型相同还要修改mybatis配置文件中的映射地址优化使用包扫描
  4. 编码
    1. 通过 SqlSession 的 getMapper 方法获取 Mapper 接口的代理对象
    2. 调用对应方法完成 sql 的执行
//3.获取UserMapper接口的代理对象 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); List<User> users = userMapper.selectAll(); System.out.println( users);

8.总结

对比维度JDBC(原生)MyBatis(基于 JDBC 封装)
代码复杂度极高:需手写加载驱动、创建连接、编写 SQL、创建 Statement/PreparedStatement、设置参数、遍历结果集、关闭资源(连接 / Statement/ResultSet),代码冗余且重复。极低:无需手写连接管理、参数设置、结果集映射,仅需定义 Mapper 接口 + 编写 SQL(XML / 注解),框架自动完成底层 JDBC 操作。
SQL 编写与维护硬编码在 Java 代码中,SQL 与业务代码耦合,修改需改 Java 代码并重新编译,维护成本高;拼接 SQL 易出错(如字符串拼接导致语法错误 / 注入)。SQL 与 Java 代码解耦(XML / 注解),修改 SQL 无需改 Java 代码,维护更灵活;支持动态 SQL(if/where/foreach 等),避免手动拼接。
参数处理需手动通过setInt()/setString()设置参数,参数位置与 SQL 硬绑定,易因参数顺序错误导致问题。自动映射参数:支持按参数名(#{name})绑定,无需关心顺序;支持基本类型、POJO、Map、数组 / 集合等多类型参数,框架自动处理类型转换。
结果集映射需手动遍历 ResultSet,通过getInt()/getString()获取字段值,并手动封装为 POJO / 实体类,代码量大且易出错。半自动映射:支持resultType(简单类型 / POJO)、resultMap(复杂映射 / 关联查询),框架自动将结果集映射为 Java 对象,无需手动遍历封装;支持一对一、一对多等关联查询映射。
资源管理(连接 / 事务)需手动管理数据库连接:要么每次创建新连接(性能差),要么手动实现连接池(如 C3P0/Druid);事务需手动通过Connection.commit()/rollback()控制,且需保证连接一致性。内置连接池适配(可集成 Druid/HikariCP),自动管理连接获取 / 释放;事务管理更便捷:支持编程式(SqlSession)、声明式(Spring 整合后 @Transactional),无需手动操作 Connection。
SQL 注入风险若使用 Statement(拼接 SQL)则极易引发注入;使用 PreparedStatement 可避免,但需开发者严格遵守规范,无强制约束。默认使用 PreparedStatement(#{参数}),自动预编译 SQL,从框架层面规避注入风险;仅当使用 ${参数}(字符串替换)时需手动防范,安全性更高。
灵活性完全灵活:可自定义所有 JDBC 细节(如特殊的 Statement 类型、自定义结果处理),适合极致定制化场景,但开发成本高。兼顾灵活与规范:核心 SQL 由开发者编写(保留 SQL 灵活性),底层 JDBC 操作由框架封装;支持自定义 TypeHandler(类型处理器)处理特殊类型(如日期、枚举),满足定制化需求。
性能理论性能最高:无额外封装开销,但性能依赖开发者优化(如连接池、批处理);若手动管理不当(如频繁创建连接),性能反而差。略有封装开销(可忽略):框架底层仍用 JDBC,性能接近原生;内置批处理、缓存(一级缓存默认开启,二级缓存可选),优化后性能甚至优于手写 JDBC(避免开发者低级优化失误)。
调试与排错调试直观:可直接断点查看 SQL、参数、结果集,但需逐行排查 JDBC 代码;排错成本高(如资源未关闭导致连接泄漏)。需借助日志(如 MyBatis 日志插件)查看最终执行的 SQL 和参数;框架封装了底层,定位 JDBC 级问题需熟悉 MyBatis 原理,但日常调试(SQL / 参数)更便捷。
学习成本低:仅需掌握 JDBC 核心 API(Connection/Statement/ResultSet),入门快。中:需学习 MyBatis 配置(mybatis-config.xml)、Mapper 映射、动态 SQL、结果集映射等规则,入门略高于 JDBC。
扩展性与生态无生态:需手动封装工具类(如 JDBCUtil)实现连接池、通用 CRUD,扩展性完全依赖开发者。丰富生态:支持 Spring/Spring Boot 整合、分页插件(PageHelper)、代码生成器(MyBatis Generator)、逆向工程,可快速集成到主流开发框架。
异常处理需手动捕获 SQLException,且异常信息较底层(如 SQLState),需自行解析封装。框架封装了 JDBC 异常,转换为更友好的 MyBatisException,且可通过自定义异常处理器扩展,便于业务层统一处理。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/12 12:11:37

Docker Scout忽略规则配置完全手册,从入门到精通一键掌握

第一章&#xff1a;Docker Scout忽略规则配置概述Docker Scout 是 Docker 官方提供的安全分析工具&#xff0c;用于识别镜像中的已知漏洞、软件包风险和配置问题。在实际开发与部署过程中&#xff0c;某些安全告警可能因环境特殊性或业务兼容性原因需要被有选择地忽略。为此&am…

作者头像 李华
网站建设 2026/4/5 12:05:09

Docker Offload任务调度进阶:从基础分配到智能预测的4个关键步骤

第一章&#xff1a;Docker Offload任务调度的核心概念在现代分布式计算环境中&#xff0c;Docker Offload任务调度是一种将容器化工作负载从主节点卸载到边缘或辅助节点执行的机制。其核心目标是优化资源利用率、降低主节点负载&#xff0c;并提升整体系统的可扩展性与响应速度…

作者头像 李华
网站建设 2026/4/8 14:44:47

【量子开发环境搭建】:如何在VSCode中100%成功配置并验证Qiskit?

第一章&#xff1a;量子开发环境搭建的核心意义 在进入量子计算的实际开发之前&#xff0c;构建一个稳定、高效的量子开发环境是不可或缺的第一步。这不仅是运行量子算法的基础平台&#xff0c;更是连接理论研究与工程实践的桥梁。一个完善的开发环境能够支持量子电路的设计、模…

作者头像 李华
网站建设 2026/4/13 13:54:57

40、Linux 软件安装与使用基础指南

Linux 软件安装与使用基础指南 1. 软件安装方式 1.1 从 tarball 安装 每个软件包在创建和安装组件的方式上可能略有不同。建议将解压后的 tar 归档文件复制到一个目录,然后进入该目录,查找 INSTALL 或 README 文件以获取具体的操作说明。 以下是以 root 用户身份在终…

作者头像 李华
网站建设 2026/4/13 13:15:33

揭秘VSCode远程调试中的环境变量陷阱:99%开发者忽略的细节

第一章&#xff1a;揭秘VSCode远程调试中的环境变量陷阱在使用 VSCode 进行远程开发或调试时&#xff0c;环境变量的配置常成为开发者忽略却影响重大的环节。当本地与远程环境存在差异&#xff0c;未正确传递或设置环境变量&#xff0c;可能导致应用启动失败、认证错误或配置缺…

作者头像 李华
网站建设 2026/4/14 5:40:39

破解异地用工难题:终成国际一站式人事外包服务

还在为异地员工社保缴纳、各地政策不一而头痛吗&#xff1f;管理成本居高不下&#xff0c;合规风险如影随形&#xff1f;终成国际人事服务外包&#xff0c;是您破解这些难题的“金钥匙”。 我们成立于2010年&#xff0c;深耕人力资源服务领域16年&#xff0c;服务网络覆盖全国…

作者头像 李华