`
andongoop
  • 浏览: 61392 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

ibatis 插入 查询 删除 多表关联

阅读更多
两个表 Dept(部门)、 Emp(员工)

部门中的列名
id 部门id
name 部门名称

员工表中的列
id 员工ID
name 员工名称
deptId 部门ID

员工和部门为多对一得关系所以员工类中肯定要关联一个部门
public class Emp {
private String id ;
private String name;
private Dept dept;

public class Dept {
private String id ;
private String name;

getter setter方法省略


1、插入员工信息操作
因为员工表中有一列是部门ID所以做插入操作时要将一个部门对象set到员工对象中可以有下列两种操作
配置文件 Emp.xml
<insert id="insertEmp" parameterClass="Emp">
insert into emp (id, name, age, sex, birthday, deptId) values (#id#, #name#, #dept.id#)
</insert>
value 中的dept.id 为ibatis的进一步导航,因为emp对象中有一个部门对象,我们可以通过部门对象拿到部门id放到sqlz中。

2、查询员工时我们也想查到他的部门信息
配置文件 Emp.xml
方法1:采用一条SQL语句搞定
<resultMap class="Emp" id="resultEmp">
<result property="id" column="id"/>
<result property="name" column="name"/>
<result property="dept.name" column="dname"/>
</resultMap>

<select id="selectById" parameterClass="String" resultMap="resultEmp">
select e.id, e.name name d.name dname from emp e, dept d where e.deptid = d.id and e.id=#id#
</select>
方法2:采用 N + 1条 SQL搞定
<resultMap class="Emp" id="resultEmp1">
<result property="id" column="id"/>
<result property="name" column="name"/>
<result property="dept" column="deptId" select="selectDetpByEmp"/>
</resultMap>

<select id="selectDetpByEmp" resultClass="Dept" parameterClass="String">
select * from dept where id=#deptId#
</select>

3、删除 假如我要删除部门的同时将该部门对应的员工全部删除
一种方式我可以在业务方法中先用一条SQL将部门中所有的员工删除,然后再用一条SQL将部门删除

不知都ibatis中是否提供了级联删除的功能项hibernate那样,大家共同探讨一下

上面的内容如有不妥还请指点。
分享到:
评论
7 楼 javaAlpha 2010-02-25  
楼主为什么不在业务逻辑层实现呢
6 楼 argan 2009-09-23  
kqy929 写道
xiaoping8411 写道
我真不知道你为什么要这样做?
个人觉得多此一举。

ibatis本就不是一个完全的ORM框架。
为啥硬要使用他做些没必要的事呢。
这些可由自己在业务里面控制,没必要交给ibatis来处理。


是的ibatis的定位就是一个sqlmap而已,只是辅助一下,并没有实现太多的orm的东西
5 楼 kqy929 2009-09-23  
xiaoping8411 写道
我真不知道你为什么要这样做?
个人觉得多此一举。

ibatis本就不是一个完全的ORM框架。
为啥硬要使用他做些没必要的事呢。
这些可由自己在业务里面控制,没必要交给ibatis来处理。
4 楼 zozoh 2009-09-22  
看这个: http://nutz.googlecode.com
3 楼 andongoop 2009-09-18  
有什么好的方法吗?
提出来呀?
2 楼 xiaoping8411 2009-09-18  
我真不知道你为什么要这样做?
个人觉得多此一举。
1 楼 andongoop 2009-09-18  
希望抛砖引玉的,怎么没有人提出意见

相关推荐

Global site tag (gtag.js) - Google Analytics