在实际开发中,我们常常遇到关联数据的情况,如User对象拥有若干Book对象

每个Book对象描述了归属于一个User信息,这种情况下,我们应该如何处理?

通过单独的Statement操作固然可以实现(通过Statement用于读取用户数据,再手工调用另外一个Statement

根据用户ID返回对应的book信息).不过这样未免失之繁琐.下面我们就看看在ibatis中,如何对关联数据进行操。

ibatis中,提供了Statement嵌套支持,通过Statement嵌套,我们即可实现关联数据的操作。

如下步骤演示一对多关联

1、创建user(id,name,age)表和book(id,name,uid)表

2、POJO类

public class User implements Serializable {

	private static final long serialVersionUID = 1L;
	private int id;
	private String name;
	private int age;
	/**
	 * ibatis一对多关联
	 */
	private Set<Book> books = new HashSet<Book>();
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}

	public Set<Book> getBooks() {
		return books;
	}
	public void setBooks(Set<Book> books) {
		this.books = books;
	}
}
public class Book {
	private int id;
	private String name;
	
	public int getId() {
		return id;
	}
	
	public void setId(int id) {
		this.id = id;
	}
	
	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
}

3、创建User.xml文件


4、SqlMapConfig.xml

以上可能需要修改ConnectionURL,Username,Password

5、MyAppSqlConfig.java

import java.io.Reader;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;

public class MyAppSqlConfig {
	private static final SqlMapClient sqlMap;
	static {
		try {
			String resource = "SqlMapConfig.xml";
			Reader reader = Resources.getResourceAsReader(resource); //读取配置文件 
			sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
		} catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeException("Error initializing MyAppSqlConfig class. Cause: " + e);
		}
	}
	public static SqlMapClient getSqlMapInstance() {
		return sqlMap;
	}
}

6、测试类

public class UserTest {
	public static void main(String[] args) {
		SqlMapClient sqlMap = MyAppSqlConfig.getSqlMapInstance();
		try {
			/**
			 * 查询ID为5的用户,以下查询假设有数据存在
			 */
			List list = sqlMap.queryForList("User.getUser","5");
			for(int i=0;i<list.size();i++){
				User user = (User)list.get(i);
				/**
				 * 得到User所拥有的Book
				 */
				Set<Book> books = (Set<Book>)user.getBooks();
				Iterator ite = books.iterator();
				while(ite.hasNext()){
					Book book = (Book)ite.next();
					System.out.println("用户:"+user.getName()+",书籍: "+book.getName());
				}
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

这里通过在resultMap中定义嵌套查询getBookByUserId,我们实现了关联数据的读取。


项目结构图:

ibatis实战之一对多关联


项目源码下载:http://download.csdn.net/detail/itmyhome/7495501



相关文章:

  • 2021-06-21
  • 2022-12-23
  • 2022-12-23
  • 2021-10-10
  • 2022-12-23
  • 2021-10-08
  • 2021-10-02
猜你喜欢
  • 2022-12-23
  • 2022-02-08
  • 2022-12-23
  • 2022-12-23
  • 2022-01-08
  • 2021-06-20
  • 2022-12-23
相关资源
相似解决方案