`
liangfeng366
  • 浏览: 78082 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
社区版块
存档分类
最新评论

iBATIS一对一查询操作

阅读更多
iBATIS配置
1。webapp/web-info/spring/appServlet/datasource.xml中配置数据源 事务Aop 日志Aop等信息
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

<context:component-scan base-package="com.appress.jdbctemplate"/>
<!-- 数据数的配置信息 -->
<util:properties id="dbconfig" location="classpath:dbconfig.properties"/>

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="#{dbconfig.driverClassName}" />
<property name="username" value="#{dbconfig.username}"/>
<property name="password" value="#{dbconfig.password}"/>
<property name="url" value="#{dbconfig.url}"/>
<property name="initialSize" value="2"/>
<property name="maxActive" value="3"/>
</bean>

<bean id="mySqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocations">
<list>
<value>classpath:SqlMapConfig.xml</value>
</list>
</property>
<property name="dataSource" ref="dataSource"/>
</bean>

<!-- 把 customerDao 注入  在 WEB中用注解 直接导入-->
<bean id="customerDao" class="com.appress.jdbctemplate.SqlMapClientCustomerDao">
<!-- <property name="sqlMapClient" ref="sqlMapClient"></property> -->
</bean>
</beans>
2.Resource/dbconfig.properites 配置数据库信息
#Created by JInto - www.guh-software.de
#Thu Jan 14 21:38:08 CST 2010
driverClassName=com.mysql.jdbc.Driver
password=123456
url=jdbc:mysql://127.0.0.1:3306/test
username=root
3。Resource/SqlMapconfig.xml 导入各个resource

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE sqlMapConfig       
    PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"       
    "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"> 
   
<sqlMapConfig>
<!-- enhancementEnabled 是否使用cglib来提高性能,如果classpath下没有cglib则被禁用 -->
<!-- cacheModelsEnabled 是否开启高速缓存,默认为true -->
<!-- lazyLoadingEnabled 是否开启延时加载,默认为true -->
<settings enhancementEnabled="true" cacheModelsEnabled="true"
lazyLoadingEnabled="true" errorTracingEnabled="true"/>
<!--   
放所有的 具体的配置文件放在这
每一个 domain放在这
<sqlMap resource="1/appress/domain/CustomerInfo.xml"/>
</sqlMapConfig>
4.dao
package com.appress.jdbctemplate;

import java.util.List;

public interface CustomerDao {
public CustomerInfo getById(int id);
}
5.
package com.appress.jdbctemplate;

import java.util.List;

import javax.annotation.PostConstruct;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;

import com.ibatis.sqlmap.client.SqlMapClient;

public class SqlMapClientCustomerDao extends SqlMapClientDaoSupport implements CustomerDao {

// 在web中 直接注入
@Autowired
private SqlMapClient mySqlMapClient;

@PostConstruct
public void injectSqlMapClient(){
setSqlMapClient(mySqlMapClient);
System.out.println("******injectSqlMapClient()********"+mySqlMapClient.getClass().getName());
}

@SuppressWarnings("unchecked")
public List<CustomerInfo> getAll() {
return getSqlMapClientTemplate().queryForList("getAllCustomer");
}

public CustomerInfo getById(int id){
CustomerInfo customer=(CustomerInfo)this.getSqlMapClientTemplate().queryForObject("getCustomerById", id);
return customer;
}

}
6测试类
package com.appress.jdbctemplate;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class Test {

/**
* @param args
*/
public static void main(String[] args) {

ApplicationContext context=new FileSystemXmlApplicationContext("src/main/webapp/WEB-INF/spring/appServlet/datasourcetest.xml");
SqlMapClientCustomerDao customerDao=(SqlMapClientCustomerDao)context.getBean("customerDao");
//SqlMapClientCustomerDao customerDao=new SqlMapClientCustomerDao();
System.out.println(customerDao.getById(1000));

}

}
7。两个domain
(1)
package com.appress.jdbctemplate;

public class GoodsInfo {
private int id;
private  String name;
private double price;

public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public String toString(){
return "GoodsInfo{"+"id:"+id+"name:"+name+"price:"+price+"}";
}
}
(2)
package com.appress.jdbctemplate;

import java.sql.Date;

public class CustomerInfo {

private int id;
private String first_name;
private String last_name;
private Date last_login;
private CustomerDetail customerDetail;

public CustomerDetail getCustomerDetail() {
return customerDetail;
}
public void setCustomerDetail(CustomerDetail customerDetail) {
this.customerDetail = customerDetail;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getFirst_name() {
return first_name;
}
public void setFirst_name(String firstName) {
first_name = firstName;
}
public String getLast_name() {
return last_name;
}
public void setLast_name(String lastName) {
last_name = lastName;
}

public Date getLast_login() {
return last_login;
}
public void setLast_login(Date lastLogin) {
last_login = lastLogin;
}

public String toString(){
return "{"+"id:"+id+" first_name:"+first_name+" last_name:"+last_name+" last_login:"
+last_login+customerDetail;
}


}
8 最重要的customer.xml
<?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>

<typeAlias alias="CustomerInfo" type="com.appress.jdbctemplate.CustomerInfo"/>
<!-- (1)种方式 -->
<typeAlias alias="customerDetail" type="com.appress.jdbctemplate.CustomerDetail"/>
<resultMap class="CustomerInfo" id="result">
<result property="id" column="id"/>
<result property="first_name" column="first_name"/>
<result property="last_name" column="last_name"/>
<result property="last_login" column="last_login"/>
</resultMap>
<!--  (2)种方式
<resultMap class="customerDetail" id="customerDetail2">
<result property="customerDetailId" column="id"/>
<result property="data" column="data0"/>
</resultMap>

<resultMap class="CustomerInfo" id="resultDetail" extends="result">
<result property="customerDetail.customerDetailId" column="customer_detail_id"/>
<result property="customerDetail.data" column="customer_detail_data"/>
</resultMap>-->
<!-- 
<resultMap class="" id=""></resultMap>
<select id="getAllCustomer" resultMap="result">
select * from t_customer
</select>


<select id="getCustomerById" resultMap="resultDetail" parameterClass="int">
select c.id as id,c.first_name as first_name ,c.last_name as last_name,
c.last_login as last_login ,
cd.id as customer_detail_id,
cd.data0 as customer_detail_data

from t_customer c inner join t_customer_detail cd on
c.customer_detail=cd.id
where c.id=#value#
</select>
-->
<!-- (1)中方式 -->
<resultMap class="customerDetail" id="detailResult">
<result property="customerDetailId" column="id"/>
<result property="data" column="data0"/>
</resultMap>
<resultMap class="CustomerInfo" id="resultDetail" extends="result">
<result property="customerDetail" column="customer_detail" select="getCustomerDetailById"/>
</resultMap>
<select id="getCustomerById" resultMap="resultDetail" parameterClass="int">
select * from t_customer where id=#value#
</select>
<select id="getCustomerDetailById" resultMap="detailResult" parameterClass="int">
select * from t_customer_detail where id=#value#
</select>

</sqlMap>

数据库表:
create table t_customer(
       id  int not null,     
       first_name varchar(50) not null,      
       last_name varchar(50) not null,      
       last_login date ,
       customer_detail int ,    
       CONSTRAINT pk_CustomerId PRIMARY key(id),      
       CONSTRAINT fk_CustomerDetail foreign key(customer_detail)      
       REFERENCES t_customer_detail(id)    
)

create table t_customer_detail(
id int not null,
data0 varchar(100) not null,
constraint pk_customerdetail primary key(id)
)
分享到:
评论
3 楼 haoluziqi 2013-04-01  
2 楼 haoluziqi 2013-04-01  
[flash=200,200][url][img][list]
[*]
引用
[/list][/img][/url][/flash]
1 楼 haoluziqi 2013-04-01  
文字

相关推荐

    Ibatis一对一映射提示

    本篇将深入讲解iBATIS一对一映射的概念、配置及应用,帮助你更好地理解和运用这个功能。 一对一映射在数据库设计中是指两个表之间存在一对一的关系,例如,一个员工可能只有一个部门,一个部门也只对应一个员工。在...

    ibatis的的增删改查和一对一、一对多查询

    本篇文章将详细探讨iBatis在增删改查(CRUD)操作以及一对一和一对多关系映射中的应用。 首先,让我们了解一下iBatis的CRUD操作: 1. **创建(Create)**:在iBatis中,创建数据通常通过`&lt;insert&gt;`标签实现。你需要...

    ibatis 一对多

    `CollectionHandler` 类则专门负责处理一对多和一对一的集合映射。 在实际应用中,我们还可以通过动态SQL来灵活控制一对多的加载,例如延迟加载(lazy loading)或按需加载。`&lt;if&gt;` 和 `&lt;choose&gt;` 等标签可以用来...

    ibatis 一对多 多对多完整映射

    总结,iBATIS的一对多和多对多关系映射是通过XML映射文件和自定义SQL查询实现的。理解这些配置和相关的源码有助于优化数据访问性能,同时使用合适的工具能提高开发效率。在实际项目中,务必根据具体需求选择合适的...

    ibatis 一对多关系映射

    首先,我们需要在映射文件中定义主表(一对一端)和从表(多对一端)的映射。假设我们有一个`User`类对应`users`表,一个`Order`类对应`orders`表,其中`orders`表有一个`user_id`字段作为外键关联到`users`表。 在...

    ibatis基本操作数据库

    通过定义`&lt;resultMap&gt;`,我们可以指定列名与Java属性的对应关系,甚至处理一对一、一对多、多对多等复杂关系。 4. **事务管理**:iBatis可以方便地进行事务控制,通过SqlSessionFactory和SqlSession对象,我们可以...

    ibatis多表查询

    在Ibatis中,多表查询是一项重要的功能,它允许我们处理复杂的数据库操作,例如一对多、多对一或一对一的关系。在这个例子中,我们将探讨如何使用Ibatis进行一对多的多表查询,以`book`和`user`两个表为例。 首先,...

    Ibatis多表查询

    在多表查询中,Ibatis 提供了多种方式来处理复杂的关联查询,包括一对一、一对多、多对一和多对多等关系。在这个例子中,我们将探讨如何在 Ibatis 中实现一对多的关系查询。 首先,我们创建了两个表:`book` 和 `...

    ibatis下oracle树查询

    总的来说,实现iBatis下Oracle的树查询需要对iBatis的映射机制、Oracle的层次查询语法以及可能的Java反编译工具有一定了解。这涉及到数据库设计、SQL优化、框架使用等多个方面的知识,是提升数据库操作技能的重要...

    ibatis入门--对数据库的操作

    【ibatis入门--对数据库的操作】这篇文章主要讲解了如何使用iBatis框架来操作数据库,iBatis是一个轻量级的持久层框架,它将SQL语句与Java代码分离,提高了开发效率和代码的可维护性。以下是文章涉及的关键知识点: ...

    ibatis多表查询过程

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

    IBATISDAO库类操作

    `IBATISDAO`库类通常会提供一系列通用的方法,如`selectOne()`, `selectAll()`, `insert()`, `update()`, `delete()`等,这些方法对应于SQL的查询、插入、更新和删除操作。通过泛型机制,`IBATISDAO`可以适应不同的...

    ibatis 文档查询

    虽然Java版本的iBATIS对XML数据的操作可能不再那么重要,但在某些场景下仍然有价值。iBATIS.NET则保留了这一特性,支持XML数据操作。 2. **映射语句关联对象** iBATIS提供了多种方式来处理对象之间的关联,如订单...

    主子表查询ibatis

    本文将深入探讨如何在iBATIS中进行主子表查询,以及涉及到的相关技术如一对多关系、日志管理库log4j等。 首先,主子表查询是数据库设计中常见的场景,通常涉及到一个“父”表(主表)和一个或多个“子”表(从表)...

    IBatis常用操作封装

    在`IBatisDao.java`中,我们可以看到对这些SQL操作进行了封装,以便于在项目中进行统一管理和调用。 1. **基本CRUD操作**:`IBatisDao`通常会包含增删改查(Create、Read、Update、Delete)的基本接口,如`insert()...

    ibatis总结 ibatis ibatis ibatis ibatis

    Ibatis 是一款轻量级的Java持久层框架,它允许开发者将SQL语句与Java代码分离,从而使得数据库访问更加灵活、易于维护。本篇文章将深入探讨Ibatis的核心概念、最佳实践以及与其他框架如Struts和Spring的整合。 1. ...

    iBatis条件查询

    iBatis是一个轻量级的Java持久层框架,它与Hibernate相比,更加灵活,适合于对数据库操作有自定义需求的项目。在本资源中,"iBatis条件查询"着重展示了如何根据业务需求定制SQL语句进行数据检索,尤其在不涉及复杂...

    Mybatis/ibatiS多表映射 一对一 一对多 extjs前台取值 详细讲解

    总结来说,这个话题覆盖了Mybatis/iBatis中的多表映射,通过XML配置文件处理一对一和一对多关系,以及如何在ExtJS前端通过Model和Grid获取并展示这些数据。了解这些知识对于开发涉及多表交互的应用至关重要,能够...

    ibatis做连接查询 .doc

    在Java开发中,iBatis是一个流行的数据访问框架,它允许开发者将SQL语句与Java代码分离,提供了一种更灵活的方式来处理数据库操作。本文将详细介绍如何使用iBatis进行连接查询。 首先,我们需要理解iBatis的工作...

Global site tag (gtag.js) - Google Analytics