Mybatis
1. 参数深入
1.1 parameterType 配置参数
使用标签的 parameterType
属性来设定。该属性的取值可以是基本类型,引用类型(例如:String
类型),还可以是实体类类型(POJO
类)。同时也可以使用实体类的包装类。
Tips:基 本 类 型 和
String
可 以 直 接 写 类 型 名 称 , 也 可 以 使 用 包 名 . 类 名 的 方 式 , 例 如 :java.lang.String
。
实体类类型,目前只能使用全限定类名。
mybatis 的官方文档的说明:
Alias | Mapped Type |
---|---|
_byte | byte |
_long | long |
_short | short |
_int | int |
_integer | int |
_double | double |
_float | float |
_boolean | boolean |
string | String |
byte | Byte |
long | Long |
short | Short |
int | Integer |
integer | Integer |
double | Double |
float | Float |
boolean | Boolean |
date | Date |
decimal | BigDecimal |
bigdecimal | BigDecimal |
object | Object |
map | Map |
hashmap | HashMap |
list | List |
arraylist | ArrayList |
collection | Collection |
这些都是支持的默认别名。可以参考 TypeAliasRegistery.java
的源码。
1.2 传递pojo包装对象
开发中通过
pojo
传递查询条件 ,查询条件是综合的查询条件,不仅包括用户查询条件还包括其它的查询条件(比如将用户购买商品信息也作为查询件),这时可以使用包装对象传递输入参数。
Pojo
类中包含pojo
。
需求:根据用户名查询用户信息,查询条件放到QueryVo
的user
属性中。
1.2.1 编写QueryVo
package com.spg.entity;
/**
* 查询条件对象
*/
public class QueryVo {
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
1.2.2 编写持久层接口
/**
* 根据 QueryVo 中的条件查询用户信息
* @param vo
* @return
*/
List<User> findByQueryVo(QueryVo vo);
1.2.3 编写持久层接口的映射文件
<!-- 根据用户名称模糊查询,参数变成一个 QueryVo 对象了 -->
<select id="findByQueryVo" parameterType="com.spg.entity.QueryVo" resultMap="userMap">
select * from user where username like #{user.userName}
</select>
1.2.4 测试包装类作为参数
@Test
public void findByQueryVo() {
// 6.执行操作
QueryVo vo = new QueryVo();
User user = new User();
user.setUserName("%王%");
vo.setUser(user);
List<User> userList = userDao.findByQueryVo(vo);
for (User user1 : userList) {
System.out.println(user1);
}
}