这里用表lock和key为例,一个lock可以配多个key,一个key只能对应一个lock.
数据库表
写道
create table lock(
id int,
lockName varchar
);
create table key(
id int,
lockId int,
keyName varchar
);
定义映射类:
写道
public class Key {
private int id;
private int lockId;
private String keyName;
private Lock lock;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getLockId() {
return lockId;
}
public void setLockId(int lockId) {
this.lockId = lockId;
}
public String getKeyName() {
return keyName;
}
public void setKeyName(String keyName) {
this.keyName = keyName;
}
public Lock getLock() {
return lock;
}
public void setLock(Lock lock) {
this.lock = lock;
}
}
public class Lock {
private int id;
private String lockName;
private List<Key> keys;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getLockName() {
return lockName;
}
public void setLockName(String lockName) {
this.lockName = lockName;
}
public List<Key> getKeys() {
return keys;
}
public void setKeys(List<Key> keys) {
this.keys = keys;
}
}
配置ibatis的 SqlMapping 文件
写道
<?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="lock">
<typeAlias alias="Key" type="com.longsky.ibatis.lock.model.Key"/>
<typeAlias alias="Lock" type="com.longsky.ibatis.lock.model.Lock"/>
<resultMap id="KeyResult" class="Key">
<result property="id" column="id"/>
<result property="keyName" column="keyName"/>
<result property="lock" column="lockId" select="getLockById"/>
</resultMap>
<!-- 通过key表中保存的lock的id实现的一对一关联,ibatis会使用getLockById(lockId)的结果填充lock属性 -->
<resultMap id="LockResult" class="Lock">
<result property="id" column="id"/>
<result property="lockName" column="lockName"/>
<result property="keys" column="id" select="getKeysByLockId"/>
</resultMap>
<!-- 通过lock表中的id实现的一对多关联,ibatis会使用getKeysByLockId(id)得到的List填充keys属性 -->
<select id="selectAllkeys" resultMap="KeyResult">
<!--[CDATA[
select id,lockId,keyName from lock_key_table
]]>
</select>
<select id="getLockById" parameterClass="int" resultClass="Lock">
<![CDATA[
select id,lockName from lock where id = #value#
]]>
</select>
<select id="selectAllLocks" resultMap="LockResult">
<![CDATA[
select id,lockName from lock
]]>
</select>
<select id="getKeysByLockId" parameterClass="int" resultClass="key">
<![CDATA[
select id,lockId,keyName from lock_key_table where lockId = #value#
]]-->
</select>
</sqlMap>
写测试类:
写道
import java.io.IOException;
import java.io.Reader;
import java.sql.SQLException;
import java.util.List;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
import com.longsky.ibatis.lock.model.Key;
import com.longsky.ibatis.lock.model.Lock;
public class Test {
@SuppressWarnings("unchecked")
public static void main(String[] args) throws SQLException {
SqlMapClient sqlMapper=null ;
try{
Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);
reader.close();
}
catch(IOException e){
throw new RuntimeException("Something bad happened while building the SqlMapClient instance." + e, e);
}
List<Lock> locks=(List<Lock>)sqlMapper.queryForList("selectAllLocks");
//取Lock对象。
for(int i=0;i<locks.size();i++){
Lock lock=(Lock)locks.get(i);
System.out.println("lock name = ["+lock.getLockName()+"] has keys as follows:");
//从Lock对象取List<Key>。
List<Key> keys=lock.getKeys();
for(int j=0;j<keys.size();j++){
System.out.println("key"+j+":"+keys.get(i).getKeyName());
}
}
}
}
分享到:
相关推荐
iBatis的核心功能是SQL映射,它通过XML配置文件或注解方式定义了SQL语句及其关联的Java对象。在2.3.4.726这个版本中,我们可以期待看到一些关键组件,如SqlMapConfig.xml配置文件的解析逻辑,SqlMapClient的构建和...
4. Result Maps:定义了查询结果如何映射到Java对象,包括字段与属性的对应关系,以及复杂的关联映射。 四、主要功能 1. 动态SQL:Ibatis-SqlMap支持在XML映射文件中编写动态SQL,使得SQL生成更加灵活。 2. 缓存...
《ibatis-sqlmaps-2_cn》将指导你如何将Java对象的属性与SQL语句中的占位符关联起来,以及如何将查询结果自动映射到Java对象。同时,教程还会讲解集合映射和自定义类型处理器的使用,这些对于处理复杂的数据结构至关...
ibatis配置多表关联(一对一、一对多、多对多
1. SQL映射文件:iBatis的精髓在于它的SQL映射文件,如`sqlmap-config.xml`,它定义了数据源、事务管理、类型别名等全局配置,并且包含对多个SQL映射文件的引用。在`ibatis-sqlmap-2.jar.zip`中,虽然未直接提供具体...
iBATIS 是一个开源的 Java 库,它为 SQL 数据库提供了映射框架,允许将 SQL 查询与 Java 代码直接关联,从而简化了数据访问层(DAL)的开发工作。在 iBATIS 2.3 版本中,我们可能会关注以下几个关键知识点: 1. **...
SQLMap是Ibatis的核心组件,它定义了如何执行SQL查询、处理结果集以及映射数据到Java对象。本参考将深入探讨Ibatis-SQLMap的相关知识点。 【描述】: 虽然描述中没有提供具体信息,但可以从“博文链接:...
5. 强大的结果集映射:可以通过配置文件实现复杂的结果集映射,包括一对一、一对多、多对多等关联关系的映射。 三、Ibatis 2.3.4 版本的更新与改进 虽然没有给出具体的版本更新日志,但通常每个新版本都会修复已知...
此外,Ibatis支持一对一、一对多、多对一、多对多等各种关联映射,使得复杂的数据结构处理变得简单。 总之,Ibatis是一个强大而灵活的持久层框架,它通过提供直观的映射机制,使开发者能更专注于业务逻辑而不是繁琐...
9. **灵活的映射策略**:支持一对一、一对多、多对多等多种关联映射,使得复杂关系的表之间的数据转换变得简单。 10. **SQL脚本测试**:在开发阶段,Ibatis提供了一个SqlMapConfig.xml文件,可以在其中配置数据源,...
4. **Result Maps**:定义了SQL查询结果如何映射到Java对象,包括字段名与对象属性的对应规则,以及处理复杂关联关系的方法。 5. **Statement Types**:包括SELECT、INSERT、UPDATE、DELETE四种基本的SQL语句类型,...
8. **高级特性**:可能包括动态SQL、存储过程的支持、批处理操作、一对一和一对多关联映射等进阶话题。 9. **实战教程**:通过具体的示例代码,展示如何创建一个完整的iBATIS应用程序,从数据库设计到编写SqlMap...
SQL Map是Ibatis的核心概念,它是一个XML文件或者注解,用来描述SQL语句及其关联的结果映射。通过SQL Map,开发者可以编写动态的SQL,使得SQL的编写更加灵活。此外,`ibatis-sqlmap-2.jar`还包含`SqlSession`和`...
一级缓存是SqlSession级别的,对于同一个SqlSession内的多次查询,如果查询条件相同,会直接返回缓存的结果。二级缓存则是Mapper级别的,允许跨SqlSession共享数据。 7. 事务管理:Ibatis与Spring等框架集成良好,...
iBATIS-SqlMaps允许开发者直接编写SQL语句,这意味着可以利用SQL的强大功能来处理复杂的查询需求,同时也提供了更少的限制,例如表每类、多表每类或多类每表等关系。 ### 三、准备使用SQLMaps 在开始使用SQLMaps...
- **多表查询**:介绍处理多表联接查询的方法。 #### 2.5 事务管理 - **事务概念**:解释事务的基本原理及其在iBATIS中的应用。 - **配置方法**:指导如何配置iBATIS以支持不同的事务管理方式。 #### 2.6 动态SQL ...
- 多表关联查询:讲解如何处理一对一、一对多、多对多等关系的查询。 - 异常处理与事务管理:介绍如何配置和控制事务,以及处理可能出现的异常情况。 4. **高级篇** - MyBatis(iBATIS的升级版)简介:简述...
### Ibatis多表查询知识点详解 #### 一、数据库表结构设计 为了演示Ibatis的多表查询功能,本文档采用了一个简单的例子:一个图书 (`book`) 表和一个用户 (`user`) 表,其中图书表与用户表之间存在一对多的关系。...
在Java应用中,通常我们需要通过JDBC来执行SQL查询,但这种方式需要手动处理结果集,转换成Java对象,而Ibatis提供了一种映射文件(Mapper XML)的方式,可以将SQL语句和Java对象直接关联。开发者在XML文件中定义SQL...
在Ibatis中,多表查询是一项重要的功能,它允许我们处理复杂的数据库操作,例如一对多、多对一或一对一的关系。在这个例子中,我们将探讨如何使用Ibatis进行一对多的多表查询,以`book`和`user`两个表为例。 首先,...