parameterType 配置参数
使用说明
使用SQL 语句传参,使用标签的 parameterType 属性来设定。该属性的取值可以
是基本类型,引用类型(例如:String 类型),还可以是实体类类型(POJO 类)。同时也可以使用实体类的包装类,本章节将介绍如何使用实体类的包装类作为参数传递。
注意事项
基 本 类 型 和 String 我 们 可 以 直 接 写 类 型 名 称 , 也 可 以 使 用 包 名 . 类 名 的 方 式 ,例 如 :java.lang.String。实体类类型,目前我们只能使用全限定类名。
究其原因,是 mybaits 在加载时已经把常用的数据类型注册了别名,从而我们在使用时可以不写包名,而我们的是实体类并没有注册别名,所以必须写全限定类名。在今天课程的最后一个章节中将讲解如何注册实体类的别名。
传递 pojo 包装对象(使用QueryVo作为查询条件)
开发中通过 pojo 传递查询条件 ,查询条件是综合的查询条件,不仅包括用户查询条件还包括其它的查询条件(比如将用户购买商品信息也作为查询条件),这时可以使用包装对象传递输入参数。
Pojo 类中包含 pojo。
需求:根据用户名查询用户信息,查询条件放到 QueryVo 的 user 属性中。
编写 QueryVo
QueryVo
package com.keafmd.domain;
/**
* Keafmd
*
* @ClassName: QueryVo
* @Description:
* @author: 牛哄哄的柯南
* @date: 2021-02-08 21:08
*/
public class QueryVo {
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
编写持久层接口
IUserDao:
package com.keafmd.dao;
import com.keafmd.domain.QueryVo;
import com.keafmd.domain.User;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
* Keafmd
*
* @ClassName: IUserDao
* @Description: 用户的持久层接口
* @author: 牛哄哄的柯南
* @date: 2021-02-06 19:29
*/
public interface IUserDao {
/**
* 根据QueryVo中的条件查询用户
* @param vo
* @return
*/
List<User> findUserByVo(QueryVo vo);
}
持久层接口的映射文件
IUserDao.xml:
<?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.keafmd.dao.IUserDao">
<!--根据QueryVo的条件查询用户-->
<select id="findUserByVo" parameterType="com.keafmd.domain.QueryVo" resultType="com.keafmd.domain.User">
select * from user where username like #{user.username}
</select>
</mapper>
测试包装类作为参数
MybatisTest:
package com.keafmd.test;
import com.keafmd.dao.IUserDao;
import com.keafmd.domain.QueryVo;
import com.keafmd.domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
/**
* Keafmd
*
* @ClassName: MybatisTest
* @Description: 测试类,测试crud操作
* @author: 牛哄哄的柯南
* @date: 2021-02-08 15:24
*/
public class MybatisTest {
private InputStream in;
private SqlSession sqlsession;
private IUserDao userDao;
@Before // 用于在测试方法执行前执行
public void init()throws Exception{
//1.读取配置文件,生成字节输入流
in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
//3.使用工厂生产SqlSession对象
sqlsession = factory.openSession();
//4.使用SqlSession创建Dao接口的代理对象
userDao = sqlsession.getMapper(IUserDao.class);
}
@After // 用于在测试方法执行后执行
public void destory() throws Exception{
//提交事务
sqlsession.commit();
//6.释放资源
sqlsession.close();
in.close();
}
/**
* 测试使用QueryVo作为查询条件
* @throws Exception
*/
@Test
public void testFindUserByVo() throws Exception {
QueryVo vo = new QueryVo();
User user = new User();
user.setUsername("%王%");
vo.setUser(user);
//5.执行使用QueryVo作为查询条件
List<User> users = userDao.findUserByVo(vo);
for (User u : users) {
System.out.println(u);
}
}
}
输出结果:
以上就是Mybatis的参数深入的全部内容。
看完如果对你有帮助,感谢点赞支持!
如果你是电脑端的话,看到右下角的 “一键三连” 了吗,没错点它[哈哈]
加油!
共同努力!
Keafmd