学习Mabatis Day2

MyBatis第二章:基本的CRUD操作

在上一章中,我们已经学习了如何配置和使用MyBatis,以及如何进行简单的查询操作。接下来,在这一章节中,我们将学习MyBatis的基本CRUD操作(增删改查),并掌握它们的用法。

1. 创建实体类

首先,我们需要创建一个与数据库表对应的实体类。实体类的属性应该与表的字段相对应,而且还需要提供相应的getter和setter方法。

2. 编写Mapper接口

接下来,我们需要编写Mapper接口,用于定义各种数据库操作的方法。每个方法都应该有对应的SQL语句,并使用注解或XML方式进行映射。

3. 配置Mapper映射文件

在MyBatis的配置文件中,我们需要指定Mapper接口的位置,并为每个Mapper接口配置相应的映射关系。这样,MyBatis就能够自动将方法调用转化为对应的SQL语句执行。

4. 实现CRUD操作

现在,我们可以开始实现CRUD操作了。以下是几个常见的操作示例:

4.1 查询操作

User user = sqlSession.selectOne("com.example.mapper.UserMapper.getUserById", 1);

4.2 插入操作

User user = new User(); user.setName("张三"); user.setAge(20); int result = sqlSession.insert("com.example.mapper.UserMapper.insertUser", user);

4.3 更新操作

User user = new User(); user.setId(1); user.setName("李四"); int result = sqlSession.update("com.example.mapper.UserMapper.updateUser", user);

4.4 删除操作

int result = sqlSession.delete("com.example.mapper.UserMapper.deleteUserById", 1);

5. 测试CRUD操作

我们可以编写一个简单的测试类来验证我们的CRUD操作是否正常工作。在测试类中,我们可以创建一个SqlSession对象,通过它执行各种数据库操作,并使用断言或打印输出来验证结果。

resultMap元素的属性

id:resultMap的唯一标识 type:映射的结果类型 resultMap元素的子元素 id:指定和数据表主键字段对应的标识属性 设置此项可提高MyBatis性能 result:指定结果集字段和实体类属性的映射关系 association:映射“多对一”或“一对一”关系 collection:映射“一对多”关系

嵌套结果映射之association

association

        复杂的关联类型,映射一个嵌套JavaBean属性

        多对一或一对一

        属性

                property:用来映射查询结果子集的实体属性

                javaType:完整Java类名或者别名

                resultMap:引用外部resultMap

        子元素

                id

                result

collection

        复杂类型集合,映射嵌套结果集到一个列表

        一对多

        属性

                property:实体类中用来映射查询结果子集的集合属性

                ofType:集合中元素的类型,完整Java类名或者别名

                resultMap:引用外部resultMap

        子元素

                id

                result

resultType与resultMap小结

resultType

        直接表示返回类型

        适用于比较简单直接的数据封装场景

resultMap

        是对外部resultMap的引用

        能够处理结果集字段名与实体类属性名不一致、或者需要对连接查询结果使用嵌套映射等较            为复杂的问题

二者本质上都是基于Map数据结构,不能同时使用

自动映射的前提:属性名与字段名一致

自动映射级别:autoMappingBehavior

缓存

MyBatis缓存

        一级缓存

        二级缓存

一级缓存

一级缓存是MyBatis默认开启的缓存机制,它是基于线程的缓存。

下面是配置一级缓存的步骤:

  1. 确保在 MyBatis 的配置文件中开启缓存:

<configuration> <!-- 其他配置项 --> <settings> <!-- 开启一级缓存,默认值为 true --> <setting name="localCacheScope" value="SESSION"/> </settings> <!-- 映射文件等其他配置 --> </configuration>

  1. 确保 SQL 映射文件中的查询语句没有设置 flushCache 属性或属性值为默认的 true

<select id="getUsers" resultType="User"> SELECT * FROM users </select>

  1. 在同一个 SqlSession 中重复执行相同的查询语句时,MyBatis 会将结果存储在内存中,以供后续查询使用。

需要注意以下几点:

  • 一级缓存只在同一个 SqlSession 内有效,不同的 SqlSession 之间无法共享缓存。
  • 当进行 insert、update、delete 操作时,会清空当前 SqlSession 的一级缓存。
  • 如果希望禁用一级缓存,可以将 MyBatis 的配置文件中的 <setting name="localCacheScope" value="SESSION"/> 修改为 <setting name="localCacheScope" value="STATEMENT"/>
二级缓存的配置

二级缓存是MyBatis提供的一种跨SqlSession的缓存机制,可以在不同的SqlSession之间共享缓存。

下面是配置二级缓存的步骤:

  1. 确保在 MyBatis 的配置文件中开启缓存:

<configuration> <!-- 其他配置项 --> <settings> <!-- 开启二级缓存,默认值为 true --> <setting name="cacheEnabled" value="true"/> </settings> <!-- 映射文件等其他配置 --> </configuration>

  1. 在需要启用二级缓存的 Mapper 接口对应的 XML 文件中添加 <cache> 标签,并指定缓存类型,通常使用默认的 org.apache.ibatis.cache.impl.PerpetualCache

<cache type="org.apache.ibatis.cache.impl.PerpetualCache"/>

  1. 确保需要进行缓存的查询语句没有设置 flushCache 属性或属性值为默认的 true

  2. 如果需要特定的 Mapper 接口禁用缓存,可以在接口上使用 @CacheNamespace(implementation = org.apache.ibatis.annotations.CacheNamespace.class, readOnly = true) 注解。

需要注意以下几点:

  • 默认情况下,MyBatis使用的是PerpetualCache作为二级缓存的实现,它将缓存对象永久存储在内存中。
  • 如果希望使用其他的缓存实现,可以通过在 <cache> 标签中添加 type 属性来指定自定义的缓存实现类。
  • 二级缓存默认是开启的,如果希望禁用二级缓存,可以将 MyBatis 的配置文件中的 <setting name="cacheEnabled" value="true"/> 修改为 <setting name="cacheEnabled" value="false"/>

总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值