新闻详情

新闻详情

首页 / 资讯中心 / 详情

1.mybatis学习-基础

发布时间:2026/9/27 10:02:23来源:尧图网络
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这样运行就可以输出日志了
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

KubeVela v1.2 版本深度解析:VelaUX 控制台、Addon 生态与新一代资源治理架构 2026/9/27 10:53:36

KubeVela v1.2 版本深度解析:VelaUX 控制台、Addon 生态与新一代资源治理架构

云原生DevOps运维微服务 【免费下载链接】kubevela The Modern Application Platform. 项目地址: https://gitcode.com/gh_mirrors/ku/kubevela 点击查看 免费下载 KubeVela 是一个面向云原生应用交付的现代应用平台,本文以仓库内 CHANGELOG-1.2.md 为骨…

阅读更多 →
还在翻 git log 写周报?WorkBuddy 一键生成结构化周报,附可复用 Prompt 2026/9/27 10:53:29

还在翻 git log 写周报?WorkBuddy 一键生成结构化周报,附可复用 Prompt

🏭导航收藏不迷路—>制造业数据与AI践行者老蒋的技术博客全系列文章汇总(持续更新) 📝 正文 摘要: Git 提交记录自动生成周报,附完整可复制 Prompt 模板 导出命令,每周省 30 分钟&#xff0…

阅读更多 →
嵌入式烧录失败排查指南:从硬件链路到固件格式的完整思路 2026/9/27 10:53:23

嵌入式烧录失败排查指南:从硬件链路到固件格式的完整思路

烧录良率上不去的时候,我见过不少工程师的第一反应是怀疑芯片来料,或者怀疑编译器生成的固件有问题,甚至直接把锅甩给烧录器厂商。但做了这么多年嵌入式开发和产线导入,我越来越确定一件事:真正卡住良率的环节&#xf…

阅读更多 →
WordPress分类目录页面源码下载实战:3招防挂马保流量 2026/9/27 10:53:16

WordPress分类目录页面源码下载实战:3招防挂马保流量

WordPress分类目录页面源码下载实战:3招防挂马保流量 网站突然被黑,打开全是乱七八糟的弹窗和挂马链接,后台权限也被篡改,这种噩梦谁经历过谁懂。别慌,越是这种时候越要冷静,因为你的WordPress分类目录页面很可能成了攻击者的突破口…

阅读更多 →
沭阳建设网站防黑指南:源码下载后必做的5步加固 2026/9/27 10:52:43

沭阳建设网站防黑指南:源码下载后必做的5步加固

沭阳建设网站防黑指南:源码下载后必做的5步加固 网站突然打开变成博彩广告,或者浏览器提示“不安全”,你第一反应是不是慌?别急,这种情况在沭阳做本地企业官网的站长里太常见了。很多老板花了几千块找人做站,结果没半年就被挂马,客户全跑光。核心问题…

阅读更多 →
xiaobei 企业微信微盘管理技能实战:基于 relay 透传的空间、文件与分享链路全解析 2026/9/27 10:52:43

xiaobei 企业微信微盘管理技能实战:基于 relay 透传的空间、文件与分享链路全解析

人工智能AI Agent大模型AI 应用媒体生成 【免费下载链接】xiaobei 为OPC/中小微企业量身打造的自媒体获客智能体 项目地址: https://gitcode.com/gh_mirrors/wi/xiaobei 点击查看 免费下载 导读:本文围绕 xiaobei 项目公共技能 wxwork-drive&#xff0c…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉