1. 程式人生 > >Mybatis級聯查詢

Mybatis級聯查詢

username tac 實現 數據 配置 級聯查詢 builder java 3.0

轉自: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. insert into article(id,userid,title,content) values(1,1,‘test_title‘,‘text_content‘);
  7. insert into article(id,userid,title,content) values(2,1,‘test_title_2‘,‘text_content_2‘);
  8. insert into article(id,userid,title,content) values(3,1,‘test_title_3‘,‘text_content_3‘);
  9. insert into article(id,userid,title,content) values(4,1,‘test_title_4‘,‘text_content_4‘);
  10. create table user (id int(11) not null auto_increment,
  11. userName varchar(50) default null,
  12. userAge int(11) default null,
  13. userAddress varchar(200) default null,
  14. primary key(id)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  15. 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. public class User {
  3. private int id;
  4. private String userName;
  5. private String userAge;
  6. private String userAddress;
  7. public int getId() {
  8. return id;
  9. }
  10. public void setId(int id) {
  11. this.id = id;
  12. }
  13. public String getUserName() {
  14. return userName;
  15. }
  16. public void setUserName(String userName) {
  17. this.userName = userName;
  18. }
  19. public String getUserAge() {
  20. return userAge;
  21. }
  22. public void setUserAge(String userAge) {
  23. this.userAge = userAge;
  24. }
  25. public String getUserAddress() {
  26. return userAddress;
  27. }
  28. public void setUserAddress(String userAddress) {
  29. this.userAddress = userAddress;
  30. }
  31. }


Article.java

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


接口類

IUserDao.java

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


總配置文件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. <!-- 數據源配置,這裏用MySQL數據庫 -->
  12. <environments default="development">
  13. <environment id="development">
  14. <transactionManager type="JDBC"/>
  15. <dataSource type="POOLED">
  16. <property name="driver" value="com.mysql.jdbc.Driver"/>
  17. <property name="url" value="jdbc:mysql://127.0.0.1:3306/test"/>
  18. <property name="username" value="root"/>
  19. <property name="password" value="123456"/>
  20. </dataSource>
  21. </environment>
  22. </environments>
  23. <mappers>
  24. <!-- book.xml裝載進來,等同於把Dao的實現類裝載進來 -->
  25. <mapper resource="com/mybatis/model/User.xml"/>
  26. </mappers>
  27. </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. <mapper namespace="com.mybatis.dao.IUserDao">
  6. <!-- User聯合Article進行查詢 (多對一的方式)-->
  7. <resultMap type="Article" id="resultUserArticleList">
  8. <id property="id" column="aid"/>
  9. <result property="title" column="title"/>
  10. <result property="content" column="content"/>
  11. <!--關聯一個用戶 ,如果是關聯多個的話,就需要用collection了-->
  12. <association property="user" javaType="User"> <!-- 這個 property="user" 對應的是Article中的User user屬性-->
  13. <id property="id" column="id"/>
  14. <result property="userName" column="userName"/>
  15. <result property="userAddress" column="userAddress"/>
  16. </association>
  17. </resultMap>
  18. <select id="getUserArticles" parameterType="int" resultMap="resultUserArticleList">
  19. select a.id, a.userName ,a.userAddress ,b.id aid, b.title,b.content
  20. from user a,article b
  21. where a.id=b.userid and a.id=#{id}
  22. </select>
  23. </mapper>


總後,編寫個測試類.

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


運行後結果如下:

[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:地址:上海

Mybatis級聯查詢