• Mybatis级联查询


    转自:http://blog.csdn.net/yulei_qq/article/details/22039815

    工程的目录结构:

    有两个表,一个文章表article ,一个用户表user。

    [sql] view plain copy
     
    1. create table  article (id int(11) not null auto_increment,  
    2.                        userid int(11) not null,  
    3.                        title varchar(100) not null,  
    4.                        content text not null,  
    5.                        primary key (id))ENGINE=InnoDB DEFAULT CHARSET=utf8;  
    6.    
    7. insert into article(id,userid,title,content) values(1,1,'test_title','text_content');   
    8.   
    9. insert into article(id,userid,title,content) values(2,1,'test_title_2','text_content_2');     
    10. insert into article(id,userid,title,content) values(3,1,'test_title_3','text_content_3');                           
    11. insert into article(id,userid,title,content) values(4,1,'test_title_4','text_content_4');    
    12.   
    13.   
    14. create table user (id int(11) not null auto_increment,  
    15.                    userName varchar(50) default null,  
    16.                    userAge int(11) default null,  
    17.                    userAddress varchar(200) default null,  
    18.                    primary key(id)) ENGINE=InnoDB DEFAULT CHARSET=utf8;  
    19.                      
    20.   
    21. insert into user(id,userName,userAge,userAddress) values(1,'summer','100','上海');  

    现在要查询,根据用户的ID来查询他所拥有的文章。那么需要编写SQL语句如下:

    [sql] view plain copy
     
    1. select a.id, a.userName ,a.userAddress ,b.id aid, b.title,b.content  
    2.                                           from user a,article b   
    3.                                          where a.id=b.userid and a.id=#{id}  


    现在就来贴下相关的JAVA代码和映射文件吧,该说的都在注释里了。

    User.java

    [java] view plain copy
     
    1. package com.mybatis.model;  
    2.   
    3. public class User {  
    4.  private int id;  
    5.  private String userName;  
    6.  private String userAge;  
    7.  private String userAddress;  
    8.    
    9. public int getId() {  
    10.     return id;  
    11. }  
    12. public void setId(int id) {  
    13.     this.id = id;  
    14. }  
    15. public String getUserName() {  
    16.     return userName;  
    17. }  
    18. public void setUserName(String userName) {  
    19.     this.userName = userName;  
    20. }  
    21. public String getUserAge() {  
    22.     return userAge;  
    23. }  
    24. public void setUserAge(String userAge) {  
    25.     this.userAge = userAge;  
    26. }  
    27. public String getUserAddress() {  
    28.     return userAddress;  
    29. }  
    30.  public void setUserAddress(String userAddress) {  
    31.     this.userAddress = userAddress;  
    32.   }  
    33.    
    34. }  


    Article.java

    [java] view plain copy
     
    1. package com.mybatis.model;  
    2.   
    3. public class Article {  
    4.       
    5.     private int id;  
    6.     private User user; //文章的用户定义一个User对象,而不是int 类型  
    7.     private String title;  
    8.     private String content;  
    9.       
    10.     public int getId() {  
    11.         return id;  
    12.     }  
    13.     public void setId(int id) {  
    14.         this.id = id;  
    15.     }  
    16.     public User getUser() {  
    17.         return user;  
    18.     }  
    19.     public void setUser(User user) {  
    20.         this.user = user;  
    21.     }  
    22.     public String getTitle() {  
    23.         return title;  
    24.     }  
    25.     public void setTitle(String title) {  
    26.         this.title = title;  
    27.     }  
    28.     public String getContent() {  
    29.         return content;  
    30.     }  
    31.     public void setContent(String content) {  
    32.         this.content = content;  
    33.     }  
    34.       
    35. }  


    接口类

    IUserDao.java

    [java] view plain copy
     
    1. package com.mybatis.dao;  
    2.   
    3. import java.util.List;  
    4. import com.mybatis.model.Article;  
    5.   
    6. public interface IUserDao {  
    7.       
    8.  public List<Article> getUserArticles(int id);  
    9. }  


    总配置文件configution.xml

    [html] view plain copy
     
    1. <?xml version="1.0" encoding="UTF-8" ?>     
    2. <!DOCTYPE configuration     
    3.     PUBLIC "-//mybatis.org//DTD Config 3.0//EN"     
    4.     "http://mybatis.org/dtd/mybatis-3-config.dtd">  
    5. <configuration>  
    6.   <typeAliases>  
    7.     <!-- 给实体类去一个别名  -->  
    8.         <typeAlias type="com.mybatis.model.User" alias="User"/>   
    9.         <typeAlias type="com.mybatis.model.Article" alias="Article"/>  
    10.   </typeAliases>  
    11.     
    12.   <!-- 数据源配置,这里用MySQL数据库 -->  
    13.   <environments default="development">  
    14.      <environment id="development">  
    15.          <transactionManager type="JDBC"/>  
    16.          <dataSource type="POOLED">  
    17.                <property name="driver" value="com.mysql.jdbc.Driver"/>  
    18.                <property name="url" value="jdbc:mysql://127.0.0.1:3306/test"/>  
    19.                <property name="username" value="root"/>  
    20.                <property name="password" value="123456"/>  
    21.          </dataSource>  
    22.      </environment>  
    23.   </environments>  
    24.     
    25.   <mappers>  
    26.      <!-- book.xml装载进来,等同于把Dao的实现类装载进来 -->  
    27.        <mapper resource="com/mybatis/model/User.xml"/>  
    28.   </mappers>  
    29.     
    30. </configuration>  


    User.xml

    [html] view plain copy
     
    1. <?xml version="1.0" encoding="UTF-8" ?>  
    2. <!DOCTYPE mapper PUBLIC   
    3.     "-//mybatis.org//DTD Mapper 3.0//EN"  
    4.     "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
    5.       
    6. <mapper namespace="com.mybatis.dao.IUserDao">  
    7.        <!-- User联合Article进行查询 (多对一的方式)-->  
    8.        <resultMap type="Article" id="resultUserArticleList">  
    9.              <id property="id" column="aid"/>  
    10.              <result property="title" column="title"/>  
    11.              <result property="content" column="content"/>  
    12.                
    13.              <!--关联一个用户 ,如果是关联多个的话,就需要用collection了-->  
    14.             <association property="user" javaType="User"<!-- 这个 property="user" 对应的是Article中的User user属性-->  
    15.                    <id property="id" column="id"/>  
    16.                    <result property="userName" column="userName"/>  
    17.                    <result property="userAddress" column="userAddress"/>  
    18.             </association>  
    19.        </resultMap>   
    20.          
    21.        <select id="getUserArticles" parameterType="int" resultMap="resultUserArticleList">  
    22.                select a.id, a.userName ,a.userAddress ,b.id aid, b.title,b.content  
    23.                                           from user a,article b   
    24.                                          where a.id=b.userid and a.id=#{id}          
    25.        </select>  
    26. </mapper>  


    总后,编写个测试类.

    [java] view plain copy
     
    1. package com.mybatis.test;  
    2.   
    3. import java.io.IOException;  
    4. import java.util.List;  
    5.   
    6. import org.apache.ibatis.io.Resources;  
    7. import org.apache.ibatis.session.SqlSession;  
    8. import org.apache.ibatis.session.SqlSessionFactory;  
    9. import org.apache.ibatis.session.SqlSessionFactoryBuilder;  
    10.   
    11. import com.mybatis.dao.IUserDao;  
    12. import com.mybatis.model.Article;  
    13.   
    14. public class Test {  
    15.       
    16.     /*** 
    17.      * 获得MyBatis SqlSessionFactory 
    18.      * SqlSessionFactory 负责创建SqlSession ,一旦创建成功,就可以用SqlSession实例来执行映射语句 
    19.      * ,commit,rollback,close等方法 
    20.      * @return 
    21.      */  
    22.     private static SqlSessionFactory getSessionFactory(){  
    23.         SqlSessionFactory sessionFactory=null;  
    24.         String resource="configuration.xml";  
    25.          try {  
    26.             sessionFactory=new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader(resource));  
    27.         } catch (IOException e) {  
    28.             e.printStackTrace();  
    29.         }  
    30.         return sessionFactory;  
    31.     }  
    32.       
    33.     /** 
    34.      * main 方法 
    35.      * @param args 
    36.      */  
    37.     public static void main(String[] args) {  
    38.           
    39.           SqlSession session=getSessionFactory().openSession();  
    40.      try {  
    41.          IUserDao userDao=session.getMapper(IUserDao.class);  
    42.          //传入用户的id=1  
    43.          List<Article> listArticle=userDao.getUserArticles(1);  
    44.          for(Article article:listArticle){  
    45.              System.out.println(article.getTitle()+":"+article.getContent()+  
    46.                      ":作者是:"+article.getUser().getUserName()+":地址:"+  
    47.                       article.getUser().getUserAddress());  
    48.          }  
    49.         } catch (Exception e) {  
    50.             e.printStackTrace();  
    51.         }  
    52.           
    53.         finally{  
    54.             session.close();  
    55.         }  
    56.     }  
    57. }  


    运行后结果如下:

    [java] view plain copy
     
      1. test_title:text_content:作者是:summer:地址:上海  
      2. test_title_2:text_content_2:作者是:summer:地址:上海  
      3. test_title_3:text_content_3:作者是:summer:地址:上海  
      4. test_title_4:text_content_4:作者是:summer:地址:上海  
  • 相关阅读:
    金山快盘的登录提醒
    排列到随机, 到随机选择,对于植物模拟世界 混沌
    转载 多层影藏 和显示
    庆生写的东西
    布料修改器的用法。
    像素相关
    模拟c++ 控件
    侧his
    输出文件
    win7 xp 删除一些 顽固的自动项目
  • 原文地址:https://www.cnblogs.com/XJJD/p/7760640.html
Copyright © 2020-2023  润新知