映射文件之输出参数(二)

二、输出映射

1、resultType
(1)使用方法

使用resultType进行结果映射时,查询的列名和映射的pojo属性名完全一致,该列才能映射成功。
如果查询的列名和映射的pojo属性名全部不一致,那么映射的对象为空,不会创建pojo对象;
如果查询的列名和映射的pojo属性名有一个一致,那么映射的对象不为空,会创建pojo对象,但是只有映射正确的那一个属性才有值。
(2)输出简单类型

注意,对简单类型的结果映射也是有要求的,查询的列必须是一列,才能映射为简单类型。
当输出结果只有一列时,可以使用ResultType指定简单类型作为输出结果类型。

2.1 需求
综合查询用户总数,需要传入查询条件复杂,比如(用户信息、订单信息、商品信息)。

2.2 Mapper映射文件
<!-- 综合查询用户信息总数,需要传入查询条件复杂,比如(用户信息、订单信息、商品信息) -->
<select id= "findUsersCount" parameterType= "UserQueryVO"
  resultType= "int" >
  SELECT count( 1 ) FROM USER WHERE sex = #{userExt.sex} AND username LIKE '%${userExt.username}%'
</select>

2.3 Mapper接口
//综合查询用户信息总数。学习:resultType输出简单类型
public int findUsersCount(UserQueryVO vo);
2.4测试代码
@Test
public void testFindUsersCount() {
  // 创建SqlSession
 SqlSession sqlSession = sqlSessionFactory.openSession();
  // 通过SqlSession,获取mapper接口的动态代理对象
 UserMapper userMapper = sqlSession.getMapper(UserMapper. class );
  //构造userQueryVO对象
 UserQueryVO userQueryVO = new UserQueryVO();
  // 构造UserExt对象
 UserExt userExt = new UserExt();
 userExt.setSex( "1" );
 userExt.setUsername( "小明" );
 userQueryVO.setUserExt(userExt);
  int count = mapper.findUsersCount(userQueryVO);
 System.out.println(count); // 关闭SqlSession
 sqlSession.close();
}

(3)输出POjo单个对象和列表

注意: 输出单个pojo对象和pojo列表(盛放pojo对象)时,mapper映射文件中的resultType的类型是一样的,mapper接口的方法返回值不同。



3.1Mapper映射文件
<select id= "findUsersByName" parameterType= "java.lang.String" resultType= "cn.itcast.mybatis.po.User" >
  SELECT * FROM USER WHERE username LIKE '%${value}%'
</select>
3.2Mapper接口
1、输出单个pojo对象
//根据用户名称来模糊查询用户信息
  public User findUsersByName(String username);
2、输出pojo列表
//根据用户名称来模糊查询用户信息列表
  public List<User> findUsersByName(String username);


总结:同样的mapper映射文件,返回单个对象和对象列表时,mapper接口在生成动态代理的时候,
会根据返回值的类型,决定调用selectOne方法还是selectList方法。
2、resultMap
resultMap可以进行高级结果映射(一对一、一对多映射)。
(1)使用方法
如果查询出来的列名和属性名不一致,通过定义一个resultMap将列名和pojo属性名之间作一个映射关系。
1、  定义resultMap
2、  使用resultMap作为statement的输出映射类型。
(2)需求
把下面SQL的输出结果集进行映射
SELECT id id_,username username_,sex sex_FROM USER WHERE id = 1
(3)Mapper映射文件
定义resultMap:
<!-- 定义resultMap -->
<!--
 [id]:定义resultMap的唯一标识
 [type]:定义该resultMap最终映射的pojo对象
 [id标签]:映射结果集的唯一标识列,如果是多个字段联合唯一,则定义多个id标签
 [result标签]:映射结果集的普通列
 [column]:SQL查询的列名,如果列有别名,则该处填写别名
 [property]:pojo对象的属性名
-->
<resultMap type= "user" id= "userResultMap" >
 <id column= "id_" property= "id" />
 <result column= "username_" property= "username" />
 <result column= "sex_" property= "sex" />
</resultMap>
定义statement:
<!-- 根据ID查询用户信息(学习resultMap) -->
<select id= "findUserByIdResultMap" parameterType= "int" resultMap= "userResultMap" >
  SELECT id id_,username username_,sex sex_ FROM USER WHERE id = #{id}
</select>
(4)Mapper接口定义   
//根据ID查询用户信息(学习resultMap)
  public User findUserByIdResultMap( int id);<strong>
</strong>
定义Statement使用resultMap映射结果集时,Mapper接口定义方法的返回值类型为mapper映射文件中resultMap的type类型。
(5)测试代码
@Test
public void findUserByIdResultMapTest() {
  // 创建SqlSession
 SqlSession sqlSession = sqlSessionFactory.openSession();
  // 通过SqlSession,获取mapper接口的动态代理对象
 UserMapper userMapper = sqlSession.getMapper(UserMapper. class );
  // 调用mapper对象的方法
 User user = userMapper.findUserByIdResultMap( 1 );
 System.out.println(user);
  // 关闭SqlSession
 sqlSession.close();
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis是一种Java持久化框架,它提供了一种将数据库查询结果映射到Java对象的方式,以及将Java对象的属性映射到数据库操作的方式。在MyBatis中,输入输出映射主要包括两个方面:参数映射和结果映射。 1. 参数映射:在执行数据库操作时,我们需要将Java对象作为参数传递给SQL语句。参数映射可以通过注解或XML配置来实现。常见的参数映射方式有: - 注解方式:使用`@Param`注解将参数直接映射到SQL语句中的占位符。例如: ```java @Select("SELECT * FROM users WHERE id = #{id}") User getUserById(@Param("id") int id); ``` - XML配置方式:在XML配置文件中定义参数映射。例如: ```xml <select id="getUserById" parameterType="int" resultType="com.example.User"> SELECT * FROM users WHERE id = #{id} </select> ``` 2. 结果映射:将数据库查询结果映射到Java对象。结果映射可以通过注解或XML配置来实现。常见的结果映射方式有: - 注解方式:使用`@Result`注解将数据库字段与Java对象属性进行映射。例如: ```java @Results({ @Result(column = "id", property = "id"), @Result(column = "username", property = "username"), @Result(column = "email", property = "email") }) @Select("SELECT * FROM users") List<User> getAllUsers(); ``` - XML配置方式:在XML配置文件中定义结果映射。例如: ```xml <resultMap id="userMap" type="com.example.User"> <id column="id" property="id"/> <result column="username" property="username"/> <result column="email" property="email"/> </resultMap> <select id="getAllUsers" resultMap="userMap"> SELECT * FROM users </select> ``` 通过参数映射和结果映射,MyBatis可以方便地将Java对象与数据库进行交互,并将查询结果转换为Java对象。这样,我们就可以更方便地进行数据库操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值