MyBatis
MyBatis
什么是MyBatis?
MyBatis是一款优秀的持久层框架,用于简化JDBC开发
MyBatis本是 Apache的一个开源项目iBatis, 2010年这个项目由apache softwarefoundation迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github官网: https://mybatis.org/mybatis-3/zh/index.html
持久层
负责将数据到保存到数据库的那一层代码JavaEE三层架构:表现层、业务层、持久层
主要是争对JDBC硬代码优化,方便后期的维护
mybatis-config.xml配置文件:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <!--这是数据库的连接信息--> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/registeruser?characterEncoding=utf-8&serverTimezone=GMT%2B8&userSSL=false"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <mappers> <!--加载sql的映射文件--> <mapper resource="UserMapper.xml"/> </mappers> </configuration>
logback.xml自定义日志文件:
<?xml version="1.0" encoding="UTF-8"?> <!--详细介绍使用:https://icode.blog.csdn.net/article/details/88874162--> <!--debug="true" : 打印 logback 内部状态(默认当 logback 运行出错时才会打印内部状态 ), 配置该属性后打印条件如下(同时满足): 1、找到配置文件 2、配置文件是一个格式正确的xml文件 也可编程实现打印内部状态, 例如: LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); StatusPrinter.print(lc); --> <!-- scan="true" : 自动扫描该配置文件,若有修改则重新加载该配置文件 --> <!-- scanPeriod="30 seconds" : 配置自动扫面时间间隔(单位可以是:milliseconds, seconds, minutes or hours,默认为:milliseconds), 默认为1分钟,scan="true"时该配置才会生效 --> <configuration debug="true" scan="true" scanPeriod="30 seconds" packagingData="true"> <!-- 设置变量。定义变量后,可以使“${}”来使用变量。 --> <property name="LOG_FILE_LOCATION" value="./log-file" /> <property name="CONSOLE_LOG_PATTERN" value="%red(%date{yyyy-MM-dd HH:mm:ss}) %highlight(%-5level) %red([%thread]) %boldMagenta(%logger{50}) %cyan(%msg%n)"/> <!-- 设置 logger context 名称,一旦设置不可改变,默认为default --> <contextName>myAppName</contextName> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <!-- encoder class为空时, 默认也为 ch.qos.logback.classic.encoder.PatternLayoutEncoder --> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>${CONSOLE_LOG_PATTERN}</pattern> </encoder> </appender> <!-- 按照每天生成日志文件 --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 当前活动日志文件名:用日期命名 --> <file>${LOG_FILE_LOCATION}/MyLog%d{yyyy-MM-dd}.log</file> <!-- 文件滚动策略根据%d{patter}中的“patter”而定,此处为每天产生一个文件 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 归档文件名“.zip或.gz结尾”,表示归档文件自动压缩 --> <FileNamePattern>${LOG_FILE_LOCATION}/MyLog%d{yyyy-MM-dd}.log.zip</FileNamePattern> <!--日志文件保留天数--> <maxHistory>30</maxHistory> </rollingPolicy> <!--日志文件最大的大小--> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <maxFileSize>10MB</maxFileSize> </triggeringPolicy> <encoder> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <pattern>${CONSOLE_LOG_PATTERN}</pattern> </encoder> </appender> <!-- 日志级别若没显示定义,则继承最近的父 logger(该logger需显示定义level,直到rootLogger)的日志级别--> <!-- logger 的 appender 默认具有累加性(默认日志输出到当前logger的appender和所有祖先logger的appender中),可通过配置 “additivity”属性修改默认行为--> <!--name: 用来指定受此 logger 约束的某一个包或者具体的某一个类--> <logger name="com.xpwi" level="debug" additivity="false" > <appender-ref ref="FILE"/> </logger> <!-- 至多只能配置一个root --> <root level="debug"> <appender-ref ref="STDOUT" /> <appender-ref ref="FILE" /> </root> </configuration>
UserMapper.xml数据表sql方法映射文件:对应写一个数据表写一个类
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- namespace:名称空间 --> <mapper namespace="test"> <select id="selectAll" resultType="com.itheima.pojo.User"> select * from user; </select> <select id="selectOne" resultType="com.itheima.pojo.User"> select * from user where id=1; </select> </mapper>
包结构:
mybatis-config.xml配置文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!--类型别名默认就是类的名称不分大小写--> <typeAliases> <package name="com.itheima.pojo"/> </typeAliases> <!-- environments可以配置多个数据库连接环境信息,多个environments用id来区分--> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <!--这是数据库的连接信息--> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/registeruser?characterEncoding=utf-8&serverTimezone=GMT%2B8&userSSL=false"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <mappers> <!--加载sql的映射文件--> <!--<mapper resource="com/itheima/Mapper/UserMapper.xml"/>--> <!--Mapper代理方式--> <package name="com.itheima.Mapper"/> </mappers> </configuration>
运行类
public class MyBatisDemo { public static void main(String[] args) throws IOException { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession(); //Object one = sqlSession.selectOne("test.selectOne"); //System.out.println(one); UserMapper usermapper = sqlSession.getMapper(UserMapper.class); List<User> users = usermapper.selectAll(); User user = usermapper.selectOne(); System.out.println(user); System.out.println(users); sqlSession.close(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现