mybatis关联查询

来源:互联网 发布:钱箱测试软件 编辑:程序博客网 时间:2024/05/21 15:04

在实际的项目应用中,通常需要两个表进行联合查询。

最近两天在学习mybatis,就记录一下mybatis的多对一联合查询。

接着上一篇博文,这里需要添加一个表:

article表结构:

前几篇博文没有上传user的表结构:

代码:

实体类:User.java:

    package com.mfc.entity;            /*      * 实体类      * */      public class User {          private int id;          private String userName;          private int userAge;          private String userAddress;              //实体类以及set、get方法省略...       }  

实体类:Article.java:

package com.mfc.entity;    public class Article {      private int id;      //数据库表中这里是userid,为了配置关联数据,这里使用User的实体替代userid      private User user;      private String title;      private String content;    //构造方法以及set、get方法省略...}

注意:这里只需要一个User.xml:

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"   "http://mybatis.org/dtd/mybatis-3-mapper.dtd">    <mapper namespace="com.mfc.dao.UserDao">      <!--User联合文章进行查询配置方法一(多对一)-->      <resultMap id="resultUserArticleList" type="Article">          <id property="id" column="id"></id>          <result property="title" column="title"></result>          <result property="content" column="content"></result>                    <association property="user" javaType="User">              <id property="id" column="id"></id>              <result property="userName" column="userName"></result>              <result property="userAddress" column="userAddress"></result>          </association>      </resultMap>            <!--查询-->      <select id="getUserArticles" parameterType="int" resultMap="resultUserArticleList">          select user.id,user.userName,user.userAddress,article.id aid,article.title,article.content from user,article                 where user.id=article.userid and user.id=#{id}      </select>  </mapper>

UserDao.java:

import java.util.List;    import com.mfc.entity.Article;    public interface UserDao {      public List<Article> getUserArticles(int id);  }   

Configuration.xml:

<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  "http://mybatis.org/dtd/mybatis-3-config.dtd">  <configuration>      <!-- Configuration.xml是 mybatis 用来建立 sessionFactory 用的,      里面主要包含了数据库连接相关东西,还有 java 类所对应的别名,比如       <typeAlias alias="User" type="com.yihaomen.mybatis.model.User"/>       这个别名非常重要,你在 具体的类的映射中,      比如User.xml 中 resultType 就是对应这里的。要保持一致,当然这里的 resultType 还有另外单独的定义方式-->      <typeAliases>           <typeAlias alias="User" type="com.mfc.entity.User"/>           <typeAlias alias="Article" type="com.mfc.entity.Article"/>       </typeAliases>         <environments default="development">          <environment id="development">          <transactionManager type="JDBC"/>              <dataSource type="POOLED">              <property name="driver" value="com.mysql.jdbc.Driver"/>              <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis" />              <property name="username" value="root"/>              <property name="password" value="root"/>              </dataSource>          </environment>      </environments>            <!--要映射的类的xml配置文件-->      <mappers>          <mapper resource="com/mfc/entity/User.xml"/>      </mappers>  </configuration>

测试类Test.java:

import java.io.Reader;  import java.util.List;    import org.apache.ibatis.io.Resources;  import org.apache.ibatis.session.SqlSession;  import org.apache.ibatis.session.SqlSessionFactory;  import org.apache.ibatis.session.SqlSessionFactoryBuilder;    import com.mfc.dao.UserDao;  import com.mfc.entity.Article;    public class Test {      private static SqlSessionFactory sqlSessionFactory;      private static Reader reader;        static {          try {              reader = Resources.getResourceAsReader("Configuration.xml");              sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);          } catch (Exception e) {              e.printStackTrace();          }      }        public static void main(String[] args) {          SqlSession session = sqlSessionFactory.openSession();          try {              UserDao userOperation = session.getMapper(UserDao.class);              List<Article> articles = userOperation.getUserArticles(2);              for (Article article : articles) {                  System.out.println("作者:" + article.getUser().getUserName() + "   标题:" + article.getTitle() + "   内容:"                          + article.getContent());              }          } finally {              session.close();          }      }  }

经测试可以使用!

原创粉丝点击