发布时间:2026/6/30 3:00:28
Mybatis基础操作
Mybatis基础使用Mybatis编程式开发mybatis和MySQL jar包依赖xmldependencies !-- MyBatis 核心 -- dependency groupIdorg.mybatis/groupId artifactIdmybatis/artifactId version3.5.10/version /dependency !-- MySQL 驱动 -- dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId version8.0.33/version /dependency !-- 连接池可选推荐 -- dependency groupIdcom.zaxxer/groupId artifactIdHikariCP/artifactId version5.0.1/version /dependency /dependencies全局配置文件mybatis-config.xml配置文件对应标签可以看官方文档MyBatis 3 | Configuration – mybatisxml?xml version1.0 encodingUTF-8? !DOCTYPE configuration PUBLIC -//mybatis.org//DTD Config 3.0//EN http://mybatis.org/dtd/mybatis-3-config.dtd configuration !-- 1. 加载外部属性文件 -- properties resourcejdbc.properties/ !-- 2. 全局设置 -- settings !-- 开启下划线到驼峰命名自动映射 -- setting namemapUnderscoreToCamelCase valuetrue/ !-- 开启二级缓存 -- setting namecacheEnabled valuetrue/ !-- 延迟加载的触发方法 -- setting namelazyLoadTriggerMethods value/ !-- 查询时关闭关联对象即时加载 -- setting namelazyLoadingEnabled valuetrue/ !-- 设置超时时间 -- setting namedefaultStatementTimeout value3000/ !-- 使用列标签代替列名 -- setting nameuseColumnLabel valuetrue/ !-- 允许JDBC支持自动生成主键 -- setting nameuseGeneratedKeys valuetrue/ /settings !-- 3. 类型别名配置 -- typeAliases !-- 扫描包自动注册别名 -- package namecom.example.entity/ !-- 也可以单独配置 -- !-- typeAlias typecom.example.entity.User aliasUser/ -- /typeAliases !-- 4. 环境配置可配置多个通过default属性切换 -- environments defaultdevelopment !-- 开发环境 -- environment iddevelopment !-- 事务管理器 -- transactionManager typeJDBC property namecloseConnection valuefalse/ /transactionManager !-- 数据源配置 -- dataSource typePOOLED property namedriver value${jdbc.driver}/ property nameurl value${jdbc.url}/ property nameusername value${jdbc.username}/ property namepassword value${jdbc.password}/ !-- 连接池配置 -- property namepoolMaximumActiveConnections value20/ property namepoolMaximumIdleConnections value10/ property namepoolMaximumCheckoutTime value20000/ property namepoolTimeToWait value20000/ /dataSource /environment !-- 测试环境 -- environment idtest transactionManager typeJDBC/ dataSource typePOOLED property namedriver value${jdbc.driver}/ property nameurl value${jdbc.test.url}/ property nameusername value${jdbc.test.username}/ property namepassword value${jdbc.test.password}/ /dataSource /environment /environments !-- 5. 映射器配置 -- mappers !-- 方式1通过resource指定XML文件 -- mapper resourcecom/example/mapper/UserMapper.xml/ !-- 方式2通过class指定接口需要接口和XML同名同路径 -- !-- mapper classcom.example.mapper.UserMapper/ -- !-- 方式3扫描包下所有mapper接口 -- !-- package namecom.example.mapper/ -- /mappers /configuration映射器 Mapper.xmlxml?xml version1.0 encodingUTF-8 ? !DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd mapper namespacecom.example.mapper.UserMapper !-- 基础ResultMap映射 -- resultMap idBaseResultMap typeUser id propertyid columnid/ result propertyusername columnusername/ result propertypassword columnpassword/ result propertyemail columnemail/ result propertyage columnage/ result propertystatus columnstatus/ result propertycreateTime columncreate_time/ result propertyupdateTime columnupdate_time/ !-- 枚举类型处理 -- result propertygender columngender typeHandlerorg.apache.ibatis.type.EnumOrdinalTypeHandler/ /resultMap !-- 包含订单的ResultMap一对多 -- resultMap idUserWithOrdersResultMap typeUser extendsBaseResultMap !-- 一对多关联用户的订单 -- collection propertyorders ofTypeOrder columnid selectcom.example.mapper.OrderMapper.selectByUserId/ /resultMap !-- 插入用户 -- insert idinsert parameterTypeUser useGeneratedKeystrue keyPropertyid INSERT INTO users (username, password, email, age, status, create_time, update_time, gender) VALUES (#{username}, #{password}, #{email}, #{age}, #{status}, #{createTime}, #{updateTime}, #{gender, typeHandlerorg.apache.ibatis.type.EnumOrdinalTypeHandler}) /insert !-- 批量插入用户 -- insert idbatchInsert parameterTypejava.util.List useGeneratedKeystrue keyPropertyid INSERT INTO users (username, password, email, age, status, create_time, update_time) VALUES foreach collectionlist itemuser separator, (#{user.username}, #{user.password}, #{user.email}, #{user.age}, #{user.status}, #{user.createTime}, #{user.updateTime}) /foreach /insert !-- 根据ID删除 -- delete iddeleteById parameterTypeLong DELETE FROM users WHERE id #{id} /delete !-- 根据用户名删除 -- delete iddeleteByUsername parameterTypeString DELETE FROM users WHERE username #{username} /delete !-- 更新用户 -- update idupdate parameterTypeUser UPDATE users set if testusername ! nullusername #{username},/if if testpassword ! nullpassword #{password},/if if testemail ! nullemail #{email},/if if testage ! nullage #{age},/if if teststatus ! nullstatus #{status},/if if testupdateTime ! nullupdate_time #{updateTime},/if /set WHERE id #{id} /update !-- 更新用户状态 -- update idupdateStatus UPDATE users SET status #{status} WHERE id #{id} /update !-- 根据ID查询 -- select idselectById parameterTypeLong resultMapBaseResultMap SELECT * FROM users WHERE id #{id} /select !-- 查询所有用户 -- select idselectAll resultMapBaseResultMap SELECT * FROM users ORDER BY create_time DESC /select !-- 根据用户名查询模糊查询 -- select idselectByUsername parameterTypeString resultMapBaseResultMap SELECT * FROM users WHERE username LIKE CONCAT(%, #{username}, %) /select !-- 条件查询动态SQL -- select idselectByCondition parameterTypemap resultMapBaseResultMap SELECT * FROM users where if testusername ! null and username ! AND username LIKE CONCAT(%, #{username}, %) /if if testemail ! null and email ! AND email #{email} /if if testminAge ! null AND age #{minAge} /if if testmaxAge ! null AND age lt; #{maxAge} /if if teststatus ! null AND status #{status} /if if teststartTime ! null AND create_time #{startTime} /if if testendTime ! null AND create_time lt; #{endTime} /if /where ORDER BY id DESC /select !-- 分页查询 -- select idselectByPage resultMapBaseResultMap SELECT * FROM users ORDER BY id DESC LIMIT #{offset}, #{pageSize} /select !-- 统计数量 -- select idcount resultTypeint SELECT COUNT(*) FROM users /select !-- 查询用户及其订单关联查询 -- select idselectUserWithOrders parameterTypeLong resultMapUserWithOrdersResultMap SELECT * FROM users WHERE id #{userId} /select /mapperMapper接口javapackage com.example.mapper; import com.example.entity.User; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; import java.util.List; import java.util.Map; /** * User 数据访问接口 * 注意不使用Spring时这个接口不需要添加Repository等注解 */ public interface UserMapper { // 增 /** * 插入用户 */ int insert(User user); /** * 批量插入用户 */ int batchInsert(ListUser users); // 删 /** * 根据ID删除用户 */ int deleteById(Long id); /** * 根据用户名删除用户 */ int deleteByUsername(String username); // 改 /** * 更新用户 */ int update(User user); /** * 更新用户状态 * 使用Param注解指定参数名 */ int updateStatus(Param(id) Long id, Param(status) Integer status); // 使用注解定义SQL不需要在XML中配置 Update(UPDATE users SET age #{age} WHERE id #{id}) int updateAge(Param(id) Long id, Param(age) Integer age); // 查 /** * 根据ID查询用户 */ User selectById(Long id); /** * 查询所有用户 */ ListUser selectAll(); /** * 根据用户名查询 */ ListUser selectByUsername(String username); /** * 条件查询 * param condition 查询条件 */ ListUser selectByCondition(MapString, Object condition); /** * 分页查询 * param pageNum 页码 * param pageSize 每页大小 */ ListUser selectByPage(Param(offset) int offset, Param(pageSize) int pageSize); /** * 统计用户数量 */ int count(); /** * 使用注解定义查询 */ Select(SELECT * FROM users WHERE email #{email}) User selectByEmail(String email); /** * 关联查询查询用户及其订单一对多 * 需要在XML中配置resultMap */ User selectUserWithOrders(Long userId); }mybatis工具类javapackage com.example.app; 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; /** * MyBatis 工具类 - 手动管理 SqlSessionFactory */ public class MyBatisUtil { private static SqlSessionFactory sqlSessionFactory; // 静态代码块在类加载时初始化 static { try { // 1. 加载 MyBatis 配置文件 String resource mybatis-config.xml; InputStream inputStream Resources.getResourceAsStream(resource); // 2. 创建 SqlSessionFactory sqlSessionFactory new SqlSessionFactoryBuilder().build(inputStream); System.out.println(MyBatis SqlSessionFactory 初始化成功!); } catch (IOException e) { System.err.println(MyBatis 初始化失败: e.getMessage()); throw new RuntimeException(MyBatis 初始化失败, e); } } /** * 获取 SqlSession 对象 */ public static SqlSession getSqlSession() { return sqlSessionFactory.openSession(); } /** * 获取 SqlSession 对象自动提交事务 */ public static SqlSession getSqlSessionWithAutoCommit() { return sqlSessionFactory.openSession(true); } /** * 关闭 SqlSession */ public static void closeSession(SqlSession session) { if (session ! null) { session.close(); } } /** * 获取 SqlSessionFactory */ public static SqlSessionFactory getSqlSessionFactory() { return sqlSessionFactory; } /** * 获取 Mapper 接口的代理对象 */ public static T T getMapper(ClassT type) { try (SqlSession session getSqlSession()) { return session.getMapper(type); } } }编程式使用示例javapackage com.example.app; import com.example.entity.User; import com.example.mapper.UserMapper; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.InputStream; import java.time.LocalDateTime; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 不使用 Spring 时MyBatis 编程式使用示例 */

相关新闻

Shopify分销系统搭建指南:适合初创团队的低成本增长方案
2026/6/30 3:00:28

Shopify分销系统搭建指南:适合初创团队的低成本增长方案

对大多数 Shopify 初创卖家来说,最现实的问题不是“有没有好产品”,而是如何在预算有限的情况下持续获取新客户。广告成本(CAC)逐年攀升,SEO 起量周期长,而内容运营又需要极高的耐心。在这种背景下&#xf…

阅读更多
【单片机毕业设计】基于 STM32 的智能感应开盖垃圾桶设计,基于单片机的溢满检测自动垃圾桶控制系统(013101)
2026/6/30 3:00:28

【单片机毕业设计】基于 STM32 的智能感应开盖垃圾桶设计,基于单片机的溢满检测自动垃圾桶控制系统(013101)

文章目录20 个相关毕业设计备选题目项目研究背景摘要总体方案硬件设备清单硬件整体架构核心功能一、核心自动控制功能二、人机交互与显示功能三、辅助逻辑功能技术路线项目演示关于我们项目案例源码获取博主介绍:✌️码农一枚 ,专注于大学生项目实战开发…

阅读更多
响应速度下降47%,上下文窗口缩水60%,模型更新延迟14天——ChatGPT免费版三大隐形代价,你还在硬扛?
2026/6/30 3:00:28

响应速度下降47%,上下文窗口缩水60%,模型更新延迟14天——ChatGPT免费版三大隐形代价,你还在硬扛?

更多请点击: https://intelliparadigm.com 第一章:ChatGPT免费版与Plus版的核心定位差异 ChatGPT免费版与Plus版并非简单的“功能增减”关系,而是面向不同用户场景的战略性分层设计。免费版本聚焦于普惠性AI交互体验,适用于日常问…

阅读更多
AI 专业万字干货|发那科 ROBOGUIDE 离线仿真全实训路线|数字孪生 + 机器视觉融合落地实践
2026/6/30 4:00:28

AI 专业万字干货|发那科 ROBOGUIDE 离线仿真全实训路线|数字孪生 + 机器视觉融合落地实践

摘要作为人工智能技术应用专业在校生,多数同学深耕深度学习、机器视觉算法,但普遍缺失工业设备虚实联动落地能力。工业机器人是智能制造场景下 AI 算法唯一物理执行载体,而 ROBOGUIDE 作为发那科官方数字孪生离线仿真平台,可零成本…

阅读更多
【2027最新】基于SpringBoot+Vue的web喀什旅游网站管理系统源码+MyBatis+MySQL
2026/6/30 4:00:28

【2027最新】基于SpringBoot+Vue的web喀什旅游网站管理系统源码+MyBatis+MySQL

博主介绍:🎓 计算机科学与技术专业在读研究生 | CSDN博客专家 | Java技术爱好者 在校期间积极参与实验室项目研发,现为CSDN特邀作者、掘金优质创作者。专注于Java开发、Spring Boot框架、前后端分离技术及常见毕设项目实现。 📊 数…

阅读更多
启道协同设计:打通立项到出图全流程闭环
2026/6/30 4:00:28

启道协同设计:打通立项到出图全流程闭环

做工程设计的同行都懂,项目推进最头疼的从来不是单纯画图,而是流程混乱、信息脱节、反复返工、校审低效。立项无标准、提资对接乱、图纸错漏碰缺、校审流程繁琐、出图不规范……全流程的碎片化问题,直接拖慢项目进度、拉高人力成本&#xff0…

阅读更多
react动态路由、嵌套路由、路由传参方式
2026/6/30 4:00:28

react动态路由、嵌套路由、路由传参方式

React 路由一般使用目前最主流的 React Router(v6/v7),下面我会从动态路由、嵌套路由、路由传参三个方面详细讲解,并配上完整代码。一、React Router 基础安装npm install react-router-dom项目结构src ├── App.jsx ├── mai…

阅读更多
2026年AI做PPT哪个工具好用?答辩汇报场景8款工具测评
2026/6/30 4:00:28

2026年AI做PPT哪个工具好用?答辩汇报场景8款工具测评

2026年AI做PPT哪个工具好用?答辩汇报场景8款工具测评答案是:2026年AI PPT工具已经相当成熟,但学术答辩场景需要选择能够生成专业、规范演示文稿的工具。PaperRed的AI PPT功能针对学术场景优化,支持自动生成答辩PPT、课程汇报PPT&a…

阅读更多
Codex使用教程完整版:从安装到实战,零基础快速掌握AI智能体
2026/6/30 3:00:28

Codex使用教程完整版:从安装到实战,零基础快速掌握AI智能体

Codex使用教程完整版:从安装到实战,零基础快速掌握AI智能体 SEO关键词: Codex教程 / Codex安装 / AI智能体 / Codex插件 / 自动化AI工具 / 零基础AI使用 大家好 这里是「代码简单说」,欢迎大家关注同名公众号,不定时更新更多实用有趣的教程 …

阅读更多
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告
2026/6/28 0:00:11

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

阅读更多
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?
2026/6/28 0:00:11

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

阅读更多
如何在1分钟内为Windows安装苹果USB网络共享驱动:完整解决方案
2026/6/30 0:00:27

如何在1分钟内为Windows安装苹果USB网络共享驱动:完整解决方案

如何在1分钟内为Windows安装苹果USB网络共享驱动:完整解决方案 【免费下载链接】Apple-Mobile-Drivers-Installer Powershell script to easily install Apple USB and Mobile Device Ethernet (USB Tethering) drivers on Windows! 项目地址: https://gitcode.co…

阅读更多
AScript异步执行与await关键字
2026/6/30 0:00:27

AScript异步执行与await关键字

、异步解析执行 AScript提供了 Script.EvalAsync 异步方法,异步执行脚本,可设置 CancellationToken 参数。 AScript执行模式有解析执行和编译执行两种模式,这两种模式下的异步执行又有所不同: 1)解析执行模式&#…

阅读更多
AI时代真的风水轮流转,前段时间最火的还是Claude Code,转眼间Codex就火得一塌糊涂。Codex是由OpenAI 推出的AI智能体。
2026/6/30 0:00:27

AI时代真的风水轮流转,前段时间最火的还是Claude Code,转眼间Codex就火得一塌糊涂。Codex是由OpenAI 推出的AI智能体。

它不仅能回答问题,编写代码,还能读取电脑本地文件,修改项目,浏览网页,调用外部工具,自动化执行任务,操作浏览器甚至桌面应用。 也是早早的就给身边不是程序员的亲朋好友安利了,都是用…

阅读更多
GIT修改用户名
2026/6/28 5:47:46

GIT修改用户名

在GIT中修改用户名可按以下步骤操作: 查看当前git的用户名,使用命令git config --list或git config user.name。修改git用户名,使用命令git config --global user.name "xxx(新的用户名)",将其中…

阅读更多
Win11Debloat:让你的Windows系统重获新生的终极优化工具
2026/6/28 14:44:43

Win11Debloat:让你的Windows系统重获新生的终极优化工具

Win11Debloat:让你的Windows系统重获新生的终极优化工具 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and …

阅读更多
技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践
2026/6/28 14:44:39

技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践

技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter m4s-converter是一个…

阅读更多