MyBatis的参数深入

parameterType配置参数

给Sql语句传参数使用parameterType属性进行设置.该属性可以读取基本数据类型也可以读取引用类型,还可以是POJO类,同时也可以使用实体类的包装类.

注意:

基本数据类型和String在传参数的时候可以直接写类型名称,也可以使用包名,类名的方式.

例如:

String–>java.lang.String

为什么在传入参数的时候可以直接写类型的名称呢?因为MyBatis在加载时已经把常用的数据类型注册了别名,从而我们可以不用写包名,但是如果传入的参数是实体类的话,必须写实体类的全限定类名,因为我们的实体类名没有注册别名.

Mybatis内置别名

POJO

Plain Old Java Object普通旧Java对象(POJO)是一个普通的Java对象,不受任何特殊限制的约束,也不需要任何类路径.

POJO的含义:

有private的参数作为对象的属性,然后针对每一个参数定义get和set方法访问的接口。没有从任何类继承、也没有实现任何接口,更没有被其它框架侵入的java对象。

public class QueryVo implements Serializable {
    private User user;

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
}

传递POJO包装对象

使用包装对象传递输入参数.

根据用户名查询用户信息,查询条件放到 QueryVo的 user属性中.

POJO类

public class QueryVo implements Serializable {
    private User user;

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
}

编写持久层接口

//根据QueryVO查询中的条件查询用户
List<User> findUserByVo(QueryVo vo);

持久层映射文件的配置

<!--根据QueryVO的条件查询用户
#{user.username}:OGNL表达式
    user:QueryVo中的属性,也就是User对象
    username:user对象中的属性
-->
<select id="findUserByVo" parameterType="domain.QueryVo" resultType="domain.User">
    select * from user where username like #{user.username};
</select>

测试查询

//根据QueryVO查询中的条件查询用户
@Test
public void testFindByQueryVo() {
    QueryVo queryVo = new QueryVo();
    User user = new User();
    user.setUsername("小%");
    queryVo.setUser(user);
    List<User> users = userDao.findUserByVo(queryVo);
    for (User u :
            users
    ) {
        System.out.println(u);
    }
}

 上一篇
MyBatis的输出结果封装 MyBatis的输出结果封装
resultType配置结果类型resultType是用来指定结果集的类型,它支持基本类型和实体类类型.和parameterType一样,如果注册了类型的别名,可以直接使用别名,没有注册过别名必须使用类的全限定名.同时当是实体类名称时,实体
2019-05-16
下一篇 
MyBatis基于代理DAO实现CRUD操作 MyBatis基于代理DAO实现CRUD操作
搭建MyBatis环境 创建Maven工程 导入相关坐标 MyBatis(3.4.5) Junit(4.10) log4j(1.2.12) Mysql(8.0.15) 编写必要的代码Dao和Domain 编写映射配置文件 配置SqlMa
2019-05-16
  目录