mybatis下单表关联一对多查询

先说下实体类的配置,给个List或者Set
    private Integer id;

    private String navName;//名称

    private String navContent;//内容

    private String url;//链接地址

    private String navLevel;//导航栏级别

    private String navPname;//父级导航名称

    private String navPid;//父级导航id

    private String navIsdel;//0正常

    private String navSequence;//导航排序
    
    private List<Navigation> nav;

接下来是mapper.xml,注意,因为是单表,所以字段名是一致的,建议使用别名查询,不然会出问题的。

 <resultMap type="com.jjy.pojo.Navigation" id="test" extends="BaseResultMap">
    	<collection property="nav" ofType="com.jjy.pojo.Navigation">
	       <result column="bname" property="navName" jdbcType="VARCHAR" />
	       <result column="burl" property="url" jdbcType="VARCHAR" />
    	</collection>
    
    </resultMap>

然后是sql语句,单表关联查询的话尽量选择做左联接查询,效率要比内连接高一些

  <select id="test"  resultMap="test">
    
    	 select
    a.id,a.nav_name, a.nav_content, a.url, a.nav_level, a.nav_pname, a.nav_pid, a.nav_isdel, a.nav_sequence, b.nav_name bname
    from navigation a left join navigation b on b.nav_pid = a.id where a.nav_pid=0 
  
    </select>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis中实现自关联一对多查询,可以使用嵌套查询语句(Nested Select),具体步骤如下: 1. 在MyBatis的Mapper XML文件中,先定义一个查询语句,用来查询所有父节点信息,如下所示: ``` <select id="getParents" resultType="Parent"> SELECT * FROM parent WHERE parent_id = #{parentId} </select> ``` 2. 接着在同一个Mapper XML文件中,定义一个嵌套查询语句,用来查询某个父节点下的所有子节点信息,如下所示: ``` <select id="getChildren" resultType="Child"> SELECT * FROM child WHERE parent_id = #{parentId} </select> ``` 3. 最后,在Mapper XML文件中,将两个查询语句组合在一起,形成一个完整的查询语句,如下所示: ``` <select id="getParentsWithChildren" resultMap="ParentWithChildren"> SELECT * FROM parent WHERE parent_id = #{parentId} <collection property="children" resultMap="ChildResultMap"> SELECT * FROM child WHERE parent_id = #{parentId} </collection> </select> ``` 其中,`resultMap`属性指定了查询结果映射的对象类型,`property`属性指定了父节点对象中的子节点集合属性名,`resultMap`属性指定了子节点对象类型的结果映射配置。 4. 最后,在Java应用程序中,通过MyBatis的`SqlSession`对象执行查询语句,获取查询结果,如下所示: ``` SqlSession sqlSession = sqlSessionFactory.openSession(); try { Mapper mapper = sqlSession.getMapper(Mapper.class); Parent parent = mapper.getParentsWithChildren(parentId); List<Child> children = parent.getChildren(); } finally { sqlSession.close(); } ``` 这样,就可以通过MyBatis实现自关联一对多查询了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值