当前位置: 首页 > news >正文

Mybatis快速入门大全(详细版)

MyBatis是一款流行的持久层框架,简化了JDBC操作。以下是其基础入门语法:

1.核心配置文件(mybatis-config.xml)

用于配置数据库连接和映射文件位置。

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPEconfigurationPUBLIC"-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><environmentsdefault="development"><environmentid="development"><transactionManagertype="JDBC"/><dataSourcetype="POOLED"><propertyname="driver"value="com.mysql.cj.jdbc.Driver"/><propertyname="url"value="jdbc:mysql://localhost:3306/test"/><propertyname="username"value="root"/><propertyname="password"value="password"/></dataSource></environment></environments><mappers><mapperresource="UserMapper.xml"/></mappers></configuration>

2.SQL映射文件(UserMapper.xml)

定义SQL语句与Java方法的映射关系。

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.example.mapper.UserMapper"><!-- 查询单个用户 --><selectid="selectUser"parameterType="int"resultType="com.example.entity.User">SELECT * FROM users WHERE id = #{id}</select><!-- 插入用户 --><insertid="insertUser"parameterType="com.example.entity.User">INSERT INTO users (name, age) VALUES (#{name}, #{age})<!-- 获取自增主键 --><selectKeykeyProperty="id"resultType="int"order="AFTER">SELECT LAST_INSERT_ID()</selectKey></insert></mapper>

3.Java实体类(User.java)

对应数据库表结构。

publicclassUser{privateIntegerid;privateStringname;privateIntegerage;// getters/setters}

4.Mapper接口(UserMapper.java)

定义操作数据库的方法。

publicinterfaceUserMapper{UserselectUser(intid);intinsertUser(Useruser);}

5.获取SqlSession并执行操作

// 加载配置文件InputStreaminputStream=Resources.getResourceAsStream("mybatis-config.xml");SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder().build(inputStream);// 执行查询try(SqlSessionsession=sqlSessionFactory.openSession()){UserMappermapper=session.getMapper(UserMapper.class);Useruser=mapper.selectUser(1);System.out.println(user.getName());}

6.动态SQL

根据条件动态生成SQL语句。

<selectid="findUsers"resultType="User">SELECT * FROM users<where><iftest="name != null">AND name = #{name}</if><iftest="age != null">AND age&gt;#{age}</if></where></select>

7.参数处理

  • #{}:预编译处理(防止SQL注入)
  • ${}:直接替换(用于表名、列名等)
<selectid="selectUsers"resultType="User">SELECT * FROM ${tableName} WHERE age > #{minAge}</select>

8.结果映射

处理列名与属性名不一致的情况。

<resultMapid="userResultMap"type="User"><idproperty="id"column="user_id"/><resultproperty="name"column="user_name"/></resultMap><selectid="selectUser"resultMap="userResultMap">SELECT user_id, user_name FROM users WHERE id = #{id}</select>

9.事务管理

SqlSessionsession=sqlSessionFactory.openSession(false);// 手动提交try{UserMappermapper=session.getMapper(UserMapper.class);mapper.insertUser(user1);mapper.insertUser(user2);session.commit();// 提交事务}catch(Exceptione){session.rollback();// 回滚事务throwe;}finally{session.close();}

10.注解方式(替代XML)

publicinterfaceUserMapper{@Select("SELECT * FROM users WHERE id = #{id}")UserselectUser(intid);@Insert("INSERT INTO users (name, age) VALUES (#{name}, #{age})")@Options(useGeneratedKeys=true,keyProperty="id")intinsertUser(Useruser);}
http://www.jsqmd.com/news/1302136/

相关文章:

  • 2026年论文AIGC率多少正常?五档自测表告诉你要不要处理
  • 一篇公众号文章从写到发,到底卡在哪?
  • 大模型应用ROI评估与投入产出复盘:从成本到价值的系统性分析
  • OpenPDF的学习文档(第十一章加密)
  • 从基础到高级:shadcn-docs-nuxt文件结构与内容组织最佳实践
  • 2026执医笔试面授机构榜单出炉!别盲目报班,选对少走半年弯路 - 品牌测评鉴赏家
  • CnOpenData 上市公司app信息表
  • 银河麒麟V10多路径Multipath配置指南:存储链路高可用,不再随机掉盘
  • Nginx虚拟主机配置实战:server块逐行解释与多站点部署
  • MagiskOnWSALocal终极指南:如何在Windows安卓子系统获得完整root权限和Google服务
  • 谷歌DeepMind解散AlphaFold诺奖团队:技术路线分水岭,通用模型正在碾压专用路线
  • 写给大家的前端工程化实践手册:从个人技艺到团队基础设施
  • AI视频虚拟背景性能瓶颈全拆解:从GPU占用率98%到延迟<120ms的7步调优实录
  • 插件上架失败率高达68%?文心一言插件市场合规红线全梳理,开发者必读的8条生存法则
  • 7 月总结:Vue3 与 React 前端生态的实战洞察——选择比努力更重要
  • 2026主治医师考试备考期,多家培训课程特点对比分析 - 品牌测评鉴赏家
  • 神经网络组件权威解读:Backprop与Dropout的核心原理与应用指南
  • 线上事故复盘:一次HashMap.remove()引发的关键数据丢失案
  • LogoKit 云端实时环境仿冒钓鱼平台攻击机理与分层防御研究
  • 从论文到代码:ESIM事件相机模拟器的核心算法原理
  • 从Stitch、Lovable到Paico,为什么AI生成UI之前要充分理解需求
  • 从 0 到 1 构建 apk.1 解决方案:Apk.1-Installer 开发实战教程
  • 蓝速科技全息数字人:算法优化下的算力选型与效果实测
  • 揭秘Stratagus引擎的多玩家网络对战实现:从协议到同步
  • 如何用Layerdivider实现AI智能分层:轻松将单图变多层PSD
  • 飞书AI效率分析从入门到高阶:7个被官方文档隐藏的API调用技巧,提速300%+
  • 生成式 UI 的工程化路线图:2026 下半年从实验到生产的关键里程碑
  • 2026年专业测评化工危包证代办机构核心选型要素​ - 危险品出口解决方案
  • 看完就会:盘点2026年全网顶尖的的降AI率平台
  • Deebot-4-Home-Assistant 智能家居集成技术实现与架构设计深度解析