搭建框架
创建 Maven 工程
1、打包方式:jar
<packaging>jar</packaging>
2、引入依赖
<dependencies>
<!-- Mybatis核心 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.10</version>
</dependency>
<!-- junit5测试 -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.8.2</version>
<scope>test</scope>
</dependency>
<!-- MySQL驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.29</version>
</dependency>
</dependencies>
创建 MyBatis 核心配置文件
1、习惯命名:mybatis-config.xml(建议,非强制要求)
2、整合 Spring 后,核心配置文件可以省略
3、作用:配置连接数据库的环境,MyBatis 全局配置信息
4、存放位置:src\main\resources
<?xml version="1.0" encoding="UTF-8" ?>
<!-- xml声明:版本号、编码 -->
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- dtd约束,DOCTYPE 表示 configuration 为根标签 -->
<!-- configuration 根标签 -->
<configuration>
<!-- 设置连接数据库的环境 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://ip地址:端口号/数据库名称"/>
<property name="username" value="用户名"/>
<property name="password" value="密码"/>
</dataSource>
</environment>
</environments>
<!-- 引入映射文件,以目录路径形式,非包路径 -->
<mappers>
<mapper resource="映射文件路径"/>
</mappers>
</configuration>
创建 POJO
1、创建 private 实体类的属性,对应表的字段
2、提供 get()、set() 方法
创建 Mapper 接口
1、MyBatis 中的 mapper 接口等价于 DAO
2、区别:mapper 只是接口,不需要提供实现类
3、命名:表所对应实体类的类名 + Mapper
4、作用:面向接口编程,调用接口方法,自动匹配、执行 SQL 语句
创建 MyBatis 映射文件
1、ORM:Object Relationship Mapping,对象关系映射
(1)对象:Java 实体类对象
(2)关系:关系型数据库
(3)映射:二者之间的对应关系
Java | 数据库 |
类 | 表 |
属性 | 字段 / 列 |
对象 | 记录 / 行 |
2、映射文件
(1)命名规则:表所对应实体类的类名 + Mapper.xml
(2)一个映射文件对应一个实体类,对应一张表的操作
(3)作用:编写 SQL,访问、操作表中的数据
(4)存放位置:src\main\resources\mappers
3、MyBatis 面向接口操作数据,要保证两个一致
(1)mapper 接口的全类名,和映射文件的命名空间(namespace)保持一致
(2)mapper 接口的方法名,和映射文件中编写 SQL 的标签的 id 属性保持一致
<?xml version="1.0" encoding="UTF-8" ?>
<!-- dtd约束,DOCTYPE 表示 mapper 为根标签-->
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mapper接口全类名">
<!-- 此处填入方法,以便确定返回类型、形参列表 -->
<insert id="mapper接口方法名">插入SQL语句</insert>
</mapper>
(3)<select></select> 查询 SQL 语句必须设置 resultType 或 resultMap,值为 POJO 全类名,否则 MyBatis 执行完成 SQL 语句后,不能把结果集转换为对应的 POJO
(4)resultType:设置默认的映射关系
(5)默认映射:用于结果集的字段 / 列,与 POJO 属性匹配,当设置 POJO 后,查询结果集中的字段 / 列,自动赋值到 POJO 中的属性,可以匹配,则赋值;不能匹配,则不赋值
(6)resultMap:设置自定义的映射关系
(7)自定义映射:用于结果集的字段 / 列,与 POJO 属性不匹配;一对多、多对一的关系
通过 junit 测试功能
public void test() throws IOException {
/*
读取MyBatis的核心配置文件
以文件方式:以getResourceAsFile()
以Properties方式:getResourceAsProperties()
以字符流方式:getResourceAsReader()
以字节流方式:getResourceAsStream()
*/
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//获取SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//通过核心配置文件,所对应的字节输入流,创建工厂类SqlSessionFactory,生产SqlSession对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
/*
获取sqlSession
默认手动提交或回滚事务:SqlSession sqlSession = sqlSessionFactory.openSession();
设置自动提交事务:SqlSession sqlSession = sqlSessionFactory.openSession(true);
*/
SqlSession sqlSession = sqlSessionFactory.openSession();
//通过代理模式,创建Mapper接口的代理实现类对象
Mapper mapper = sqlSession.getMapper(Mapper.class);
//调用Mapper接口中的方法,根据Mapper的全类名匹配元素文件,通过调用的方法名匹配映射文件中的SQL标签,并执行标签中的SQL语句
int result = Mapper.insert();
//因为<transactionManager type="JDBC"/>,所以需要手动提交事务
sqlSession.commit();
System.out.println("result:" + result);
}
1、SqlSession:代表 Java 程序和数据库之间的会话(HttpSession 是 Java 程序和浏览器之间的会话)
2、SqlSessionFactory:生产 SqlSession 的工厂
3、增、删、改返回值可以为 void,也可以为 int
4、查询的返回值必须为对应 POJO,当查询的数据为多条时,不能使用实体类作为返回值,只能使用集合,否则会抛出异常 TooManyResultsException;若查询的数据只有一条,可以使用实体类或集合作为返回值
5、优化
(1)获取 SqlSession 时,设置自动提交事务:SqlSession sqlSession = sqlSessionFactory.openSession(true);
(2)加入 log4j 日志功能
<!-- 加入log4j依赖 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!--
加入log4j的配置文件
文件名:log4j.xml
存放位置:src/main/resources
日志级别:FATAL(致命)> ERROR(错误)> WARN(警告)> INFO(信息)> DEBUG(调试);从左至右,级别越低,内容越详细(包含本身和级别高的所有信息)
http://jakarta.apache.org/log4j/ 提示错误,不影响log4j日志功能使用
-->
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<param name="Encoding" value="UTF-8" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n" />
</layout>
</appender>
<logger name="java.sql">
<level value="debug" />
</logger>
<logger name="org.apache.ibatis">
<level value="info" />
</logger>
<root>
<level value="debug" />
<appender-ref ref="STDOUT" />
</root>
</log4j:configuration>
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战