目录
概念
MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs (Plain Old Java Objects, 普通的 Java 对象) 映射成数据库中的记录。
特性
-
SQL 映射:MyBatis 通过配置文件或注解方式将接口和 SQL 语句映射起来,使得开发者可以直接编写 SQL 语句,而无需过多地关注 JDBC 的底层实现。
-
动态 SQL:MyBatis 提供了强大的动态 SQL 功能,通过
<if>
,<choose>
,<when>
,<otherwise>
,<foreach>
等标签,可以根据参数的不同值动态生成 SQL 语句。 -
对象关系映射 (ORM):虽然 MyBatis 不是一个完全的 ORM 框架(如 Hibernate),但它确实提供了将结果集映射到 POJOs 的功能。开发者可以通过配置或注解来指定数据库列和 Java 对象属性之间的映射关系。
-
事务管理:MyBatis 支持事务管理,可以通过配置文件或注解来配置事务的边界。
-
插件机制:MyBatis 提供了插件机制,允许开发者扩展框架的功能。
-
高级映射:除了基本的 CRUD 操作外,MyBatis 还支持存储过程、嵌套查询、复杂类型映射等高级功能。
-
代码生成器:MyBatis 提供了一个代码生成器,可以根据数据库表结构自动生成 MyBatis 的映射文件、POJOs 和 DAO(数据访问对象)代码,简化开发过程。
-
与 Spring 集成:MyBatis 可以很好地与 Spring 框架集成,通过 Spring 的事务管理和依赖注入功能,可以进一步提升开发效率和代码的可维护性。
部分代码解析
sellect查询
这是一个使用MyBatis框架的XML配置片段,用于定义一个名为selectAll
的SQL查询。MyBatis是一个流行的Java SQL映射框架,它允许开发者使用XML或注解来配置和映射SQL语句到Java对象。
这个配置片段定义了一个动态SQL查询,它基于传入的参数动态地构建WHERE子句,从admin
表中选择数据,并将结果映射到com.example.entity.Admin
类。
<select id="selectAll" resultType="com.example.entity.Admin">
select
<include refid="Base_Column_List" />
from admin
<where>
<if test="id != null"> and id= #{id}</if>
<if test="username != null"> and username like concat('%', #{username}, '%')</if>
</where>
</select>
以下是这段XML配置片段的详细解释:
<select id="selectAll" resultType="com.example.entity.Admin">:
这是一个select
元素,表示一个查询操作。
id="selectAll"
:为这个查询操作定义了一个唯一的标识符,名为selectAll
。
resultType="com.example.entity.Admin"
:这表示查询的结果将被映射到com.example.entity.Admin
这个Java类。
<include refid="Base_Column_List" />
这是一个include
元素,它用于引用另一个SQL片段。
refid="Base_Column_List":
表示引用的SQL片段的ID是Base_Column_List
。这通常用于定义一些常用的列列表,然后在其他地方引用,以保持代码的重复和可维护性。
在<where>
标签内部,有一系列的<if>
元素,每个都表示一个条件判断:
<if test="id != null"> and id= #{id}</if>:
- 如果传入的参数
id
不为null(这个id指的是实体类中的id),那么它会添加id = #{id}
到SQL查询中。 #{id}
是参数占位符,它们在执行时会被替换为实际传入的参数值。and
关键字在每个<if>
标签的开始处使用,因为<where>
标签会处理多余的 AND 前缀,所以即使当id
或typeId
为null
时,也不会生成无效的 SQL 语句(如WHERE AND ...
)。这里的and表示“添加”,如果符合if条件,则添加id=?到where语句中。至于where语句中不同条件之间的AND<where>
标签会自动添加。- 如果
id
和typeId
都不为null
,那么生成的 SQL 语句将类似于WHERE id= ? AND type_id= ?
,其中?
是参数占位符,执行时会被实际值替换。