mybatis ----数据级联查询(多对一)(一)

2014-11-24 00:38:36 · 作者: · 浏览: 2

工程的目录结构:

\

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

create table  article (id int(11) not null auto_increment,
                       userid int(11) not null,
                       title varchar(100) not null,
                       content text not null,
                       primary key (id))ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
insert into article(id,userid,title,content) values(1,1,'test_title','text_content'); 

insert into article(id,userid,title,content) values(2,1,'test_title_2','text_content_2');   
insert into article(id,userid,title,content) values(3,1,'test_title_3','text_content_3');                         
insert into article(id,userid,title,content) values(4,1,'test_title_4','text_content_4');  


create table user (id int(11) not null auto_increment,
                   userName varchar(50) default null,
                   userAge int(11) default null,
                   userAddress varchar(200) default null,
                   primary key(id)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
                   

insert into user(id,userName,userAge,userAddress) values(1,'summer','100','上海');
现在要查询,根据用户的ID来查询他所拥有的文章。那么需要编写SQL语句如下:
select a.id, a.userName ,a.userAddress ,b.id aid, b.title,b.content
                                          from user a,article b 
                                         where a.id=b.userid and a.id=#{id}

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

User.java

package com.mybatis.model;

public class User {
 private int id;
 private String userName;
 private String userAge;
 private String userAddress;
 
public int getId() {
	return id;
}
public void setId(int id) {
	this.id = id;
}
public String getUserName() {
	return userName;
}
public void setUserName(String userName) {
	this.userName = userName;
}
public String getUserAge() {
	return userAge;
}
public void setUserAge(String userAge) {
	this.userAge = userAge;
}
public String getUserAddress() {
	return userAddress;
}
 public void setUserAddress(String userAddress) {
	this.userAddress = userAddress;
  }
 
}

Article.java

package com.mybatis.model;

public class Article {
	
	private int id;
	private User user; //文章的用户定义一个User对象,而不是int 类型
	private String title;
	private String content;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public User getUser() {
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	
}

接口类

IUserDao.java

package com.mybatis.dao;

import java.util.List;
import com.mybatis.model.Article;

public interface IUserDao {
	
 public List
  
getUserArticles(int id); }

总配置文件configution.xml

     


  
  
    
     
     
     
   
  
  
   
  
    
     
      
      
      
       mysql.jdbc.Driver"/> 
        
        
        
      
      
     
   
  
  
    
     
     
   
  

  

User.xml

  

    

  
       
   
       
    
     
     
     
     
     
      
      
      
      
     
    
       
       
   

  

总后,编写个测试类.

package com.mybatis.test;

import java.io.IOException;
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.mybatis.dao.IUserDao;
import com.mybatis.model.Article;

public class Test {
	
	/***
	 * 获得MyBatis SqlSessionFactory
	 * SqlSessionFactory 负责创建SqlSession ,一旦创建成功,就可以用SqlSession实例来执行映射语句