场景如下:有一个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>
相关推荐
7. **事务管理**:MyBatis支持JDBC和Spring两种事务管理方式。JDBC方式下,事务的开启、提交和回滚需要手动处理;而在Spring环境下,可以通过AOP代理来管理事务,实现声明式事务。 8. **插件机制**:MyBatis允许...
- MyBatis 支持手动和自动两种事务管理方式。在 SqlSession 中的 CRUD 操作默认在一个事务中,如果需要更细粒度的控制,可以通过 TransactionFactory 和 Transaction 来自定义事务管理。 通过对 MyBatis-3.5.9 ...
1. **SQL映射**:MyBatis的核心在于它的SQL映射文件,这些文件定义了如何将Java方法与SQL语句关联起来。通过XML配置或注解,我们可以编写动态SQL,实现复杂的查询和数据操作。 2. **注解支持**:从3.x版本开始,...
4. **事务管理**:MyBatis支持手动和自动两种事务管理方式。在Spring框架中,通常会结合MyBatis进行声明式事务管理,简化事务处理代码。 5. **参数映射**:MyBatis支持多种类型的参数映射,包括基本类型、复杂对象...
在MyBatis中,实现一对多关联有两种方式:集合映射和关联映射。集合映射通常用于一个实体包含一个列表或集合的子实体,而关联映射则允许更复杂的导航结构。在这个系列的第三部分,我们将重点讨论双向关联,这意味着...
11. **延迟加载(Lazy Loading)**:MyBatis提供了延迟加载机制,当需要关联的对象时,才真正去数据库加载数据,提高性能。 12. **缓存(Cache)**:MyBatis内置了两级缓存,一级缓存是SqlSession级别的,二级缓存...
构建方式有两种:一是从XML配置文件构建,二是从`Configuration`类实例构建。 ##### 从XML中构建SqlSessionFactory 构建`SqlSessionFactory`最常见的方式是从XML配置文件中读取。建议使用类路径下的资源文件进行...
#### 四、MyBatis开发中的两种方式 在使用MyBatis进行开发时,有两种主要方式: 1. **基于XML映射文件**:这是传统的使用方式,适合于复杂查询场景。在该方式下,SQL语句写在XML映射文件中,并通过Java接口调用...
MyBatis提供了两种级别的缓存:一级缓存和二级缓存。一级缓存默认开启,用于同一个SqlSession中多次执行相同的SQL语句时,减少数据库访问;二级缓存则是在多个SqlSession之间共享的,适用于多对一或一对多等关联查询...
总结,ResultMap是MyBatis中处理复杂数据映射的关键,它提供了一种强大的方式来控制数据从数据库到Java对象的转换过程,包括一对一、一对多、多对多的关联关系处理,以及自定义类型转换等。熟练掌握ResultMap的使用...
6. **事务管理**:MyBatis支持手动和自动两种事务管理方式。在手动模式下,开发者需在代码中显式调用begin、commit和rollback方法;而在自动模式下,事务控制可以委托给容器(如Spring)处理。 7. **缓存机制**:...
5. **参数映射**:MyBatis支持两种参数映射方式:一种是通过`@Param`注解指定参数名,另一种是通过Map对象传入多个参数。 6. **结果映射**:结果映射定义了SQL查询结果如何映射到Java对象,包括基本类型、复杂类型...
MyBatis 支持两种关联映射方式:一对一和一对多。 - **一对一关联映射**: - **方式一**:直接在 POJO 类中嵌套另一个 POJO 类,这种方式简单但不支持懒加载。 - **方式二**:通过配置文件实现懒加载,需要在核心...
- **getMapper方法简介:** `getMapper`方法是MyBatis提供的一个工具方法,用于获取指定接口的代理对象,从而执行映射文件中的SQL语句。 - **使用场景:** 通常在业务逻辑层使用,通过获取Mapper接口的实例来调用...
在事务管理方面,MyBatis提供了DefaultTransactionFactory和JdbcTransactionFactory两种事务工厂,分别基于JDBC的默认事务管理和自定义事务管理。事务的隔离级别和传播行为可以通过配置进行调整。 除此之外,...
- 配置文件的加载方式有两种: - 使用 XML 配置文件。 - 使用 Java API 进行配置。 - 示例代码: ```java String resource = "org/mybatis/example/mybatis-config.xml"; InputStream inputStream = ...
Mybatis提供了两种Executor实现:SimpleExecutor(简单执行器)和CachingExecutor(缓存执行器),后者在SimpleExecutor的基础上增加了对本地缓存的支持。 5. **StatementHandler**:处理Statement对象,比如...
这两种方式都能方便地将 Java 参数映射到 SQL 的占位符。 6. **结果映射**:MyBatis 可以自动将查询结果映射到 Java 对象,通过 `resultMap` 标签可以定义复杂的映射关系,包括一对一、一对多、多对一、多对多等...
关联查询通常有两种方式:嵌套结果映射(Nested Result Maps)和关联映射(Association)。在这个DEMO中,我们可以选择关联映射来实现。在`ProductMapper.xml`文件中,添加一个查询方法,如: ```xml SELECT * ...