MyBatis是一款优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。
ORM(Object Relation Mapping)对象关系映射,是以对象的形式创建数据库。
1.使用 ORM 的优点:
提高了开发效率降低了开发成本、开发更简单更对象化、可移植更强。
如何避免SQL注入
使用预处理 PreparedStatement。
使用正则表达式过滤掉字符中的特殊字符。
缓存分为 一级缓存和二级缓存
**一级缓存:**基于 PerpetualCache 的 HashMap 本地缓存,它的声明周期是和 SQLSession 一致的,有多个 SQLSession 或者分布式的环境中数据库操作,可能会出现脏数据。当 Session flush 或 close 之后,该 Session 中的所有 Cache 就将清空,默认一级缓存是开启的。
**二级缓存:**也是基于 PerpetualCache 的 HashMap 本地缓存,不同在于其存储作用域为 Mapper 级别的,如果多个SQLSession之间需要共享缓存,则需要使用到二级缓存,并且二级缓存可自定义存储源,如 Ehcache。默认不打开二级缓存,要开启二级缓存,使用二级缓存属性类需要实现 Serializable 序列化接口(可用来保存对象的状态)。
2.一级缓存与二级缓存的区别
MyBatis中的一级缓存和二级缓存是两种不同的缓存机制,它们有以下区别:
1.一级缓存:
- 一级缓存是MyBatis默认开启的缓存机制,也称为本地缓存。它是在SqlSession的范围内有效,即同一个SqlSession中执行的SQL语句的结果会被缓存起来,下次相同的SQL语句如果还是在同一个SqlSession中执行,将直接从缓存中获取结果,而不再去查询数据库。
- 一级缓存是基于对象引用的,缓存的是查询结果对象。当SqlSession执行了更新、插入、删除等操作时,会清空一级缓存,保证数据的一致性。
2.二级缓存:
- 二级缓存是跨SqlSession的缓存机制,它可以被多个SqlSession共享。多个SqlSession中执行相同的SQL语句,如果开启了二级缓存,则会先从缓存中获取结果,如果缓存中不存在,则去查询数据库,并将查询结果缓存起来,供后续的SqlSession使用。
- 二级缓存是基于命名空间(Mapper接口)的,每个Mapper接口对应一个独立的二级缓存。不同的Mapper接口之间的查询结果不会互相影响。
1.
@Mapper: 用于标识Mapper接口,告诉MyBatis该接口是一个映射器接口。
2.@Select: 用于执行查询操作的SQL语句。
3.@Insert: 用于执行插入操作的SQL语句。
4.@Update: 用于执行更新操作的SQL语句。
5.@Delete: 用于执行删除操作的SQL语句。
6.@Results: 用于指定映射结果集与实体类之间的关系。
7.@Result: 用于指定单个属性与列之间的映射关系。
8.@Param: 用于给Mapper方法的参数命名,以便在SQL语句中引用。
9.@ResultMap: 用于引用一个已定义的元素,可以在映射器接口中重用。
10.@Options: 用于配置一些特定的选项,如主键自动生成、批量插入等。
11.@Transactional: 用于标识事务的边界,在方法或类级别上启用事务管理。
1.
@TableName: 用于指定实体类对应的数据库表名。
2.@TableField: 用于指定实体类属性与数据库字段的映射关系。
3.@TableId: 用于指定实体类属性作为主键,并指定主键生成策略。
4.@TableLogic: 用于标记逻辑删除字段。
5.@Version: 用于标记乐观锁版本字段。
6.@SqlParser: 用于启用或禁用SQL解析功能,例如实现多租户等。
7.@InsertFill: 用于在插入操作时自动填充指定字段的值。
8.@UpdateFill: 用于在更新操作时自动填充指定字段的值。
9.@SelectKey: 用于配置主键生成策略,类似于MyBatis的元素。
10.@TableResult: 用于定义查询结果集与实体类之间的映射关系。
11.@Entity: 标识实体类。
12.@Mapper: 标识Mapper接口。
13.@Service: 标识Service类。
14.@Controller: 标识Controller类。
1.基础功能:MyBatis是一个功能强大且灵活的持久化框架,它提供了灵活的SQL映射配置和手动编写SQL的能力。而MyBatis Plus是在MyBatis基础之上进行增强的工具,提供了更多的便捷功能和增强特性,如通用的CRUD操作、自动填充、逻辑删除、乐观锁等。
2.编码风格:MyBatis使用传统的XML配置文件和手动编写SQL语句的方式进行数据库操作。开发者需要编写和维护大量的XML配置文件和SQL语句。而MyBatis Plus提倡使用注解和约定大于配置的方式进行数据库操作,减少了XML配置的繁琐和手动编写SQL的工作量。
3.代码生成:MyBatis Plus提供了代码生成器,可以根据数据库表结构自动生成实体类、Mapper接口和XML映射文件,快速生成基础的CRUD操作代码。这在一些简单的增删改查场景下可以极大地提高开发效率。
4.常用功能集成:MyBatis Plus内置了一些常用功能,如分页查询、条件构造器、批量操作等,简化了开发者对这些常用功能的实现。
绑定某个mapper
1.
:配置文件的根元素,用于配置全局属性和设置。
2.:用于配置数据库环境,包括数据源、事务管理器等。
3.:用于指定映射器(Mapper)接口或映射器 XML 文件的位置。
4.:用于定义映射器(Mapper)接口或映射器 XML 文件的具体内容。
5.:定义了结果集的映射规则,用于将查询结果映射到Java对象。
6.、、、:分别用于定义查询、插入、更新和删除操作的SQL语句。
7.:用于定义可重用的SQL片段,可以在其他SQL语句中引用。
8.:用于在SQL语句中引用已定义的可重用SQL片段。
9.、、、:条件判断和分支控制的标签,用于根据条件生成动态SQL语句。
10.:用于迭代集合或数组,并在SQL语句中生成对应的多次重复操作。
11.:定义了查询结果与Java对象属性的映射关系。
12.:定义了参数与SQL语句中参数占位符的映射关系。