`

Ibatis N:1避免N+1查询的方法

阅读更多

一、实体类

多方:
public class Employ {
private int id;
private String enployName;
private int salary;
private Department department;

public Employ() {
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getEnployName() {
return enployName;
}

public void setEnployName(String enployName) {
this.enployName = enployName;
}

public int getSalary() {
return salary;
}

public void setSalary(int salary) {
this.salary = salary;
}

public Department getDepartment() {
return department;
}

public void setDepartment(Department department) {
this.department = department;
}
}

一方:
public class Department {
private int did;
private String departmentName;
private List<Employ> employees;


public int getDid() {
return did;
}

public void setDid(int did) {
this.did = did;
}

public String getDepartmentName() {
return departmentName;
}

public void setDepartmentName(String departmentName) {
this.departmentName = departmentName;
}

public List<Employ> getEmployees() {
return employees;
}

public void setEmployees(List<Employ> employees) {
this.employees = employees;
}
}
 



二、映射文件

多方:
<?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="Employ">

  <!-- Use type aliases to avoid typing the full classname every time. -->
  <typeAlias alias="Employ" type="com.test.domain.Employ"/>

  <!-- Result maps describe the mapping between the columns returned
       from a query, and the class properties.  A result map isn't
       necessary if the columns (or aliases) match to the properties
       exactly. -->
  <resultMap id="EmployResult" class="Employ">
    <result property="id" column="id"/>
    <result property="enployName" column="employ_name"/>
    <result property="salary" column="salary"/>
    <result property="department.did" column="did"/>
    <result property="department.departmentName" column="department_name"/>
  </resultMap>

  <!-- Select with no parameters using the result map for Account class. -->
  <select id="selectAllEmploy" resultMap="EmployResult">
  <![CDATA[
  select * from employees e, departments d where e.departmentid = d.did
  ]]>
  </select>
  <!-- A simpler select example without the result map.  Note the
       aliases to match the properties of the target result class. -->
  
  <!-- Insert example, using the Account parameter class -->
  <insert id="insertEmploy" parameterClass="Employ">
  <![CDATA[
  insert into employees (employ_name, salary, departmentid) values(#enployName#, #salary#, #department.did#)
  ]]>
  </insert>

  <!-- Update example, using the Account parameter class -->

  <!-- Delete example, using an integer as the parameter class -->
</sqlMap>

一方:
<?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="Department">

  <!-- Use type aliases to avoid typing the full classname every time. -->
  <typeAlias alias="Department" type="com.test.domain.Department"/>

  <!-- Result maps describe the mapping between the columns returned
       from a query, and the class properties.  A result map isn't
       necessary if the columns (or aliases) match to the properties
       exactly. -->
  <resultMap id="DepartmentResult" class="Department">
    <result property="did" column="did"/>
    <result property="departmentName" column="department_name"/>
  </resultMap>

  <!-- Select with no parameters using the result map for Account class. -->
  <select id="selectDepartmentById" parameterClass="int" resultMap="DepartmentResult">
  <![CDATA[
  select * from departments where did = #did#
  ]]>
  </select>
  <!-- A simpler select example without the result map.  Note the
       aliases to match the properties of the target result class. -->
  
  <!-- Insert example, using the Account parameter class -->
  <insert id="insertDepartment" parameterClass="Department">
  <![CDATA[
  insert into departments (department_name) values(#departmentName#)
  ]]>
  </insert>

  <!-- Update example, using the Account parameter class -->

  <!-- Delete example, using an integer as the parameter class -->
</sqlMap>


 

 

分享到:
评论
1 楼 tiankang 2009-05-19  
iBatis的多对一查询,就是父子级联后由子来查询父结构数据的情况。
<!CDATA[...]]>这部分可以适当用标签哈。

相关推荐

    ibatis解决多对一n+1问题(更新上传例子(mybatis)代码)

    "ibatis解决多对一n+1问题"这个主题聚焦于MyBatis框架中如何高效地处理多对一关联查询,避免出现性能瓶颈的“n+1”问题。这个问题通常发生在查询一对多关系时,如果不对查询进行优化,会导致大量的额外数据库访问,...

    ibatis N+1问题

    2. **连接查询(JOIN)**: 通过在SQL语句中使用JOIN操作,将原本的多次查询合并为一次,从而避免N+1问题。不过,这种方法需要注意的是,当数据量过大时,可能会导致内存压力增大。 3. **延迟加载(Lazy Loading)**...

    ibatis n+1选择问题 的几种解决方案

    在数据库查询优化中,"N+1 选择问题"是一个常见的性能瓶颈,特别是在使用ORM(对象关系映射)框架如iBATIS时。N+1问题发生在当我们执行一系列单独的SQL查询来获取关联数据,而不是一次性加载所有所需数据。这可能...

    iBATIS2.3及其说明文档

    7. 性能优化:通过合理设计SQL,避免N+1查询问题,使用缓存提高性能。 总之,iBATIS作为一个轻量级的持久层框架,通过提供SQL Maps和Mapped Statements,降低了数据库操作的复杂性,使得开发者可以专注于业务逻辑而...

    ibatis-sqlMap

    - **Avoiding N+1 Selects (1:1)**:避免N+1次查询问题,提高性能。 - **Complex Collection Properties**:处理集合类型的属性。 - **Avoiding N+1 Selects (1:M and M:N)**:处理一对多或多对多关系时的查询...

    ibatis高级特性

    - **避免 N+1 Select 问题**: 即使是一对一关联,也需要注意避免多次数据库查询。 #### 三、延迟加载 延迟加载是一种优化技术,它允许在实际需要时才加载关联对象的数据,而不是在加载主对象时就立即加载所有关联...

    ibatis学习锦集

    6. **最佳实践**:学习如何优化SQL,避免N+1查询问题,以及如何利用缓存提高性能。 7. **实战项目**:通过参与实际项目或复刻JpetStore_4,提升对iBatis的运用能力。 总之,iBatis是一个强大且灵活的持久层框架,...

    ibatis 开发指南.

    10. **最佳实践**:如何有效地设计Mapper接口和XML文件,避免N+1查询,以及如何利用iBATIS进行性能优化。 学习iBATIS不仅需要理解上述知识点,还需要通过实际项目实践来巩固和深化理解。通过分析提供的源码,我们...

    01_ibatis教程_准备ibatis环境.zip

    10. **最佳实践**:了解如何优化Ibatis的使用,如合理设计SQL,避免N+1问题,使用动态SQL等。 这个教程将引导初学者一步步完成Ibatis环境的搭建,理解其基本工作原理,并通过实际操作掌握Ibatis的使用。通过这些...

    ibatis的使用

    Ibatis,全称为MyBatis,是一个优秀的Java持久层框架,它主要负责SQL映射,使得开发者能够将注意...在使用过程中,注意合理设计SQL语句,避免N+1查询问题,同时利用Ibatis提供的各种特性优化数据库访问,提高系统性能。

    ibatis 指导书 PDF

    - **避免 N+1 Select**:通过联合查询等方式优化查询性能。 - **延迟加载 VS 联合查询**:选择合适的查询策略以提高效率。 - **复杂类型集合的属性**:处理复杂类型集合的映射。 - **组合键值或多个复杂参数属性**:...

    ibatis开发手册(pdf)

    - **避免 N+1 Select(1:M 和 M:N)**:进一步讲解如何优化多对多查询。 - **组合键值或多个复杂参数属性**:当一个参数由多个属性组成时的处理方法。 - **支持 ParameterMap 和 ResultMap 的数据类型**:详细...

    一个iBatis的demo

    10. **最佳实践**:分享一些使用 iBatis 的最佳实践,如避免N+1查询问题,提高性能的技巧等。 通过学习这个 iBatis 的 demo,开发者可以更好地理解和掌握 iBatis 在实际开发中的运用,提升数据访问层的构建能力。...

    iBATIS-SqlMaps

    - **避免N+1查询问题**:通过合理设计SQL语句减少不必要的查询次数。 - **复合主键或多属性复合对象**:处理复杂的对象映射情况。 #### 五、缓存机制 iBATIS-SqlMaps提供了两种缓存机制:只读缓存和可读写缓存。...

    ibatis 开发指南

    8. **最佳实践与案例分析**:提供实际开发中的最佳实践,如如何优化SQL,避免N+1问题,以及在大型项目中如何有效地组织和管理映射文件。 9. **与其他框架集成**:探讨如何将iBatis与Spring、Struts等其他框架整合,...

    iBATIS实战

    6.2.3 避免N+1查询问题 105 6.3 继承 107 6.4 其他用途 109 6.4.1 使用语句类型和DDL 109 6.4.2 处理超大型数据集 109 6.5 小结 115 第7章 事务 116 7.1 事务是什么 116 7.1.1 一个简单的银行转账示例 116 7.1.2 ...

    ibatis spring

    支持代码生成工具,避免N+1查询问题。 - **缺点**:相较于Hibernate等框架来说,知名度和社区支持相对较低。 ### 3. 在具体项目中如何选择合适的技术栈 在实际项目开发过程中,选择合适的数据库访问技术是至关重要...

Global site tag (gtag.js) - Google Analytics