一、概要
mybatis查询主要通过映射文件中的 <select>
元素用于映射 SQL 的 select 语句
二、属性
常用属性
属性 | 说明 |
---|---|
id | id是命名空间中的唯一标识符,可被用来代表这条语句。 对应Mapper接口里的方法的名称,大小写敏感 |
parameterType | parameterType (可选配置, 默认为mybatis自动选择处理) 说明 将要传入语句的参数的完全限定类名或别名, 如果不配置,会自动处理 parameterType 主要指定参数类型,可以是基本类型,也可以是复杂类型(如对象) |
resultType | resultType 与 resultMap 二选一配置 resultType用以指定返回类型,指定的类型可以是基本类型,可以是java容器,也可以是javabean |
resultMap | resultType 与 resultMap 二选一配置 说明 resultMap用于引用我们通过 resultMap标签定义的映射类型,这也是mybatis组件高级复杂映射的关键 |
其它属性
属性 | 说明 |
---|---|
flushCache | 将其设置为 true,表示语句一旦执行,都会导致本地缓存和二级缓存都会被清空,默认值:false |
useCache | 如果为true,结果将在二级缓存中缓存。select语句中默认为true |
timeout | 设置超时,若超时则抛出异常。默认值为 unset(依赖驱动) |
fetchSize | 这是尝试影响驱动程序每次批量返回的结果行数和这个设置值相等。默认值为 unset(依赖驱动) |
statementType | 设置MyBatis 使用哪个JDBC的 Statement。可选值: 1.STATEMENT,2.PREPARED 或 3.CALLABLE 的一个。默认值:PREPARED |
resultSetType | 可选值: 1.FORWARD_ONLY,2.SCROLL_SENSITIVE,3.SCROLL_INSENSITIVE 中的一个,默认值为 unset (依赖驱动) |
resultSetType | 针对 JDBC 的 ResultSet 接口,可选值: 1.FORWARD_ONLY,2.SCROLL_SENSITIVE, 3.SCROLL_INSENSITIVE 中的一个,默认值为 unset (依赖驱动) |
resultOrdered | 多结果集时使用。它将列出语句执行后返回的结果集并每个结果集给一个名称,名称是逗号分隔的 |
完整模板
<select
id=""
parameterType=""
resultType=""
resultMap=""
flushCache="false"
useCache="true"
timeout="20"
fetchSize="100"
statementType="PREPARED"
resultSetType="FORWARD_ONLY"
resultOrdered="true"
resultSets="">
</select>
三、栗子
public interface SelectMapper {
List<User> findAll();
User findById(Integer uid);
}
public class User implements Serializable {
private Integer uid;
private String name;
private String password;
private String phone;
private String email;
private Date joinDate;
private Integer status;
}
查询所有
<?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="com.vip.mybatis.mapper.SelectMapper">
<!-- 1. resultType 结果集自动映射到 User 属性 注意: 必须属性和列名保持一致(通过后面的学习解决)-->
<select id="findAll" resultType="com.vip.mybatis.entity.User">
<!-- resultType 返回集合User对象 -->
SELECT * FROM user
</select>
</mapper>
过滤行
<?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="com.vip.mybatis.mapper.SelectMapper">
<!--
1. parameterType="integer" 可选,会自动映射,
2. resultType="com.vip.mybatis.entity.User" 返回类型唯一的对象类型,多个报错
-->
<select id="findById" parameterType="integer" resultType="com.vip.mybatis.entity.User">
<!--3. uid 数据库的列名 -->
<!--4. #{uid} 对应接口中的参数 -->
SELECT * FROM user
WHERE uid=#{uid} AND status = 1
</select>
</mapper>
过滤列
<?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="com.vip.mybatis.mapper.SelectMapper">
<select id="findById" parameterType="integer" resultType="com.vip.mybatis.entity.User">
SELECT uid, name, password, phone, email, join_date FROM user
WHERE uid=#{uid} AND status = 1
</select>
</mapper>