资讯中心

1.mybatis学习-基础

📅 2026/9/27 10:02:24
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这样运行就可以输出日志了

看完文章,想为自己的企业也做一次专业网站诊断?

尧图顾问免费为您评估现有网站,并给出建站/改版建议与报价方案。

免费获取方案