首页/新闻资讯/正文详情

1.mybatis学习-基础

发布时间:2026/9/27 10:02:20 来源:云帆数科 栏目:资讯中心
1.mybatis学习-基础
MyBatis 是一款优秀的持久层框架它支持自定义 SQL、存储过程以及高级映射。他封装的JDBC,更方便、简洁的操作数据库。他的原名叫“iBatis”,提供了持久层框架包括SqlMaps和Data access objects(DAO)导包地址https://github.com/mybatis/mybatis-3dependencies !--数据库框架-- dependency groupIdorg.mybatis/groupId artifactIdmybatis/artifactId version3.5.6/version scopecompile/scope /dependency !-- mysql数据库驱动 -- dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId version5.1.47/version /dependency !--junit-- dependency groupIdorg.junit.jupiter/groupId artifactIdjunit-jupiter-api/artifactId version5.4.2/version /dependency /dependencies文档https://mybatis.org/mybatis-3/zh_CN/index.html持久化持久化就是将程序的数据在持久状态和瞬时状态转化的过程。人话就是把数据保存到磁盘上不要保存在内存中因为内存断电即失。配置文件核心配置文件链接mysql数据库的信息命名无规则限制建议命名为mybatis-config.xml?xml version1.0 encodingUTF-8 ?!--约束 DOCTYPE 后边必然是跟标签--!DOCTYPEconfigurationPUBLIC-//mybatis.org//DTD Config 3.0//ENhttps://mybatis.org/dtd/mybatis-3-config.dtdconfiguration!--配置链接数据库的环境--environmentsdefaultdevelopmentenvironmentiddevelopment!--事务管理器的方式JDBC--!--原始的JDBC事务开启回滚都需要手动执行--transactionManagertypeJDBC/!--数据源配置 --!-- typePOOLED表示使用数据库连接池 对数据库链接进行保存等到下一次使用的时候从池中取出 --dataSourcetypePOOLEDpropertynamedrivervaluecom.mysql.jdbc.Driver/propertynameurlvaluejdbc:mysql://localhost:3306/java-test/propertynameusernamevalueroot/propertynamepasswordvalue123456//dataSource/environment/environments!--引入映射文件--mappersmapperresourceorg/mybatis/example/BlogMapper.xml//mappers/configuration映射文件对象关系映射的文件。创建Mapper接口MyBatis中的mapper接口(面向接口编程)相当于以前的dao。但是区别在于mapper仅仅是接口我们不需要提供实现类。public interface UserMapper { public User getUserById(); }创建映射文件ORM (Object Relationship Mapping)对象关系映射。对象:Java的实体类对象,比如User关系:关系型数据库映射:二者之间的对应关系,例如下图映射关系创建映射文件UserMapper.xml?xml version1.0 encodingUTF-8 ?!--约束 DOCTYPE 后边必然是跟标签--!DOCTYPEmapperPUBLIC-//mybatis.org//DTD Mapper 3.0//ENhttps://mybatis.org/dtd/mybatis-3-mapper.dtd!--要做到对象关系映射需要两个步骤--!--1. namespace对应的mapper接口文件--!--2. select、insert等标签对应mapper接口文件中的方法名--mappernamespacecom.light.mybatis.mapper.UserMapperinsertidaddUserinsert into user values(null, wwwcang, 123456, wwwcang, 12, 100)/insertupdateidupdateUserupdate user set password456123 where id 5/update!-- 查询功能的标签必须设置resultType或resultMap resultType:期望条语句中返回结果的类全限定名或别名, 注意如果返回的是集合那应该设置为集合包含的类型而不是集合本身的类型。 resultMap: 描述如何从数据库结果集中加载对象。 --selectidgetUserByIdresultTypecom.light.mybatis.pojo.Userselect * from user where id 2/select/mapper在配置文件引入映射文件?xml version1.0 encodingUTF-8 ? !--约束 DOCTYPE 后边必然是跟标签-- !DOCTYPE configuration PUBLIC -//mybatis.org//DTD Config 3.0//EN https://mybatis.org/dtd/mybatis-3-config.dtd configuration !--配置链接数据库的环境-- environments defaultdevelopment environment iddevelopment !--事务管理器的方式JDBC-- !--原始的JDBC事务开启回滚都需要手动执行-- transactionManager typeJDBC/ !--数据源配置 -- !-- typePOOLED表示使用数据库连接池 对数据库链接进行保存等到下一次使用的时候从池中取出 -- dataSource typePOOLED property namedriver valuecom.mysql.jdbc.Driver/ property nameurl valuejdbc:mysql://localhost:3306/java-test/ property nameusername valueroot/ property namepassword value123456/ /dataSource /environment /environments !--引入映射文件-- mappers mapper resourcemappers/UserMapper.xml/ /mappers测试SqlSession: 代表Java程序和数据库之间的会话。(HttpSession是Java程序和浏览器之间的会话)SqlSessionFactory: 是“生产SqlSession的工厂。importcom.light.mybatis.mapper.UserMapper;importorg.apache.ibatis.io.Resources;importorg.apache.ibatis.session.SqlSession;importorg.apache.ibatis.session.SqlSessionFactory;importorg.apache.ibatis.session.SqlSessionFactoryBuilder;importorg.junit.jupiter.api.Test;importjava.io.IOException;importjava.io.InputStream;publicclassTestMybatis{Testpublicvoidtest1()throwsIOException{//加载核心配置文件InputStreamioResources.getResourceAsStream(mybatis-config.xml);// 获取SqlSessionFactorySqlSessionFactoryBuildersqlSessionFactoryBuildernewSqlSessionFactoryBuilder();// 获取工厂对象SqlSessionFactoryfactorysqlSessionFactoryBuilder.build(io);// 使用工厂对象创建SqlSession对象SqlSessionsqlSessionfactory.openSession();// 获取mapper接口对象UserMapperuserMappersqlSession.getMapper(UserMapper.class);// 测试功能intiuserMapper.addUser();// 提交事务sqlSession.commit();System.out.println(result:i);}}自动提交事务ctrl p查看openSession参数有一个autocommit参数这个参数可以实现自动提交事务SqlSessionsqlSessionfactory.openSession(true);日志打印添加依赖!--log4j2的依赖--dependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-core/artifactIdversion2.19.0/version/dependency!-- Bridge from SLF4J 1.x to Log4j2MyBatis 3.5.6 用的 SLF4J 1.x API --dependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-slf4j-impl/artifactIdversion2.19.0/version/dependency!-- SLF4J APIlog4j-slf4j-impl 会自动带入显式声明确保版本一致 --dependencygroupIdorg.slf4j/groupIdartifactIdslf4j-api/artifactIdversion1.7.36/version/dependency添加配置文件log4j2.xml?xml version1.0 encodingUTF-8?!-- Configuration 是 Log4j2 的根元素。 statusWARNLog4j2 自身内部日志的输出级别WARN 表示只输出警告和错误避免干扰。 monitorInterval30每 30 秒检测一次配置文件是否发生变化如果变化则自动重新加载无需重启应用。 --ConfigurationstatusWARNmonitorInterval30!--Properties 用于定义全局变量方便在后面的配置中通过 ${变量名} 引用。这样可以让配置更简洁修改时只需改一处。--Properties!-- 日志文件存放的根目录这里设置为当前工作目录下的 logs 文件夹 --PropertynameLOG_HOME./logs/Property!-- 应用名称用于生成日志文件名这里叫 mybatis-demo --PropertynameAPP_NAMEmybatis-demo/Property!-- 日志输出格式 %d{yyyy-MM-dd HH:mm:ss.SSS}日期时间精确到毫秒 [%t]线程名 %-5level日志级别左对齐占5个字符 %logger{36}日志记录器名称最多显示36个字符 - %msg%n日志消息和换行符 --PropertynameLOG_PATTERN%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n/Property/Properties!-- Appenders 定义了日志的输出目的地。 可以有多个 Appender比如控制台、文件、数据库等。 这里配置了两个Console控制台和 RollingFile滚动文件。 --Appenders!-- Console Appender将日志输出到控制台标准输出。 nameConsole给这个 Appender 起个名字后面 Logger 中通过 ref 引用。 targetSYSTEM_OUT输出到 System.out也可以设为 SYSTEM_ERR。 --ConsolenameConsoletargetSYSTEM_OUT!-- 使用上面定义的日志格式 --PatternLayoutpattern${LOG_PATTERN}//Console!-- RollingFile Appender将日志输出到文件并支持按时间或大小滚动分割文件。 nameRollingFileAppender 名称。 fileName${LOG_HOME}/${APP_NAME}.log当前正在写入的日志文件名。 filePattern${LOG_HOME}/${APP_NAME}-%d{yyyy-MM-dd}-%i.log.gz 滚动后归档文件的命名模式。 %d{yyyy-MM-dd} 表示日期%i 表示序号.gz 表示压缩为 gzip 格式。 --RollingFilenameRollingFilefileName${LOG_HOME}/${APP_NAME}.logfilePattern${LOG_HOME}/${APP_NAME}-%d{yyyy-MM-dd}-%i.log.gz!-- 归档文件同样使用指定的日志格式 --PatternLayoutpattern${LOG_PATTERN}/!-- Policies 定义触发滚动的策略。可以同时使用多个策略满足任一条件即触发滚动。--Policies!-- TimeBasedTriggeringPolicy基于时间的滚动策略。 interval1每隔 1 个时间单位滚动一次单位由 filePattern 中的最小时间单位决定。 这里 filePattern 中有 %d{yyyy-MM-dd}所以单位是天即每天滚动一次。 modulatetrue是否对滚动时间进行调制。true 表示以 0 点为边界而不是从应用启动时间开始计算。 --TimeBasedTriggeringPolicyinterval1modulatetrue/!-- SizeBasedTriggeringPolicy基于文件大小的滚动策略。 size100 MB当当前日志文件达到 100MB 时触发滚动。 --SizeBasedTriggeringPolicysize100 MB//Policies!-- DefaultRolloverStrategy默认滚动策略控制归档文件的最大数量。 max30最多保留 30 个归档文件超过时删除最旧的文件。 --DefaultRolloverStrategymax30//RollingFile/Appenders!-- Loggers 定义了日志记录器用于将日志事件路由到不同的 Appender。 可以针对特定的包或类设置不同的日志级别和输出目标。 --Loggers!--additivityfalse表示不将日志事件传递给父级 Logger如 Root避免重复输出--!-- Mapper 接口日志DEBUG 输出 SQL 语句、参数和结果集仅限你自己的 Mapper --Loggernamecom.light.mybatis.mapperlevelDEBUGadditivityfalseAppenderRefrefConsole/AppenderRefrefRollingFile//Logger!-- MyBatis 框架日志INFO 只看关键信息不看连接池/事务等细节 --Loggernameorg.apache.ibatislevelINFOadditivityfalseAppenderRefrefConsole/AppenderRefrefRollingFile//Logger!-- Root Logger根日志记录器是所有 Logger 的父级。 当没有匹配到特定 Logger 时日志事件会交给 Root 处理。 levelINFO默认日志级别为 INFO即输出 INFO、WARN、ERROR 等级别的日志。 --RootlevelINFOAppenderRefrefConsole/AppenderRefrefRollingFile//Root/Loggers/Configuration这样运行就可以输出日志了

相关推荐

OpenPencil 的 Figma 兼容性全景:158 项功能逐项对比与实现现状解析
OpenPencil 的 Figma 兼容性全景:158 项功能逐项对比与实现现状解析

前端桌面应用AI 应用MCP 服务 【免费下载链接】open-pencil AI-native design editor. Open-source Figma alternative. 项目地址: https://gitcode.com/gh_mirrors/op/open-pencil 点击查看 免费下载 本文档(packages/docs/es/reference/figma-compati… · 2026/9/27 10:02:08

Open Interpreter CLI 快速上手:安装、更新、卸载与源码构建完全攻略
Open Interpreter CLI 快速上手:安装、更新、卸载与源码构建完全攻略

Open Interpreter CLI 快速上手:安装、更新、卸载与源码构建完全攻略 【免费下载链接】openinterpreter A coding agent for open models like Kimi K3 and GLM 5.3 项目地址: https://gitcode.com/GitHub_Trending/op/openinterpreter Open Interpreter 安装… · 2026/9/27 10:02:08

3步搞定如何用Word做网站单页图解步骤防挂马
3步搞定如何用Word做网站单页图解步骤防挂马

3步搞定如何用Word做网站单页图解步骤防挂马 网站被黑挂马不知道怎么办?很多新手站长第一反应是重启服务器,或者重装系统,但这往往治标不治本。其实,如果你只是需要一个静态的、简单的单页展示,甚至不需要复杂的后台交互,用 Word 生成… · 2026/9/27 10:01:55

一个云主机怎么挂两个网站速查手册:小白避坑指南
一个云主机怎么挂两个网站速查手册:小白避坑指南

一个云主机怎么挂两个网站速查手册:小白避坑指南 自己不会代码想做网站,最怕的就是搞懂服务器配置后,发现资源不够用或者怕配错了把站搞崩。很多人以为一台云主机只能跑一个站,其实只要会配置… · 2026/9/27 10:56:21

Agilent 53150A频率计:高精度时间测量与Allan方差实战指南
Agilent 53150A频率计:高精度时间测量与Allan方差实战指南

1. 这台“老伙计”不是摆设:Agilent 53150A 频率计的真实定位与不可替代性你可能在实验室角落见过它——深灰色金属机箱,前面板布满密密麻麻的BNC接口、LED指示灯和一块略带泛黄的LCD屏。它不像新买的示波器那样有炫酷的触摸界面,也不像频谱仪… · 2026/9/27 10:56:03

rsuite Dropdown 图标定制实战:在菜单项中使用图标、快捷键与自定义渲染
rsuite Dropdown 图标定制实战:在菜单项中使用图标、快捷键与自定义渲染

前端UI组件 【免费下载链接】rsuite 🧱 A suite of React components . 项目地址: https://gitcode.com/gh_mirrors/rs/rsuite 点击查看 免费下载 rsuite 的 Dropdown 组件用于创建易于访问的下拉菜单,为用户提供多项可选操作。本文围绕文档… · 2026/9/27 10:55:57

新手向的 OpCore-Simplify 实操指南:把 OpenCore EFI 制作从两天压缩到半小时
新手向的 OpCore-Simplify 实操指南:把 OpenCore EFI 制作从两天压缩到半小时

新手向的 OpCore-Simplify 实操指南:把 OpenCore EFI 制作从两天压缩到半小时 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify OpCore-Simp… · 2026/9/27 10:55:57

告别论文焦虑!汇写论文AI智能写作一站搞定
告别论文焦虑!汇写论文AI智能写作一站搞定

每年毕业季,"论文"两个字就像一块沉甸甸的石头,压在无数专科、本科、硕士乃至博士学子的心头。选题没有方向、文献查不全、框架搭不起来、写出来的重复率居高不下、AIGC率一查就超标……一环卡住,步步被动。如今,这一切… · 2026/9/27 10:55:57

pixi 全局清单(Global Manifest)完全指南:pixi-global.toml 的结构、位置与全部配置项
pixi 全局清单(Global Manifest)完全指南:pixi-global.toml 的结构、位置与全部配置项

开发工具CLI包管理器任务调度 【免费下载链接】pixi Powerful system-level package manager for Linux, macOS and Windows written in Rust – building on top of the Conda ecosystem. 项目地址: https://gitcode.com/gh_mirrors/pi/pixi 点击查看 免费下载 pi… · 2026/9/27 10:55:51

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码