-
-
依赖
-
配置文件
-
创建 Session
-
-
MyBatis 查询
-
-
实体映射
-
字段映射 - resultMap
-
传参 - 单个参数
-
传参 - 多个参数
-
打印 SQL 语句
-
多表关联查询 - resultType
-
Java 从 0 到架构师目录:【Java从0到架构师】学习记录
Gitee 代码:https://gitee.com/szluyu99/mj_java_frame/tree/master/01_MyBatis
MyBatis 属于持久层(DAO 层)的框架
-
封装了 JDBC 的很多操作细节,让开发者大大简化了 DAO 层的代码
-
于 2010 年从 iBatis 改名为 MyBatis
===============================================================================================
数据库事务,简称事务。什么是事务?
- 如果将 N 个数据库操作放到了同一个事务中,那么这 N 个操作最终要么全都生效,要么全都不生效
事务的使用:
-
开启事务:
START TRANSACTION
-
回滚事务:
ROLLBACK
只要事务中的一个操作失败,那么其他所有操作都需要回滚 (rollback),回到开启事务之前的状态
-
提交事务:
COMMIT
如果事务中的所有操作都成功了,就提交事务,让这些操作真正生效
事务的四大特性(ACID):
-
原子性 (Atomicity)
事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行
-
一致性 (Consistency)
事务应确保数据库的状态从一个一致状态转变为另一个一致状态
一致状态的含义是数据库中的数据应满足完整性约束
-
隔离性 (Isolation)
多个事务并发执行时,一个事务的执行不应影响其他事务的执行
-
持久性 (Durability)
已被提交的事务对数据库的修改应该永久保存在数据库中
在 JDBC 中,使用 Connection 对象来管理事务:
-
setAutoCommit(false)
:开启事务 -
rollback()
:回滚事务 -
commit()
:提交事务
===============================================================================
添加依赖(需要添加数据库的依赖,比如 MySQL 的数据库驱动包)
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
创建核心配置文件,一般叫 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">
<!-- 采用JDBC的事务管理方法 -->
<transactionManager type="JDBC" />
<!-- POOLED代表采取连接池的方式管理连接 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test_mybatis"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
</configuration>
Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
try (SqlSession session = factory.openSession()) {
System.out.println(session.getConnection());
}
=============================================================================
新建实体映射的配置文件(可以放在 mappers 文件夹下,比如 mappers/skill.xml),示例代码
<?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">
<mapper namespace="skill">
<select id="list" resultType="com.mj.bean.Skill">
SELECT * FROM skill
</select>
</mapper>
定义好实体映射的配置文件后,需要在 mybatis-config.xml 配置文件中添加实体映射文件的路径
<mappers>
<mapper resource="mappers/skillxml" />
</mappers>
通过 mapper 的 namespace、select 的 id 执行 SQL语句:示例代码
// 执行SQL语句
List<Skill> skills = session.selectList("skill.list");
使用 resultMap 可以解决多表联查时的别名问题:
<resultMap id="rmSkill" type="com.mj.bean.Skill">
<id property="id" column="id" />
<result property="id" column="id" />
<result property="createdTime" column="created_time" />
<result property="name" column="name" />
<result property="level" column="level" />
</resultMap>
也可以在查询时直接设置别名来解决该问题:
<select id="list" resultType="java.util.LinkedHashMap">
# **最后**
**再免费分享一波我的[JAVA架构专题面试真题+解析+JAVA学习书籍:戳这里免费领取](https://gitee.com/vip204888/java-p7)**
![image.png](https://img-blog.csdnimg.cn/img_convert/5bd53a11f27005d94af64c494867e200.png)
lt property="name" column="name" />
<result property="level" column="level" />
</resultMap>
也可以在查询时直接设置别名来解决该问题:
<select id="list" resultType="java.util.LinkedHashMap">
# **最后**
**再免费分享一波我的[JAVA架构专题面试真题+解析+JAVA学习书籍:戳这里免费领取](https://gitee.com/vip204888/java-p7)**
[外链图片转存中...(img-4H6RqFW6-1628597184525)]