MyBatis教程大全


 MyBatis SQL 映射

     MyBatis select 标签

     MyBatis 多数据库支持

     MyBatis selectKey 标签作用

     MyBatis @SelectKey注解用法介绍

     MyBatis @SelectKey注解用法详细介绍

     MyBatis keyProperty 属性介绍

     MyBatis insert、update 和 delete 元素

     MyBatis sql 元素

 MyBatis SQL 参数映射

     MyBatis SQL 参数映射

 MyBatis 动态SQL

     MyBatis 动态SQL与数据准备

     MyBatis if 标签

     MyBatis if else 用法

     MyBatis choose、when、otherwise 标签

     MyBatis where 标签

     MyBatis set 标签

     MyBatis foreach 标签

     MyBatis bind 标签

     MyBatis trim 标签

 MyBatis SQL 结果映射

 MyBatis SQL 结果之关系映射

 MyBatis 使用介绍

     MyBatis typeAliases 类型别名

     MyBatis typeHandlers 类型处理器

     MyBatis Transaction 事务接口

     MyBatis transactionManager 事务管理

     SqlSessionFactory 介绍

     MyBatis 核心对象 SqlSession

     MyBatis 初始化 创建 Session 实例

     MyBatis ObjectFactory 对象工厂

     MyBatis缓存机制:一级缓存和二级缓存

     MyBatis 常用注解

 MyBatis 配置文件

     MyBatis 配置文件

 MyBatis 映射

     MyBatis 映射简介

     MyBatis ResultMap 映射

     MyBatis 自动映射

     MyBatis 高级映射

     MyBatis 集合映射

     MyBatis 关联映射

     MyBatis 一对一关联映射

     MyBatis 一对多关联映射

     MyBatis 多对多关联映射

     MyBatis 一对一(注解形式)

     MyBatis 一对多(注解形式)

     MyBatis 多对多(注解形式)

     MyBatis resultMap 元素

 MyBatis 面试题库

     #{}和${}的区别是什么?

     数据库链接中断如何处理?

     数据库插入重复如何处理?

     事务执行过程中宕机的应对处理方式

     Java客户端中的一个Connection问题

MyBatis select 标签

备注:本文修订于2022年6月22日

MyBatis真正强大之处在于它的SQL映射,在MyBatis中实现SQL映射的常见标签有:select标签(映射查询语句)、insert标签(映射插入语句)、update标签(映射更新语句)、delete标签(映射删除语句)和sql标签(可被其他语句引用的可重用语句块)。本文主要讲解一下select标签的用法,希望对大家有所帮助。

select标签用法介绍

select标签用来映射查询语句,它是MyBatis中最常用的标签之一。select标签的使用非常简单的。例如:

<select id="selectUser" parameterType="int" resultType="hashmap">
SELECT * FROM TB_USER WHERE ID = #{id}
</select>

这个语句被称作selectUser,其接受一个int (或Integer) 类型的参数,并返回一个HashMap类型的对象,HashMap中的键是列名,值便是结果行中的对应值。

注意:参数符号#{id},这是告诉MyBatis创建一个预处理语句参数。通过JDBC,这样的一个参数在SQL中会由一个“?”来标识,并被传递到一个新的预处理语句中。以上MyBatis配置文件执行时会生成如下JDBC 代码:

string selectUser = "SELECT * FRON TB_USER WHERE ID=?";
Preparedstatement ps = conn.prepareStatement(selectUser) ;
ps.setInt(1,id);

select标签的属性介绍

select标签有很多属性可以配置,它们用来决定每条语句的作用细节。例如:

<select
id="selectUser"
parameterType="int"
resultType="hashmap"
resultMap="userResultMap"
flushCache="false"
useCache="true"
timeout="10000"
fetchsize="256"
statementType="PREPARED"
resultsetType="FORMARD ONLY">

select标签的属性解释如下:

id:命名空间中唯一的标识符,可以被用来引用这条语句。

parameterType:将会传入这条语句的参数类的完全限定名或别名。这个属性是可选的,因为MyBatis可以通过TypeHandler推断出具体传入语句的参数,默认值为unset。

resultType:从这条语句中返回的期望类型的类的完全限定名或别名。

注意:如果返回值是集合类型,那应该是集合可以包含的类型,而不能是集合本身的类型。返回时可以使用resultType或resultMap,但不能同时使用。

resultMap:外部resultMap的命名引用。结果集的映射是MyBatis最强大的特性,许多复杂映射的情形都能通过resultMap迎刃而解。返回时可以使用resultMap 或resultType,但不能同时使用。

flushCache:如果设置为true,则任何时候只要语句被调用,都会导致本地缓存和二级缓存都被清空,默认值为false。

useCache:如果设置为true,将会导致本条语句的结果被二级缓存,在select标签当中默认值为true。

timeout:驱动程序等待数据库返回请求结果的等待秒数,超时则抛出异常。默认值为unset (依赖驱动)。

fetchSize:驱动程序每次批量返回的结果行数。默认值为unset (依赖驱动)。

statementType:值为STATEMENTPREPAREDCALLABLE。这会让MyBatis分别使用JDBC中的StatementPreparedStatementCallableStatement,默认值为PREPARED

resultSetType:结果集的类型,值为FORWARD_ONLYSCROLL_SENSITIVESCROLLINSENSITIVE,默认值为unset (依赖驱动)。

databaseId:如果配置了databaseIdProvider,MyBatis会加载所有的不带databaseId或匹配当前databaseId的语句。如果带或者不带的语句都有,则不带的会被忽略。

resultOrdered:这个设置仅针对嵌套结果 select 语句适用:如果为 true,就是假设包含了嵌套结果集或是分组了,这样的话当返回一个主结果行的时候,就不会发生有对前面结果集的引用的情况。这就使得在获取嵌套的结果集的时候不至于导致内存不够用。默认值:false。

resultSets:这个设置仅对多结果集的情况适用,它将列出语句执行后返回的结果集并给每个结果集一个名称,名称是逗号分隔的。