myBatis里表与表之间的关系 多对一时候

<帖子N>      对      <分类1>

1.所实现的映射关系是:在帖子分类的实体对象里包含的是帖子的实体对象的集合。

1)首先建立实体关系的映射,那么就需要在分类的实体里加入帖子的集合。代码如下:

package com.model;

import java.util.List;
//分类
public class Sort {
private Integer sortId;//分类编号
private List<Theme> themes;


public List<Theme> getThemes() {
return themes;
}
public void setThemes(List<Theme> themes) {
this.themes = themes;
}
public Integer getSortId() {
return sortId;
}
public void setSortId(Integer sortId) {
this.sortId = sortId;
}
public String getSortName() {
return sortName;
}
public void setSortName(String sortName) {
this.sortName = sortName;
}
private String sortName;//分类名称

}

2)创建一个TypeInfoMapper的实现接口:

package com.dao.imp;


import com.dao.IDaoBBS;
import com.model.Sort;


public interface SortMapper extends IDaoBBS<Sort>{


}

3)编写相应的sql配置文件:SortMapper.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.dao.imp.SortMapper">
<select id="getModel" resultMap="SortResult" parameterType="java.lang.Integer">
    select s.*,h.*,u.*
    from Sort s inner join Theme h
         on s.sortId=h.sortId
         Left join userInfo u
         on h.userId=u.userId
    where s.sortId=#{id}
</select>
<resultMap type="com.model.Sort" id="SortResult">
    <result column="sortId" property="sortId"></result>
    <result column="sortName" property="sortName"></result>
    <collection property="themes" ofType="com.model.Theme" resultMap="com.dao.imp.ThemeMapper.ThemeResult">
    
    </collection>
</resultMap>

</mapper>

注意:collection表示的是集合的数据。property表示所对应的集合的属性名。

      ofType表示集合里的数据的类型。resultMap表示的是调用的是其它的结果映射集。

      由于该结果映射集不在同一个文件下,那么就需要引入其它文件下的结果集。

      其它结果集的命名空间+结果集的名称。比如:

com.dao.imp.ThemeMapper.ThemeResult

测试:

public static void main(String[] args) {
// TODO Auto-generated method stub
String resource = "mybatis-config.xml";
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream(resource);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();

SortMapper sortMapper=sqlSession.getMapper(SortMapper.class);
Sort s= sortMapper.getModel(1);
System.out.println("分类名称:"+s.getSortName());
List<Theme> list= s.getThemes();
for(Theme i:list){
System.out.println("帖子名称:"+i.getThemeName());
System.out.println("用户名:"+i.getThemeUserInfo().getUserName());
}


 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis是一种Java持久化框架,它提供了一种简单而灵活的方式来访问数据库。在MyBatis中,通过配置XML文件和Java注解,可以实现数据库之间的关联查询,包括一对多关系。 在MyBatis中实现一对多关系的连查询,可以通过两种方式来实现:嵌套查询和嵌套结果映射。 1. 嵌套查询: 在嵌套查询中,首先查询主的数据,然后根据主的某个字段值作为条件,再次查询关联的数据。这样可以通过两次查询来获取一对多关系的数据。 示例代码如下: ```xml <select id="getOrderWithItems" resultMap="orderResultMap"> SELECT * FROM orders </select> <resultMap id="orderResultMap" type="Order"> <id property="id" column="order_id"/> <result property="orderNo" column="order_no"/> <collection property="items" ofType="Item"> <id property="id" column="item_id"/> <result property="name" column="item_name"/> </collection> </resultMap> ``` 2. 嵌套结果映射: 在嵌套结果映射中,可以通过一次查询将主和关联的数据一起查询出来,并通过结果映射将其组装成一对多的数据结构。 示例代码如下: ```xml <select id="getOrderWithItems" resultMap="orderResultMap"> SELECT o.order_id, o.order_no, i.item_id, i.item_name FROM orders o LEFT JOIN items i ON o.order_id = i.order_id </select> <resultMap id="orderResultMap" type="Order"> <id property="id" column="order_id"/> <result property="orderNo" column="order_no"/> <collection property="items" ofType="Item"> <id property="id" column="item_id"/> <result property="name" column="item_name"/> </collection> </resultMap> ``` 以上是使用MyBatis实现一对多关系的连查询的两种方式。通过配置合适的SQL语句和结果映射,可以轻松地获取一对多关系的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值