- 浏览: 1883078 次
- 性别:
- 来自: 合肥
文章分类
- 全部博客 (514)
- OPEN (41)
- WARN (33)
- EXPER (16)
- RESOURCE (7)
- TOOL (4)
- DWR (10)
- Struts1.x (10)
- Ibtais (18)
- MyEclipse (30)
- Sql Server (64)
- Tomcat (7)
- APACHE (4)
- JSP (18)
- SERVLET (6)
- ENGLISH (0)
- ECSide (8)
- JasperReports (7)
- JAVA (24)
- JS (42)
- XML (26)
- CVS (8)
- Mind (1)
- JQUERY (2)
- IBATIS (6)
- PROJECT (0)
- STRUTS2 (0)
- PROXOOL (0)
- SPRING (4)
- Hibernate (0)
- SSI (0)
- JBPM (11)
- FLEX (3)
- JSON (2)
- GWT (1)
- jeecms v3 (1)
- Flash (2)
- DATA (1)
- ORACLE (3)
- 查询oracle 中逗号分隔字符串中所有值 (1)
最新评论
-
小小西芹菜:
GoEasy web三步轻松实现web实时推送1. 引入goe ...
服务器推送技术 java -
kg_1997:
这个方法太棒了,可以不用to_date函数,实在是棒!!!
java/oracle日期处理 -
wodesunday:
:idea:
SQL的分段统计查询语句 -
wodesunday:
引用
SQL的分段统计查询语句 -
BlueSkator:
讲的有点浅,没有深入进去
tomcat需要的重新发布和重启服务器的几种情况
这篇实践一下一对一、一对多两种关系的映射操作,首先建立数据库
一共三张表 分别为 person表 card表 address表
关系是person有一个card,多个address数据
address表
address_id address_name address_person
1 nb 1
2 hz 1
3 bj 1
card表
card_id card_info
1 vip
person表
person_id person_name person_card_id
1 pf 1
新建一个工程,目录结构如下:
需要添加的jar包:
ibatis-3-core-3.0.0.242.jar
dglib-nodep-2.2.jar
asm-1.4.1.jar
ojdbc14_g.jar
可以在http://www.findjar.com/index.x这个网址上搜到相关jar包
SqlMapConfig.xml
相关的pojo
Card.java
Person.xml
PersonDAO.java
package cn.pf.ibatis.dao;
import java.util.List;
import cn.pf.ibatis.domain.Person;
/**
* ...
* @author pf
* @version 2010-3-22下午11:11:30
*/
public interface PersonDAO {
public List queryAllPerson();
}
test.java
上面采用的是Nested Results方法实现的,sql语句中的表关联均为手动实现,下面我们试着用Nested Select方法实现以下。
Person.xml
跟踪变量的时候发现personList = personDAO.queryAllPerson();语句并没有将card和address属性查出,均为null,在后面for循环输出的时候才进行赋值,但是又发现一个问题,test.java代码段中for循环输出前以前调用session.close(),按照hibernate的理解应该不能懒加载了,可是居然可以,而使用session.getConnection().close();直接关闭链接就无法查出card和address属性。不明白session.close()关闭了什么东西。。。
发现ibatis还有很多事情是需要自己动手编码完成的,hibernate自动化程度就高很多了,还是喜欢hibernate一点,ibatis 还有很多没搞明白,继续找资料,继续学习。
一共三张表 分别为 person表 card表 address表
关系是person有一个card,多个address数据
address表
address_id address_name address_person
1 nb 1
2 hz 1
3 bj 1
card表
card_id card_info
1 vip
person表
person_id person_name person_card_id
1 pf 1
新建一个工程,目录结构如下:
需要添加的jar包:
ibatis-3-core-3.0.0.242.jar
dglib-nodep-2.2.jar
asm-1.4.1.jar
ojdbc14_g.jar
可以在http://www.findjar.com/index.x这个网址上搜到相关jar包
SqlMapConfig.xml
<!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-config.dtd"> <configuration> <settings> <setting name="cacheEnabled" value="true"/> <setting name="lazyLoadingEnabled" value="true"/> <setting name="multipleResultSetsEnabled" value="true"/> <setting name="useColumnLabel" value="true"/> <setting name="useGeneratedKeys" value="false"/> <setting name="defaultExecutorType" value="SIMPLE"/> <setting name="defaultStatementTimeout" value="25000"/> settings> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="oracle.jdbc.driver.OracleDriver"/> <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/> <property name="username" value="puf"/> <property name="password" value="pufang890505"/> <property name="poolMaximumActiveConnections" value="10"/> <property name="poolMaximumIdleConnections" value="10"/> <property name="poolMaximumCheckoutTime" value="20000"/> <property name="poolTimeToWait" value="20000"/> <property name="poolPingQuery" value="NO PING QUERY SET"/> <property name="poolPingEnabled" value="false"/> <property name="poolPingConnectionsNotUsedFor" value="0"/> dataSource> environment> environments> <mappers> <mapper resource="cn/pf/ibatis/domain/Person.xml"/> mappers> configuration>
相关的pojo
person.java package cn.pf.ibatis.domain; import java.util.List; /** * ... * @author pf * @version 2010-3-22下午08:07:20 */ public class Person { private int id; private String name; private Card card; private List addressList; 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 Card getCard() { return card; } public void setCard(Card card) { this.card = card; } public List getAddressList() { return addressList; } public void setAddressList(List addressList) { this.addressList = addressList; } @Override public String toString() { String s = "Person [id=" + id + ", name=" + name; s += ", card=[id:"+card.getId()+", info:"+card.getInfo()+"]"; s += ", address=["; for(int i=0;i s += "[id:"+addressList.get(i).getId()+", address:"+addressList.get(i).getAddress()+"]"; } s += "]]"; return s; } }
Address.java package cn.pf.ibatis.domain; /** * ... * @author pf * @version 2010-3-22下午08:09:46 */ public class Address { private int id; private String address; private Person person; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public Person getPerson() { return person; } public void setPerson(Person person) { this.person = person; } }
Card.java
package cn.pf.ibatis.domain; /** * ... * @author pf * @version 2010-3-22下午08:07:48 */ public class Card { private int id; private String info; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getInfo() { return info; } public void setInfo(String info) { this.info = info; } }
Person.xml
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd"> <mapper namespace="cn.pf.ibatis.dao.PersonDAO"> <resultMap id="cardResultMap" type="cn.pf.ibatis.domain.Card"> <id property="id" column="card_id" /> <result property="info" column="card_info"/> resultMap> <resultMap id="addressResultMap" type="cn.pf.ibatis.domain.Address"> <id property="id" column="address_id" /> <result property="address" column="address_address"/> resultMap> <resultMap id="personResultMap" type="cn.pf.ibatis.domain.Person"> <id property="id" column="person_id" /> <result property="name" column="person_name"/> <association property="card" column="person_card_id" javaType="cn.pf.ibatis.domain.Card" resultMap="cardResultMap"/> <collection property="addressList" ofType="cn.pf.ibatis.domain.Address" resultMap="addressResultMap"/> resultMap> <select id="queryAllPerson" resultMap="personResultMap"> select c.card_id as card_id, c.card_info as card_info, p.person_id as person_id, p.person_name as person_name, a.address_id as address_id, a.address_address as address_address from Person p ,Address a,Card c where c.card_id = p.person_card_id and p.person_id = a.address_person_id select> mapper>
PersonDAO.java
package cn.pf.ibatis.dao;
import java.util.List;
import cn.pf.ibatis.domain.Person;
/**
* ...
* @author pf
* @version 2010-3-22下午11:11:30
*/
public interface PersonDAO {
public List queryAllPerson();
}
test.java
import java.io.IOException; import java.io.Reader; import java.util.List; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import cn.pf.ibatis.dao.PersonDAO; import cn.pf.ibatis.domain.Person; /** * ... * @author pf * @version 2010-3-16下午03:13:24 */ public class test { /** * ... * @param args */ public static void main(String[] args) { String resource = "SqlMapConfig.xml"; Reader reader = null; try { //使用ibatis提供的Resources类读取资源文件 reader = Resources.getResourceAsReader(resource); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } //根据资源文件内容建立session工厂 SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder().build(reader); //session工厂打开一个session SqlSession session = sqlMapper.openSession(true); PersonDAO personDAO = session.getMapper(PersonDAO.class); List personList; try{ personList = personDAO.queryAllPerson(); }finally{ session.close(); } }
上面采用的是Nested Results方法实现的,sql语句中的表关联均为手动实现,下面我们试着用Nested Select方法实现以下。
Person.xml
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd"> <mapper namespace="cn.pf.ibatis.dao.PersonDAO"> <resultMap id="cardResultMap" type="cn.pf.ibatis.domain.Card"> <id property="id" column="card_id" /> <result property="info" column="card_info"/> resultMap> <resultMap id="addressResultMap" type="cn.pf.ibatis.domain.Address"> <id property="id" column="address_id" /> <result property="address" column="address_address"/> resultMap> <resultMap id="personResultMap" type="cn.pf.ibatis.domain.Person"> <id property="id" column="person_id" /> <result property="name" column="person_name"/> <association property="card" column="person_card_id" javaType="cn.pf.ibatis.domain.Card" select="queryCardById"/> <collection property="addressList" ofType="cn.pf.ibatis.domain.Address" column="person_id" select="queryAddressByPersonId"/> resultMap> <select id="queryCardById" parameterType="int" resultMap="cardResultMap"> select card_id, card_info from card where card_id = #{id} select> <select id="queryAddressByPersonId" parameterType="int" resultMap="addressResultMap"> select address_id, address_address from address where address_person_id = #{id} select> <select id="queryAllPerson" resultMap="personResultMap"> select person_id, person_name, person_card_id from person select> mapper>
跟踪变量的时候发现personList = personDAO.queryAllPerson();语句并没有将card和address属性查出,均为null,在后面for循环输出的时候才进行赋值,但是又发现一个问题,test.java代码段中for循环输出前以前调用session.close(),按照hibernate的理解应该不能懒加载了,可是居然可以,而使用session.getConnection().close();直接关闭链接就无法查出card和address属性。不明白session.close()关闭了什么东西。。。
发现ibatis还有很多事情是需要自己动手编码完成的,hibernate自动化程度就高很多了,还是喜欢hibernate一点,ibatis 还有很多没搞明白,继续找资料,继续学习。
发表评论
-
There is no READABLE property named * in class 'java.lang.Integer'
2010-12-02 10:29 14063使用ibatis出现了下列问 ... -
关于ibatis中输入/输出各种类型的参数分析
2010-09-28 10:21 2151在ibatis,输入的参数对象常以parameterClass ... -
ibatis 返回新增id问题
2010-09-02 10:12 1802一般在处理ibatis新增的时候使用@@IDENTITY 来返 ... -
写在iBATIS3 GA之前-1000 words
2010-04-28 14:07 1067可以看到基本的架构没有变,唯一多的就是一个Mapper Ann ... -
写在iBATIS3 GA之前-API越来越象Hibernate
2010-04-28 14:06 1382Hibernate应该基本是这样,记得不是很清楚了: xml ... -
写在iBATIS3 GA之前-Cache
2010-04-28 14:05 1792缓存,也就是Cache 在iBATIS2中以其较粗的粒度而为 ... -
写在iBATIS3 GA之前-Dynamic SQL
2010-04-28 14:04 1612相比于iBATIS的大量难懂的动态标签,iBATIS3可谓巨大 ... -
ibatis 3 学习笔记 6
2010-04-28 10:07 3713SqlSessionFactoryBuilder SqlSe ... -
ibatis 3 学习笔记 5
2010-04-28 10:05 2284原创 ibatis 3 学习笔记 5 收藏 动态sql语句 ... -
ibatis 学习笔记 3
2010-04-27 12:11 4772SQL Map XML Files ibatis最大的优点就 ... -
ibatis 3 学习笔记 2
2010-04-27 12:05 2526上篇简单调试了一个实 ... -
ibatis 3 学习笔记1
2010-04-27 12:00 1729Ibatis更新还真快!呵呵,看到csdn友博客,受益匪浅,转 ... -
IBatis简单实现(附主键自动生成)
2010-01-02 14:54 2059相对 Hibernate和Apache OJB等“一站式”OR ... -
ibatis 开发手册
2009-10-22 15:39 2250atis 开发指南 ibatis Quick ... -
iBATIS模糊查询的实现实例浅析
2009-10-22 11:41 1395iBATIS模糊查询的实现是如何的呢?让我们先看看例子,仿照J ... -
iBATIS动态查询的实现浅析
2009-10-22 11:37 1336iBATIS动态查询的实现主 ... -
iBATIS ResultMap基础浅析
2009-10-22 11:22 3179iBATIS ResultMap是我们学习iBATIS中非常重 ...
相关推荐
IBatis学习笔记以及使用心得IBatis学习笔记以及使用心得IBatis学习笔记以及使用心得IBatis学习笔记以及使用心得IBatis学习笔记以及使用心得IBatis学习笔记以及使用心得
ibatis学习笔记 ibatis学习笔记 ibatis学习笔记 ibatis学习笔记 ibatis学习笔记 ibatis学习笔记 ibatis学习笔记
4.iBatis2学习笔记:SqlMap的配置总结(18条).doc 5.iBatis2学习笔记:入参和返回值的问题.doc 6.iBatis2学习笔记:一对多映射(双向).doc 7.iBatis2学习笔记:多对多映射(双向) .doc 8.iBatis2学习笔记:总结与...
### iBatis 学习笔记知识点总结 #### 一、iBatis 概念与特点 **1.1 iBatis 定义** - **iBatis** 是一个基于 Java 的开源持久层框架,它专注于 SQL 映射,提供了一种将对象与数据库交互过程中的 SQL 语句进行分离的...
iBATIS 是一款著名的Java持久层框架,它与Hibernate等全自动化ORM解决方案不同,提供了一种半自动化的处理方式,让开发者对SQL拥有更大的控制权。在iBATIS中,主要包括SQL Maps和Data Access Objects(DAO)两个核心...
通过本文的学习笔记,我们可以了解到 iBatis 在简化数据库访问的同时提供了足够的灵活性。尽管 iBatis 相比 Hibernate 在自动化程度上略显不足,但对于需要高度定制 SQL 查询的场景来说,iBatis 的优势十分明显。...
这篇“ibatis学习笔记(一)”可能是博主对Ibatis基础概念、安装配置以及基本使用的介绍,让我们通过标签“源码”和“工具”来深入探讨Ibatis的相关知识。 首先,Ibatis是一个轻量级的Java ORM(对象关系映射)框架...
这个压缩包集合了Ibatis的学习笔记、文档和相关资源,为想要深入理解和掌握Ibatis的人提供了一站式的自学材料。 Ibatis的核心概念是SQL Mapping,它允许开发者将SQL语句直接写在XML配置文件中,或者使用注解方式,...
### IBATIS学习笔记知识点详解 #### 一、IBATIS简介 iBatis是一个用于Java的数据持久化框架,类似于Hibernate、JDO和EJB等技术。它的主要特点是将对象映射为SQL语句,这使得开发人员可以更加灵活地控制SQL的执行,...
### ibatis教程学习笔记 #### 一、ibatis简介与特点 ibatis 是一个基于 Java 的持久层框架,它提供了一种将 SQL 映射到 Java 对象的方式,简化了 JDBC 的复杂操作。ibatis 通过 XML 配置文件或者注解的形式来描述 ...
【ibatis学习资料及个人学习笔记】 Ibatis,作为一个轻量级的持久层框架,它在Java开发领域中占有重要地位。本资料包是针对Ibatis的学习资源集合,旨在帮助初学者快速掌握这一强大的数据库操作工具。Ibatis的核心...
### iBatis学习笔记 #### 一、iBatis简介 iBatis,又被称为SqlMap,是一款开源的“半自动”对象关系映射(Object Relational Mapping, ORM)框架,它通过将SQL语句与Java代码进行解耦,简化了数据库操作。与全自动...