04.MyBatis输入参数配置、输出结果的封装

本文详细介绍了MyBatis中`parameterType`和`resultType`的使用方法,包括基本类型、引用类型、实体类类型的配置,以及如何处理属性名与数据库列名不一致的情况。通过示例展示了如何创建查询包装类、使用`resultMap`来映射复杂查询结果,以实现更灵活的数据封装和查询操作。
摘要由CSDN通过智能技术生成

输入参数配置

parameterType 配置参数

  • 使用说明:
      parameterType的取值可以是基本类型引用类型(String)实体类类型包装类
  • 注意事项:
    1. 基本类型和String可以直接写类型名称,也可以使用包名.类名的方式,例如:java.lang.String
    2. 实体类类型,如果不起别名(在后面有介绍)就只能写全限定类名
  • MyBatis支持的默认别名
    在这里插入图片描述

传递 pojo 包装对象

  • 开发中通过 pojo 传递查询条件,查询条件是综合的查询条件,不仅包括用户查询条件还包括其它的查询条件(比如将用户购买商品信息也作为查询条件),这时可以使用包装对象传递输入参数。 (就是有多个参数作为查询条件,当这几个参数又不在同一个实体类里,解决方法就是将多个实体类封装到一个类中)
  • 演示
	// 接口方法
	List<User> findByVo(QueryVo vo); 
// 包装类
public class QueryVo implements Serializable { 
	private User user; 
	public User getUser() { 
		return user; 
	}
	public void setUser(User user) { 
		this.user = user; 
	}
}
	<!--xml配置文件-->
    <select id="findByVo" parameterType="com.zsc.domain.QueryVo" resultType="com.zsc.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 = userDao.findByVo(vo);
        for (User u : users) {
            System.out.println(u);
        }
    }

输出结果封装

resultType 配置结果类型

  • 使用说明:
      resultType 属性可以指定结果集的类型,它支持基本类型实体类类型,和 parameterType 一样,如果不起别名(在后面有介绍)就只能写全限定类名
      实体类中的属性名称必须和查询语句中的列名保持一致,否则无法实现封装
  • 基本类型示例
	// 接口方法
	int findTotal(); 
	<!--xml配置文件-->
	<!--查询总行数-->
	<select id="findTotal" resultType="int"> 
		select count(*) from user; 
	</select>
  • 实体类类型示例
	// 接口方法
	List<User> findAll(); 
	<!--xml配置文件-->
	<select id="findAll" resultType="com.zsc.domain.User"> 
	 	select * from user
	</select>
  • 特殊情况示例
    修改User实体类的属性名称
	private Integer userId;  	
	// 这个可以赋值,因为Windows下的mysql不区分大小写
	private String userName;  
	private Date userBirthday;  
	private String userSex; 
	private String userAddress;

  当实体类的属性名与数据库表名不一样的时候,这样就无法对查询的结果进行封装,第一种解决方法就是sql语句写成别名的形式,第二种方法下面介绍

resultMap 结果类型

  • 作用:
      resultMap 标签可以建立查询的列名和实体类的属性名称不一致时建立对应关系。从而实现封装
  • 说明:
      在 select 标签中使用 resultMap 属性指定引用即可。同时 resultMap 可以实现将查询结果映射为复杂类 型的 pojo,比如在查询结果映射对象中包括 pojo 和 list 实现一对一查询和一对多查询
  • 定义 resultMap
	<!--
		type属性:指定实体类的全限定类名 
		id 属性:给定一个唯一标识,是给查询 select 标签引用用的
	-->
    <resultMap type="com.com.domain.User" id="userMap">
    	<!--
			id 标签:用于指定主键字段
			result 标签:用于指定非主键字段
			column 属性:用于指定数据库列名 
			property 属性:用于指定实体类属性名称 
		-->
        <id column="id" property="userId"/>
        <result column="username" property="userName"/>
        <result column="sex" property="userSex"/>
        <result column="address" property="userAddress"/>
        <result column="birthday" property="userBirthday"/>
    </resultMap>

	<!--将resultType改为resultMap,并把< resultMap >标签的 id 填入
    <select id="findAll" resultMap="userMap">
        select * from user
    </select>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值