MyBatis中使用实体类的包装对象作为查询条件
# OGNL表达式
接下来,我们来学习 OGNL表达式 。内容如下:
回顾一下:
parameterType的功能:
存放基本数据类型
存放pojo(java.bean中的实体类型)
------
OGNL 表达式:
概述:全称(Object Graphic Navigation Language)对象 图 导航 语言
作用:通过对象的取值方式来获取数据,在写法上把get给省略了。
比如:我们获取用户名称的时候
类中的写法:user.getUsername();
OGNL表达式写法:user.username;
------
所以 为啥就是mybatis中为啥能够直接写username,而不用写user呢?
原因就是在parameterType中已经提供了属性所属的类,所以此时不需要写对象名。
# 传递pojo(实体类)包装对象
什么是pojo,pojo就是实体类的意思。
在实际开发过程中,查询条件是综合的查询条件,不仅包括 用户查询条件 还包括其它的查询条件(比如用户购买的商品信息作为查询条件)。
思考:如何将 对象 作为查询参数,进行数据查询呢?
这里就需要使用到 Pojo 类中包含 pojo 的技术,来实现。
# 需求:根据用户名查询用户信息,查询条件放到QueryVo的user属性中。
在domian --> QueryVo.java类
代码如下:
-----
public class QueryVo {
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
-----
IUserDao接口:
-----
/**
* 根据queryVo中的条件查询用户
* @param vo
* @return
*/
List<User> findUserByVo(QueryVo vo);
-----
IUserDao.xml文件配置如下:
-----
<!--根据queryVo条件查询用户-->
<select id="findUserByVo" parameterType="com.abc2.domain.QueryVo" resultType="com.abc2.domain.User">
select * from user where username like #{user.username}
</select>
-----
测试类:
-----
@Test
public void findUsersByVo() {
QueryVo queryVo = new QueryVo();
User user = new User();
user.setUsername("%王%");
queryVo.setUser(user);
List<User> users = userDao.findUserByVo(queryVo);
System.out.println("-------");
for (User item : users) {
System.out.println(item);
}
System.out.println("-------");
}
-----