`
software_developer
  • 浏览: 34944 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

mybatis获取对象及其关联对象的两种方式

阅读更多

场景如下:有一个Book类,一个Category类,Book类有一个对Category的引用,要求获取Book对象的同时取出Category对象

Book.java类代码如下

public class Book implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 8634505584095346474L;

	private String id;
	private String name;
	private Date publishDate;
	private String author;
	private Float price;
	private Category category;
	private Long quantity;
        // setter and getter method is omited!
}

 Category.java类代码如下

 

public class Category implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 8964146416205979692L;

	private String id;
	private String name;
	private String spell;
	private String comments;
        //setter and getter method is omited!
}

 对应获取Book对象的两种方式,通过配置BookMapper.xml中实现

 

方式一(通过配置映射实现):

<resultMap id="bookMap" type="Book">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="publishDate" column="publishDate"/>
<result property="author" column="author"/>
<result property="price" column="price"/>
<result property="quantity" column="quantity"/>
<association property="category" javaType="Category">
   <id property="id" column="category_id" javaType="string"/>
   <id property="name" column="category_name"/>
   <id property="spell" column="category_spell"/>
   <id property="comments" column="category_comments"/>
</association>
</resultMap>

<select id="getBook" parameterType="string" resultMap="bookMap">
select b.id,
         b.name,
         b.publishDate,
         b.author,
         b.price,
         b.category,
         b.quantity,
         c.id as category_id,
         c.name as category_name,
         c.spell as category_spell,
         c.comments as category_comments 
from t_book b left outer join t_bookcategory c on b.category=c.id where b.id=#{id}
</select>

 方式二(通过OGNL实现):

 

<select id="getBook" parameterType="string" resultType="Book">
select b.id,
      b.name,
      b.publishDate,
      b.author,
      b.price,
      b.quantity,
      c.id as "category.id",
      c.name as "category.name",
      c.spell as "category.spell",
      c.comments as "category.comments" 
from t_book b left outer join t_bookcategory c on b.category=c.id where b.id=#{id}
</select>

 

 

分享到:
评论

相关推荐

    mybatis包及其文档

    7. **事务管理**:MyBatis支持JDBC和Spring两种事务管理方式。JDBC方式下,事务的开启、提交和回滚需要手动处理;而在Spring环境下,可以通过AOP代理来管理事务,实现声明式事务。 8. **插件机制**:MyBatis允许...

    mybatis-3.5.9 源码(mybatis-3-mybatis-3.5.9.zip)

    - MyBatis 支持手动和自动两种事务管理方式。在 SqlSession 中的 CRUD 操作默认在一个事务中,如果需要更细粒度的控制,可以通过 TransactionFactory 和 Transaction 来自定义事务管理。 通过对 MyBatis-3.5.9 ...

    mybatis3.4.4的jar包及其源代码

    1. **SQL映射**:MyBatis的核心在于它的SQL映射文件,这些文件定义了如何将Java方法与SQL语句关联起来。通过XML配置或注解,我们可以编写动态SQL,实现复杂的查询和数据操作。 2. **注解支持**:从3.x版本开始,...

    mybatis jar包

    4. **事务管理**:MyBatis支持手动和自动两种事务管理方式。在Spring框架中,通常会结合MyBatis进行声明式事务管理,简化事务处理代码。 5. **参数映射**:MyBatis支持多种类型的参数映射,包括基本类型、复杂对象...

    mybatis系列三:一对多双向关联

    在MyBatis中,实现一对多关联有两种方式:集合映射和关联映射。集合映射通常用于一个实体包含一个列表或集合的子实体,而关联映射则允许更复杂的导航结构。在这个系列的第三部分,我们将重点讨论双向关联,这意味着...

    mybatis-3-mybatis-3.4.5.rar

    11. **延迟加载(Lazy Loading)**:MyBatis提供了延迟加载机制,当需要关联的对象时,才真正去数据库加载数据,提高性能。 12. **缓存(Cache)**:MyBatis内置了两级缓存,一级缓存是SqlSession级别的,二级缓存...

    mybatis 3 中文 指南

    构建方式有两种:一是从XML配置文件构建,二是从`Configuration`类实例构建。 ##### 从XML中构建SqlSessionFactory 构建`SqlSessionFactory`最常见的方式是从XML配置文件中读取。建议使用类路径下的资源文件进行...

    MyBatis3.2.4完全自学手册

    #### 四、MyBatis开发中的两种方式 在使用MyBatis进行开发时,有两种主要方式: 1. **基于XML映射文件**:这是传统的使用方式,适合于复杂查询场景。在该方式下,SQL语句写在XML映射文件中,并通过Java接口调用...

    尚硅谷最新MyBatis视频分享

    MyBatis提供了两种级别的缓存:一级缓存和二级缓存。一级缓存默认开启,用于同一个SqlSession中多次执行相同的SQL语句时,减少数据库访问;二级缓存则是在多个SqlSession之间共享的,适用于多对一或一对多等关联查询...

    mybatis3--4.resultMap高级映射

    总结,ResultMap是MyBatis中处理复杂数据映射的关键,它提供了一种强大的方式来控制数据从数据库到Java对象的转换过程,包括一对一、一对多、多对多的关联关系处理,以及自定义类型转换等。熟练掌握ResultMap的使用...

    MyBatis使用手册(中文版)3.4.4版

    6. **事务管理**:MyBatis支持手动和自动两种事务管理方式。在手动模式下,开发者需在代码中显式调用begin、commit和rollback方法;而在自动模式下,事务控制可以委托给容器(如Spring)处理。 7. **缓存机制**:...

    mybatis-lib(1)

    5. **参数映射**:MyBatis支持两种参数映射方式:一种是通过`@Param`注解指定参数名,另一种是通过Map对象传入多个参数。 6. **结果映射**:结果映射定义了SQL查询结果如何映射到Java对象,包括基本类型、复杂类型...

    Mybatis框架学习

    MyBatis 支持两种关联映射方式:一对一和一对多。 - **一对一关联映射**: - **方式一**:直接在 POJO 类中嵌套另一个 POJO 类,这种方式简单但不支持懒加载。 - **方式二**:通过配置文件实现懒加载,需要在核心...

    Mybatis学习文档

    - **getMapper方法简介:** `getMapper`方法是MyBatis提供的一个工具方法,用于获取指定接口的代理对象,从而执行映射文件中的SQL语句。 - **使用场景:** 通常在业务逻辑层使用,通过获取Mapper接口的实例来调用...

    mybatis源码

    在事务管理方面,MyBatis提供了DefaultTransactionFactory和JdbcTransactionFactory两种事务工厂,分别基于JDBC的默认事务管理和自定义事务管理。事务的隔离级别和传播行为可以通过配置进行调整。 除此之外,...

    MyBatis 的工作原理.pdf

    - 配置文件的加载方式有两种: - 使用 XML 配置文件。 - 使用 Java API 进行配置。 - 示例代码: ```java String resource = "org/mybatis/example/mybatis-config.xml"; InputStream inputStream = ...

    Mybatis源代码-详细的代码注解

    Mybatis提供了两种Executor实现:SimpleExecutor(简单执行器)和CachingExecutor(缓存执行器),后者在SimpleExecutor的基础上增加了对本地缓存的支持。 5. **StatementHandler**:处理Statement对象,比如...

    MyBatis3.2范例

    这两种方式都能方便地将 Java 参数映射到 SQL 的占位符。 6. **结果映射**:MyBatis 可以自动将查询结果映射到 Java 对象,通过 `resultMap` 标签可以定义复杂的映射关系,包括一对一、一对多、多对一、多对多等...

    Mybatis多表关联查询的实现(DEMO)

    关联查询通常有两种方式:嵌套结果映射(Nested Result Maps)和关联映射(Association)。在这个DEMO中,我们可以选择关联映射来实现。在`ProductMapper.xml`文件中,添加一个查询方法,如: ```xml SELECT * ...

Global site tag (gtag.js) - Google Analytics