`

Ibatis多表查询

    博客分类:
  • JAVA
阅读更多
一:描述下:

  使用2个表,book,user表。一对多关系,一本书有多个作者。

表语句:
CREATE TABLE `book` (
  `oid` int(10) NOT NULL ,
  `name` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`oid`)
) ;

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(10) unsigned NOT NULL,
  `name` varchar(50) DEFAULT NULL,
  `book_oid` int(10) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `FK_user_1` (`book_oid`),
  CONSTRAINT `FK_user_1` FOREIGN KEY (`book_oid`) REFERENCES `book` (`oid`)
) ;

二:对应的Pojo类
package com.pojo;

public class User {
 private Integer id;
 private String name;
 private Integer book_oid;


........一下是get set 注意在ibatis定义的pojo类中要有个空的构造函数哦~~,

package com.pojo;

import java.util.List;

public class Book {
 private Integer oid;
 private String name;
 private List users;


.......get set  注意:必须定义个list ,ibatis在实现多表关联查询时。

配置文件:对应pojo的 book.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap      
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"      
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="test">   
  <typeAlias alias="User" type="com.pojo.User"/>   
  <typeAlias alias="Book" type="com.pojo.Book"/>   

  <resultMap id="BookResult" class="Book">   
  <result property="oid" column="oid"/>   
  <result property="name" column="name"/>   
  <result property="users" column="oid" select="getUsersByBookId"/>   
  </resultMap>


  <!-- 通过book的oid实现的一对多关联,ibatis会使用getKeysByLockId(id)得到的List填充users属性 -->
 

  
  <select id="selectAllBooks" resultMap="BookResult">   
  <![CDATA[   
  select oid,b.name from book b
  ]]>   
  </select>   
    
  <select id="getUsersByBookId" parameterClass="int" resultClass="User">   
  <![CDATA[   
  select id,book_oid,u.name from user u where book_oid = #value#   
  ]]>   
  </select>
 </sqlMap>  


在定义个配置文件调用上面的配置文件:如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<settings cacheModelsEnabled="true"
           enhancementEnabled="true"
        lazyLoadingEnabled="true"
        errorTracingEnabled="true"
        maxRequests="132"
        maxSessions="110"
        maxTransactions="15"
        useStatementNamespaces="false" />
 <transactionManager type="JDBC">
  <dataSource type="DBCP">
   <property name="JDBC.Driver" value="com.mysql.jdbc.Driver" />
   <property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost:3306/test" />
   <property name="JDBC.Username" value="root" />
   <property name="JDBC.Password" value="root" />
  
  </dataSource>
 </transactionManager>
 <sqlMap resource="com/crfss/book.xml" />
</sqlMapConfig> 


三:测试类:


 


package com.test;

import java.io.IOException;
import java.io.Reader;
import java.util.Iterator;
import java.util.List;

import com.crfss.MainDb;
import com.crfss.Un;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
import com.pojo.Book;
import com.pojo.User;


public class TestDB {

 public static void main(String[] args) {
        String resource = "sql-map-config.xml";
        try {
            Reader reader = Resources.getResourceAsReader(resource);
            SqlMapClient mapClient = SqlMapClientBuilder.buildSqlMapClient(reader);
            reader.close();
            List<Book> books=mapClient.queryForList("selectAllBooks");
            Book book=(Book)books.get(0);
            //System.out.println(book.getName());
            List users=(List) book.getUsers();
        
           for (Iterator iterator = users.iterator(); iterator.hasNext();) {
            User user = (User) iterator.next();
            System.out.println(user.getBook_oid());
            System.out.println(user.getName());
            System.out.println(user.getId());
        }    
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
    


分享到:
评论

相关推荐

    ibatis多表查询

    在Ibatis中,多表查询是一项重要的功能,它允许我们处理复杂的数据库操作,例如一对多、多对一或一对一的关系。在这个例子中,我们将探讨如何使用Ibatis进行一对多的多表查询,以`book`和`user`两个表为例。 首先,...

    ibatis多表查询过程

    当我们需要进行多表查询时,iBatis提供了一种高效且易于管理的方式。本文将深入探讨iBatis在处理多表查询时的具体步骤和技巧。 ### 1. iBatis简介 iBatis 是一个基于Java的持久层框架,它简化了数据库访问,并避免...

    Ibatis查询语句里,可以使用多表查询

    ### iBatis 多表查询知识点详解 #### 一、iBatis简介 iBatis 是一款优秀的持久层框架,它将 SQL 映射到 Java 对象,简化了 JDBC 编程过程中的繁琐操作,提高了开发效率。iBatis 的核心功能包括 SQL 映射、动态 SQL...

    主子表查询ibatis

    本文将深入探讨如何在iBATIS中进行主子表查询,以及涉及到的相关技术如一对多关系、日志管理库log4j等。 首先,主子表查询是数据库设计中常见的场景,通常涉及到一个“父”表(主表)和一个或多个“子”表(从表)...

    ibatis配置多表关联(一对一、一对多、多对多

    ibatis配置多表关联(一对一、一对多、多对多

    操作数据库 iBATIS查询

    ### 操作数据库iBATIS查询详解 #### 一、iBATIS中的LIKE查询技巧 iBATIS是一款优秀的Java持久层框架,它简化了基于SQL的程序编写,避免了程序员手动处理结果集和手工编写SQL语句。在进行数据库查询时,LIKE查询是...

    ibatis 单表查询 一对多查询

    Source Database : ibatis_db Target Server Type : MYSQL Target Server Version : 50022 File Encoding : 65001 Date: 2013-05-02 22:49:28 */ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- --...

    ibatis多对多关系(详细)

    iBatis多对多关系详解 iBatis是一种流行的持久层框架,用于简化Java应用程序...我们使用了三个数据库表来存储学生和教师之间的多对多关系,并使用iBatis来映射数据库表和Java对象。最后,我们实现了DAO来访问数据库。

    Mybatis/ibatiS多表映射 一对一 一对多 extjs前台取值 详细讲解

    首先,我们来看Mybatis或iBatis在XML配置文件中的多表映射。以学生、班级和班主任为例,学生与班级是一对多关系,班级与班主任是一对一关系。在`classInfo-mapper.xml`配置文件中,我们定义了三个`resultMap`:`...

    spring+ibatis 多表

    综上所述,"spring+ibatis 多表"项目涉及了后端的Spring和iBatis框架,它们共同处理数据库交互,特别是涉及到多表关联查询的复杂操作。前端则利用jQuery进行交互设计,包括分页查询的实现。这样的组合提供了一种高效...

    ibatis的多参数查询.doc

    ### ibatis多参数查询解析 #### 一、引言 在使用ibatis(现称为MyBatis)进行数据库操作时,经常会遇到需要处理多个输入参数的情况。然而,默认情况下ibatis只支持单个输入参数,这在实际开发中往往难以满足需求。...

    ibatis动态多条件组合查询

    ibatis动态多条件组合查询 实例 说明

    ibatis做连接查询 .doc

    本文将详细介绍如何使用iBatis进行连接查询。 首先,我们需要理解iBatis的工作原理。iBatis并不是像Hibernate那样完全自动管理数据库操作,而是将SQL语句的编写权交给开发者,这样可以更好地控制查询性能和复杂性。...

    Ibatis复杂查询语句.doc

    总结起来,这个Ibatis查询语句充分展示了Ibatis处理复杂查询的能力,包括动态SQL、子查询、多表联接、条件判断、数据类型映射和迭代处理等功能。在实际开发中,这种灵活性使得Ibatis能够适应各种复杂的业务场景,...

    ibatis的动态查询

    以上内容详细介绍了 ibatis 中动态查询的基本原理及具体实现方法,包括模糊查询、多条件组合查询以及使用 Map 作为参数的高级用法。这些知识点对于深入理解 ibatis 的动态查询机制非常重要,可以帮助开发者更高效地...

    ibatis_动态查询条件

    iBatis 动态查询条件详解 iBatis 是一个基于 Java 的持久层框架,它提供了动态查询条件的功能,可以根据不同的条件生成不同的 SQL 语句。在 iBatis 中,动态查询条件是通过 `&lt;dynamic&gt;` 元素来实现的,该元素可以...

    ibatis下oracle树查询

    例如,假设我们有一个部门表DEPARTMENTS,包含ID(主键)、PARENT_ID(父ID)和NAME(部门名称)字段,可以使用以下SQL语句进行树形查询: ```sql SELECT level, connect_by_root id AS root_id, id, name FROM ...

    IBatis完成单表基本的数据库操作 模糊查询

    通过阅读博客全文,你可能会学习到更多关于如何有效地使用iBatis进行数据库操作和优化查询性能的知识。 综上所述,iBatis提供了一种简单、灵活的方式来处理数据库操作,特别是像模糊查询这样的复杂查询。通过将SQL...

Global site tag (gtag.js) - Google Analytics