`
独善其身008
  • 浏览: 173337 次
  • 性别: Icon_minigender_2
  • 来自: 苏州
文章分类
社区版块
存档分类
最新评论

ibatis 多表之间的运用。

 
阅读更多

<sqlMap namespace="user"><--命名空间,好像2.0默认是开通的-->

字串9

<cacheModel type="LRU" id="oneDayCategory"><!--缓存配置,详细的资料请察看官方提供的用户手册,好像有中文版本的了 -->

字串8

<flushInterval hours="24" /> 字串7

</cacheModel> 字串5

<typeAlias type="com.infodeliver.pigeon.bean.User" alias="userbean" /><!--定义本地变量,为了方便使用 -->

字串4

<typeAlias type="com.infodeliver.pigeon.util.Condition" 字串6

alias="condition" /> 字串8

<typeAlias type="com.infodeliver.pigeon.bean.Role" alias="rolebean"/>

字串6

字串9

<resultMap id="get_group_result"

字串9

class="com.infodeliver.pigeon.bean.Group"><!-- 这就是不定义本地变量的结果-->

字串2

<result property="groupid" column="group_id" /> 字串7

<result property="groupname" column="group_name" /> 字串5

</resultMap> 字串7

字串8

<resultMap id="get_role_result" 

字串7

class="rolebean"> 字串2

<result property="role_id" column="role_id"/>

字串1

<result property="role_name" column="role_name"/>

字串6

</resultMap> 字串5

字串5

<resultMap id="get_user_result" 字串1

class="userbean"> 字串5

<result property="user_id" column="user_id" />

字串6

<result property="username" column="username" /> 字串4

<!--为user的group信息(属性groupid,groupname)配置 --> 字串1

<result property="group.groupid" column="group_id"  />

字串3

<result property="group.groupname" column="group_name" />

字串2

<!—这里的property="group.groupid"的含义已经很对象化了,group指的User对象里的数据类型-Group的别名;这里的column=”group_id”为group表里的PK:group_id而非user表的FK:group_id,不要弄混淆了!-->

字串7

<!--为user的role信息(属性roleid,rolename)配置,这里同样是User中的子对象,采取的处理却是不同的,通过group来避免使用子查询带来的性能问题,大家可以看到 字串8

第一个配置的粒度比较细微,配置子对象的属性,而role只是到对象一级,group中没有使用select="XXX"这样的子查询,从而避免了因为数据量大而引起二次查询带来的性能问题,而采用了一个role作为一个反面教材,大家比较一下可以发现其中的不同!--> 字串5

<result property="role" column="role_id" select="get_role"/>

字串3

<!—这里采用了子查询(两次查询),注意这里的role_id是role表的PK:role_id,而非user表的FK:role_id,大家不要搞错了>

字串6

</resultMap> 字串1

字串7

<select id="get_role" parameterClass="int" resultMap="get_role_result"><!--这里的parameterClass="int"因为父查询传过来的role_id为int型的-->

字串3

select * from sew_role where role_id=#value# 字串7

</select>

字串9

字串5

<select id="get_user" parameterClass="userbean" 字串1

resultMap="get_user_result">

字串6

select * from sew_user u,sew_group g<!--因为这里的group没有子查询,所以要使用嵌套!这样在执行的效率上比子查询有优势哦,大家应该很熟悉吧!--> 字串1

where u.group_id=g.group_id 

字串5

and u.user_id=#user_id#

字串3

</select>

字串1

<select id="checkuser" parameterClass="userbean"

字串1

resultMap="get_user_result">

字串6

select * from sew_user u,sew_group g 字串5

where u.group_id=g.group_id  字串5

and u.username=#username# 字串1

and u.password=#password#

字串1

</select>

字串5

<select id="get_group" resultMap="get_group_result"

字串6

parameterClass="int"> 字串5

select * from sew_group where group_id=#value# 字串9

</select>

字串6

<insert id="insertuser" parameterClass="userbean"> 字串4

insert into sew_user

字串3

values(sew_user_id_seq.nextval,<!—因为数据库里用了序列--> 字串7

#username#,#password#,#email#,#group.groupid#,#role.role_id#,#nationality#,

字串9

#tel#,#address#,#language#,#isEvectioner#,#realname#)

字串8

</insert> 字串5

<!—这里红色标注的:group.groupid同样的意思是User对象的数据成员:group,而groupid为子对象Group的数据成员(在UML里把带有setter和getter的数据成员称为属性。) -->

字串3

业务逻辑: 字串5

Public class UserService{ 字串4

public User getUser(User user){ 字串2

User user1=null; 字串1

try {

字串2

System.out.println(user.getUser_id()); 字串2

user1 =(User)getSqlMapExecutor().queryForObject("getuser",user); 字串5

} catch (SQLException e) {

字串2

e.printStackTrace(); 字串4

return null; 字串7

} 字串8

return user1; 字串1

}

字串2

}

字串9

字串7

字串8

字串4

字串2

字串7

请看操作部分的代码: 字串9

实现效果:察看user_id为2的用户在那个组。 字串4

UserService us=new UserService();

字串6

User ub=new User();

字串9

ub.setUser_id(2);

字串3

ub =(User)us.getUser_Group(ub);

字串5

System.out.println("ok"+"\n"+ub.getUsername()+"\n"+ub.getGroup().getGroupname()+"\n"+ub.getRole().getRole_name()); 字串7

System.out.println(ub.getGroup().getGroupname()); 字串5

字串7

增加用户:

字串6

User user=new User();

字串3

user.setUser_id(27); 字串2

user.setUsername("##梁静茹!!"); 字串2

user.setPassword("1111"); 字串5

user.setEmail("ljr@sohu.com"); 字串7

user.setLanguage("CN");

字串5

user.setAddress("无锡.江苏");

字串1

user.setNationality("中国"); 字串8

user.setTel("1390000000");

字串5

user.setRealname("欧阳静茹");

字串7

Group g=new Group();

字串6

g.setGroupid(1); 字串8

Role r =new Role(); 字串7

r.setRole_id(1); 字串1

user.setGroup(g); 字串2

user.setRole(r);

字串4

user=us.saveUser(user);

字串6

if(user!=null)

字串1

System.out.println(user.getGroup().getGroupid()); 字串5

字串7

以上所有操作都是通过的!

addthis_pub= 'wolfit'; addthis_logo= 'http://download.rainbowsoft.org/image/common/zbloglogo.gif'; addthis_brand= 'Z-Blog'; addthis_options= 'favorites, delicious, twitter, digg, myspace, facebook, google, live, email, more';

 


分享到:
评论

相关推荐

    ibatis多表查询过程

    在数据库设计中,多表查询通常涉及到表之间的关联,例如一对一、一对多、多对多关系。在iBatis中,我们可以使用`&lt;select&gt;`标签来定义多表查询的SQL语句。 ### 3. 使用`&lt;include&gt;`标签 为了保持SQL语句的整洁和可...

    ibatis 多表

    通过这些知识点的掌握和运用,你可以熟练地在 iBatis 中进行多表查询,有效地管理数据库操作,提升项目开发的效率。对于更复杂的需求,如分页、排序、聚合函数等,iBatis 也提供了相应的支持,使你能够灵活应对各种...

    ibatis one to many mapping

    3. `ibatis配置多表关联(一对一、一对多、多对多).htm` - 这个文件涵盖了多种关联映射,包括一对一、一对多和多对多,可能是全面的关联配置教程。 4. `ibatis多对多映射.htm` - 又一份多对多映射的详细说明。 5. `...

    ibatis 自动生成插件

    IBATIS是一款流行的数据持久层框架,它允许开发者将SQL语句直接写在XML配置文件中,提供了灵活的映射机制,使得Java对象与数据库表之间的交互更加便捷。 标签 "ibatis" 指的是这个插件是为IBATIS框架设计的。IBATIS...

    ibatis官方资料及所需要的Jar包

    Ibatis,全称为MyBatis,是一款优秀的Java持久层框架,它主要解决了对象与关系数据库之间的映射问题,使得开发者可以更加专注于SQL语句的编写,而无需关注JDBC的繁琐操作。Ibatis官方资料大全提供了全面的学习资源,...

    ibatis课件

    这部分可能深入探讨了iBatis的一些高级特性,如存储过程的调用、多数据源支持、插件机制,或者是关于最佳实践和性能优化的内容。 学习iBatis的过程中,你需要理解以下关键知识点: 1. **基本概念**:了解iBatis是...

    ibatis Guide

    ### ibatis:一种“半自动化”的ORM解决方案 ...通过上述知识点的梳理,我们不仅了解了ibatis的基本概念和操作流程,也对其高级功能有了深入的认识,为在实际项目中运用ibatis提供了理论基础和技术指导。

    iBatis java版中文的

    iBatis 是一款著名的开源持久层框架,专为Java开发者设计,用于简化数据库与应用程序之间的交互。这个框架的核心是SQL映射文件,它允许开发者编写动态的SQL来操作数据库,从而避免了传统的JDBC代码繁琐的过程。在...

    ibatis实战之一对多关联(源代码)

    本篇将聚焦于iBatis的一对多关联映射实战,帮助开发者更好地理解和运用这一特性。 在关系型数据库中,一对多关联是非常常见的一种数据关系,例如一个用户可以拥有多个订单,一个部门可以包含多个员工等。在iBatis中...

    IBATIS DOC

    1. **映射器(Mapper)**: 映射器是IBATIS的核心组件,它定义了数据库操作和Java对象之间的关系。映射器文件包含SQL语句和结果集映射,这些映射被Java接口引用,使得业务逻辑可以调用数据库操作。 2. **SQL映射文件...

    ibatis+struts2

    【描述】"ibatis+struts2 Demo"是一个实战项目,展示了如何在实际开发中运用这两个框架来实现基本的数据库CRUD(创建、读取、更新、删除)操作。iBatis是一个轻量级的持久层框架,它将SQL语句与Java代码分离,提高了...

    ibatis-2.3.0.677

    本文将针对iBatis 2.3.0.677版本的源码进行深入剖析,旨在帮助开发者更好地理解和运用这一强大的数据访问工具。 首先,让我们来看看iBatis的核心功能。iBatis主要解决了Java应用中的SQL映射问题,它将SQL语句与Java...

    IBATIS开发使用实例

    本文将围绕“IBATIS开发使用实例”这一主题,深入解析复杂SQL查询的应用,尤其是如何利用SQL进行多表关联、条件筛选以及聚合函数的使用。 ### IBATIS简介 IBATIS,现被称为MyBatis,是一种优秀的持久层框架,它...

    iBatis入门(三)

    iBatis的核心是SQL Maps,这些映射文件包含了SQL语句以及它们与Java对象之间的映射关系。接下来,我们将详细介绍如何使用iBatis,包括配置、SQL Maps的编写、数据映射以及工具的使用。 ### 一、iBatis简介 iBatis...

    iBATIS-SqlMaps中文教程集合

    - 多表关联查询:讲解如何处理一对一、一对多、多对多等关系的查询。 - 异常处理与事务管理:介绍如何配置和控制事务,以及处理可能出现的异常情况。 4. **高级篇** - MyBatis(iBATIS的升级版)简介:简述...

    iBATIS2.3及其说明文档

    iBATIS,全称为“Infrastructure As A Business Logic Translation Service”,是一个优秀的开源持久层框架,它允许开发者将SQL语句直接写在Java代码中,通过XML配置文件或注解来映射SQL与Java对象之间的关系,简化...

    ibatis源代码项目

    《深入解析iBatis源代码》 iBatis,作为一个轻量级的持久...通过解析SqlSessionFactory、SqlSession、Mapper等核心组件,以及XML映射文件解析和动态SQL的实现,我们可以更好地运用iBatis,提高项目开发的效率和质量。

    ibatis经验

    本篇文章将基于我的学习与实践经验,全面总结Ibatis的核心概念、主要功能以及在实际应用中的注意事项,帮助读者深入理解并熟练运用Ibatis。 ## 1. Ibatis简介 Ibatis是由Apache基金会维护的开源项目,它作为SQL映射...

    iBatis实战and源代码.zip

    首先,iBatis的核心概念是SQL映射文件,它定义了数据库操作与Java对象之间的映射关系。在《iBatis实战》这本书中,作者C.Begin、B.Goodin和L.Meadors会深入讲解如何编写这些映射文件,包括如何配置SQL语句、结果集...

    ibatis-缓存使用示例

    二级缓存是Mapper(或SqlMap)级别的,它是跨SqlSession的,可以在多个SqlSession之间共享数据。二级缓存需要在Mapper配置文件中明确开启,并且需要在实体类上使用@CacheNamespace或@CacheNamespaceRef注解来指定...

Global site tag (gtag.js) - Google Analytics