1、MyBatis的参数深入
parameterType
使用说明
parameterType属性设定sql语句传参。该属性的取值可以是基本类型,引用类型,实体类类型。
注意事项
- 基本类型和String可以直接写类型名称,也可以使用包名.类名的方式,如:java.lang.String。
- 实体类类型,只能使用全限制类名
原因: mybatis在加载时已经把常用的数据类型注册了别名,从而我们在使用的时候可以不写包名。而我们的是实体类并没有注册别名,所以必须写全限定类名。
传递pojo包对象
- 编写QueryVo
package com.oceanstar.domain;
import com.oceanstar.domain.User;
import java.io.Serializable;
/*
* 查询条件对象
* */
public class QueryVo implements Serializable {
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
- 编写持久层接口
public interface IUserDao {
/*
* 根据QueryVo中的条件查询用户
* @param vo
* */
List<User>findByVo(QueryVo vo);
}
- 持久层接口的映射文件
<!--配置findByVo-->
<select id="findByVo" parameterType="com.oceanstar.domain.QueryVo"
resultType="com.oceanstar.domain.User">
select * from user where username like #{user.username};
</select>
- 编写测试类
@Test
public void testFindByQueryVo() {
QueryVo vo = new QueryVo();
User user = new User();
user.setUsername("%王%");
vo.setUser(user);
List<User> users = iUserDao.findByVo(vo);
for (User u : users){
System.out.println(u);
}
}
2、MyBatis的参数深入
resultType配置结果类型
- resultType属性可以指定结果集的类型,它支持基本类型和实体类类型,
-
和 parameterType 一样,如果注册过类型别名的,可以直接使用别名。没有注册过的必须
使用全限定类名。例如:我们的实体类此时必须是全限定类名 -
实体类中的属性名称必须和查询语句中的类名保持一致,否则无法实现封装。
resultMao结果类型
resultMap可以建立查询的类名与实体类的属性名称不一致的建立对应关系,从而实现封装。