Mybatis关联映射(关联单个对象)

来源:互联网 发布:烟台淘宝招聘 编辑:程序博客网 时间:2024/06/05 15:51

案例:关联查询出List<Book>(含有Use属性)(查询所有的笔记本)

修改Book的实体类,添加User属性

需要添加属性如下:

//后添加的User属性,用于关联查询private User user;public User getUser() {return user;}public void setUser(User user) {this.user = user;}

------------------------------------------------------------------------

利用两条SQL语句

------------------------------------------------------------------------

映射器Dao接口:

//关联单个对象public List<Book> findBookAndUser();//关联查询案例(两条SQL)查询所有笔记本

------------------------------------------------------------------------

映射文件Mapper

<!-- 关联单个对象 -->  <!-- 关联查询List<Book>,实体类中添加了User属性-->  <!-- 使用两条SQL语句关联单个对象 -->  <select id="findBookAndUser" resultMap="bookMap">    select * from cn_notebook  </select>  <resultMap id="bookMap" type="cn.tedu.cloud_note.entity.Book" >    <!-- cn_notebook表中属性与字段相同可以省略 -->    <association property="user"     javaType="cn.tedu.cloud_note.entity.User"     select="findUser"     column="cn_user_id">    </association>  </resultMap>  <select id="findUser" parameterType="string" resultType="cn.tedu.cloud_note.entity.User">    select * from cn_user where cn_user_id = #{id}  </select>

------------------------------------------------------------------------

测试代码和结果:

@Test//测试关联查询出List<Book>(含有Use属性)两条SQL语句(查询所有的笔记本)public void testfindBookAndUser(){List<Book> book = dao.findBookAndUser();if(book != null && book.size() > 0){System.out.println("=======笔记本信息=======");for(Book b : book){System.out.println("笔记本:"+b.getCn_notebook_name()+"$$$"+   b.getCn_notebook_createtime());if(b.getUser() != null){System.out.println("用户名:"+b.getUser().getCn_user_name());}}}}
测试结果:

=======笔记本信息=======笔记本:wsf$$$2014-06-27 15:18:59.0用户名:wsf笔记本:笔记本1111$$$2014-06-27 15:18:59.0用户名:zhoujia笔记本:笔记本1$$$2014-06-27 15:18:59.0用户名:zhoujia笔记本:笔记本1$$$2014-06-27 15:18:59.0用户名:zhoujia
......省略

=========================================

利用一条SQL语句

------------------------------------------------------------------------

映射器Dao接口:

public List<Book> findBookAndUser1();//关联查询案例(单条SQL)查询所有笔记本

------------------------------------------------------------------------

Mapper文件:

<!-- 使用单条SQL语句关联单个对象 -->  <select id="findBookAndUser1" resultMap="bookMap2">    select * from cn_notebook m,cn_user n     where m.cn_user_id = n.cn_user_id  </select>  <resultMap id="bookMap2" type="cn.tedu.cloud_note.entity.Book" >    <!-- 字段进行关联 -->    <id property="cn_notebook_id" column="cn_notebook_id"/>    <result property="cn_user_id" column="cn_user_id"/>    <result property="cn_notebook_type_id" column="cn_notebook_type_id"/>    <result property="cn_notebook_name" column="cn_notebook_name"/>    <result property="cn_notebook_desc" column="cn_notebook_desc"/>    <result property="cn_notebook_createtime" column="cn_notebook_createtime"/>        <association property="user"      javaType="cn.tedu.cloud_note.entity.User">      <id property="cn_user_id" column="cn_user_id"/>      <result property="cn_user_name" column="cn_user_name"/>      <result property="cn_user_password" column="cn_user_password"/>      <result property="cn_user_token" column="cn_user_token"/>      <result property="cn_user_nick" column="cn_user_nick"/>    </association>      </resultMap>

------------------------------------------------------------------------

测试代码和结果同上