MyBatis resultMap元素详解 |
您所在的位置:网站首页 › resultmap标签下的id标签 › MyBatis resultMap元素详解 |
目录 一、resultType和resultMap 二、resultMap标签解析及resultMap创建举例 元素标签详解 resultMap创建举例 resultMap如何将结果映射到结果集 如何使用association元素嵌套结果映射(一般使用一对一查询) 如何使用collection元素嵌套结果映射(一般使用一对多查询) 三、测试代码举例(包含一对一关联查询) 先在Mapper文件中,配置基本的sql语句 配置resultMap标签,映射不同的字段和属性名 使用resultMap进行关联查询 一对一查询 一、resultType和resultMapresultType resultType可以把查询结果封装到pojo类型中,但必须pojo类的属性名和查询到的数据库表的字段名一致。 如果sql查询到的字段与pojo的属性名不一致,则需要使用resultMap将字段名和属性名对应起来,进行手动配置封装,将结果映射到pojo中 resultMap resultMap可以实现将查询结果映射为复杂类型的pojo,比如在查询结果映射对象中包括pojo和list实现一对一查询和一对多查询。 二、resultMap标签解析及resultMap创建举例 元素标签详解 resultMap元素属性 id:映射规则集的唯一标识,可以被select元素的resultMap属性应用type:映射的结果类型,这里指定封装成userList实例 resultMap元素包含以下子元素 id:指定和数据表主键字段对应的标识属性。设置此项可以提升MyBatis框架的性能,特别是应用缓存和嵌套结果映射的时候。result:指定结果集字段和实体类属性的映射关系。association:映射到JavaBean某个“复杂类型”属性,比如JavaBean类collection:映射到JavaBean某个“复杂类型”属性,比如集合 resultMap创建举例 resultMap如何将结果映射到结果集 如何使用association元素嵌套结果映射(一般使用一对一查询) /** * 对用户和角色进行联表查询 * @return */ List findAllUserAndRole(); select user.*,role.id as roleId,role.roleName from smbms_user user inner join smbms_role role on user.userRole = role.id 如何使用collection元素嵌套结果映射(一般使用一对多查询) /** * 根据用户ID查询所有的地址信息 * @return */ List findAddressById(Long id); select user.*,address.id as addressId,address.addressDesc from smbms_user user inner join smbms_address address on user.id = address.userId where user.id = #{id} 三、测试代码举例(包含一对一关联查询) 先在Mapper文件中,配置基本的sql语句 SELECT id, user_id, number, createtime, note FROM `order` 配置resultMap标签,映射不同的字段和属性名结果就可以封装到pojo类型中 使用resultMap进行关联查询 一对一查询一对一数据模型:订单用户 一个订单信息只会是一个人下的订单,所以从查询订单信息出发关联查询用户信息为一对一查询。如果从用户信息出发查询用户下的订单信息则为一对多查询,因为一个用户可以下多个订单。 改造pojo类 在订单类中添加User属性,User属性是一个引用类型,用于存储关联查询的用户信息,因为关联关系是一对一,所以只需要添加单个属性即可 配置Mapper.xml配置文件 OrderMapper.xml 先使用id和result属性,映射order类的结果集,然后在使用association映射关联对象User的结果集 SELECT o.id, o.user_id, o.number, o.createtime, o.note, u.username, u.address FROM `order` o LEFT JOIN `user` u ON o.user_id = u.id测试 @Testpublic void testQueryOrderUserResultMap() { // mybatis和spring整合,整合之后,交给spring管理 SqlSession sqlSession = this.sqlSessionFactory.openSession(); // 创建Mapper接口的动态代理对象,整合之后,交给spring管理 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); // 使用userMapper执行根据条件查询用户,结果封装到Order类中 List list = userMapper.queryOrderUserResultMap(); for (Order o : list) { System.out.println(o); } // mybatis和spring整合,整合之后,交给spring管理 sqlSession.close();}结果
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |