- 浏览: 259103 次
- 性别:
- 来自: 未定
文章分类
最新评论
-
zl544434558:
最后一行</filter> 多余的
Springmvc 乱码问题 -
imknown:
方法有效,感谢博主!
Springmvc 乱码问题 -
notafreak:
方法有效,感谢博主
Springmvc 乱码问题 -
linvar:
ligangdufs 写道 what about resin ...
Springmvc 乱码问题 -
ligangdufs:
what about resin
Springmvc 乱码问题
以前用过ibatis2,但是听说ibatis3有较大的性能提升,而且设计也更合理,他不兼容ibatis2.尽管ibatis3还是beta10的状态,但还是打算直接使用ibatis3.0,
ibatis3.0应该更简单高效.最近还自己写了个ibatis3.0与spring集成的bean,运行还正常,还自鸣得意了一番,但是当独立使用ibatis时,在事务管理这个方面还是出现不少问题,所以还是打算再认真研究一番ibatis3.0
1.SqlSessionFactory
每个ibatis应用都应该只有一个SqlSessionFactory的实例对象,所以一般设置为static属性或者使用spring管理时返回singleton类型,与spring集成时其实也是写一个怎样构建SqlSessionFactory的Bean,
构建SqlSessionFactory一般是SqlSessionFactoryBuild通过读取ibatis的配置文件而进行build的:
Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuild().build(reader);
配置文件SqlMapConfig.xml的一般结构(元素顺序不能变)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
<configuration>
<properties resource="jdbc.properties" />
<settings>
<setting name="cacheEnabled" value="false" />
<setting name="lazyLoadingEnabled" value="true" />
<setting name="multipleResultSetsEnabled" value="false" />
<setting name="useColumnLabel" value="true" />
<setting name="defaultExecutorType" value="SIMPLE" />
</settings>
<typeAliases>
<typeAlias alias="Person" type="test.Person"/>
</typeAliases>
<environments default="dev">
<environment id="dev">
<transactionManager type="jdbc">
<property name="" value="" />
</transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${user}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="sqlMappers/Person.xml" />
<mapper resource="sqlMappers/UserShop.xml" />
</mappers>
</configuration>
<settings />是配置ibatis的具体行为属性的,
<typeAliases />是为了将较长的module类名简化,在<mappers />里可以使用
<environment />是配置transaction manager和connection pooling的
<mappers />是sql语句的构造地方,一般每个module对应一个文件
2.SqlSession
可以从SqlSessionFactory得到SqlSession: sessionFactory.openSession();
SqlSession是一切Sql相关数据库操作的中心,insert,select,update,delete...
SqlSession不是线程安全的(也就是有状态的),所以它的作用域最好是在一个Thread下,每个Thread有自己的SqlSession对象实例,彼此不相关.
Never keep references to a SqlSession instance in a static field or even an instance field of a class. Never keep references to a
SqlSession in any sort of managed scope, such as HttpSession of of the Servlet framework.
默认sessionFacory.openSession()拿到的SqlSession不是自动commit的,所以如果是更新操作必须自己执行session.commit()
关闭SqlSession很重要,必须保证在线程结束时关闭这个SqlSession,可以在finally中
session.close();
那跟Spring集成是怎样做到这一点的呢,因为dataSource是由spring管理的,所以他可以保证在一个Thread的每个方法中拿到的Connection是同一个对象,
虽然每个方法从sessionFactory.openSession()拿到的SqlSession对象是不同的,但是sqlSession对象中的connection是相同的,所以spring就可以在service层的方法结束之前将这个connection commit跟close,这样就实现了事务控制.
我们往往在dao层是一个方法对应一个sql语句的,不在这里控制事务,控制事务应该在service层, dao的每个方法拿到的sqlsession对象都是不相同的(尽管它的connection可能相同).
那我们应该怎样在没有spring的情况下实现ibatis的事务控制呢?还要保持dao的结构,以保持能跟spring随时切换?
看来ThreadLocal要派上用场了
---占位----
3.讲完了SqlSession这个大头,再来说说具体的配置信息
配置文件结构
configuration
properties
settings
typeAliases
typeHandlers
objectFactory
plugins
environments
environment
transactionManager
dataSource
mappers
4.ibatis可以配置多个environment环境
供开发,测试,上线等切换
但是一个SqlSessionFactory只能对应一个environment,
也就是 one SqlSessionFactory per database
5.transactionManager
There are two TransactionManager types (i.e. type=”?????”) that are included with iBATIS:
JDBC – This configuration simply makes use of the JDBC commit and rollback facilities directly. It relies on the connection retrieved from the dataSource to manage the scope of the transaction.
MANAGED – This configuration simply does nothing, quite literally. It never commits, rolls back or closes a connection. Instead, it lets the container manage the full lifecycle of the transaction (e.g. Spring or a JEE Application Server context).
6.dataSource的配置
类型可使用UNPOOLED,POOLED,JNDI三种
7.接下来是重头戏mappers
这里是我们直接写sql的地方,ibatis在这里也花了最多功夫,特别是关于select的mapper.
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE mapper
PUBLIC "-//ibatis.apache.org//DTD mapper 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="test.UserShop">
<insert ...> ... </insert>
<select ...> ... </select>
<update ...> ... </update>
<delete ...> ... </delete>
</mapper>
(1).select
<select id="getUser" parameterType="int" resultType="test.User">
select * from user where userId = #{value}
</select>
注意#{value},resultType可以换成resultMap,这个resultMap就比较复杂了,也是最强大的工具,可以完成复杂的mapper(resultSet->object)
(2).insert,update,delete
这几个操作都比较类似,返回的一般是受影响的行数.
insert 可以返回auto_increament的值
<insert id="insertPerson" parameterType="Person"
useGeneratedKeys="true" keyProperty="userId">
insert into person(name,age) values(#{name},#{age})
</insert>
这样,传入的Person类对象的userId就会被set成auto_increament那个值.
(3).可以使用<sql id="columns">name,age</sql>构造可重用的sql片段
这样就可以在那四个主要的元素里用<include refid="columns">引用这个常用sql片段
(4).resultMap很复杂,它可以处理一对一,一对多,多对多关系
比如一个blog对应一个author, 一个blog对应多个post, 一个post对应多个comment
resultMap的结构:
resultMap
constructor (向java构造函数设置值)
idArg
arg
id (id result,同result)
result (字段映射注入)
association (一对一关系,它里面有自己的result映射)
collection (一对多关系, 它里面有自己的result映射,和可能的collection)
discriminator
(5).association (一个Blog对应一个Author)
<resultMap id="blogResult" type="Blog">
<association property="author" column="blog_author_id" javaType="Author">
<id property="id" column="author_id" />
<result property="username" column="author_username" />
</associaton>
</resultMap>
当然association也可以使用
<association property="author" column="blog_author_id" javaType="Author" resultMap="authorResult"/>
在Blog类定义里会有一个Author类字段,会自动装载数据
private Author author;
(6).collection (一个Blog对应多个Post)
<resultMap id="blogResult" type="Blog">
<collection property="posts" column="blog_id" ofType="Post" javaType="ArrayList" resultMap="postResult" />
</resultMap>
collection也可以精简为
<collection property="posts" ofType="Post" resultMap="postResult" />
相就地,在Blog类定义里会有:
private List<Post> posts
8.cache
其实我是不打算在ibatis这层做cache的,一般cache还是在service层做.
ibatis对于select才会进行cache,而我觉得这个时候cache没多大意义,因为多次請求相同的select語句(sql相同)而又没有进行表的相关update的情况并不多.
但还是看看ibatis是怎样处理cache的
要开启cache,需要在mapper文件中加上一句: <cache />
(1).cache所有select的結果
(2).在同一mapper文件中的insert,update,delete会flush cache
(3).cache使用least recently used(LRU)算法
(4).cache没有定时flush的功能
(5).cache保存1024个对象或list引用
(6).cache是read/write cache, 从cache拿出对象不是共享的,caller可以任意修改而不用担心其他caller也拿到相同的对象(相同的reference)
9.动态SQL
以前用jdbc时经常要根据输入条件而组装成不同的sql,这种就是动态sql
ibatis的动态sql关键词:
if, choose(when,otherwise),trim(where,set),foreach
(1).if
<if test="title != null">
AND title like #{title}
</if>
<![CDATA[
]]>
(2).choose(when,otherwise)只选择其中一种情况
<select ...>
<choose>
<when test="title != null">
AND title like #{title}
</when>
<when test="author != null and author.name != null">
AND title like #{author.name}
</when>
<otherwise>
AND featured = 1
</otherwise>
</choose>
</select>
(3).trim, where, set
<select id="findBlog" paramaterType="Blog" resultType="Blog">
select * from blog
<where>
<if test=”state != null”>
state = ${state}
</if>
<if test=”title != null”>
AND title like ${title}
</if>
<if test=”author != null and author.name != null”>
AND title like ${author.name}
</if>
</where>
</select>
<update id="updateAuthorIfNecessary"
parameterType="domain.blog.Author">
update Author
<set>
<if test="username != null">username=#{username},</if>
<if test="password != null">password=#{password},</if>
<if test="email != null">email=#{email},</if>
<if test="bio != null">bio=#{bio}</if>
</set>
where id=#{id}
</update>
(4).foreach
<select id="selectPostIn" resultType="domain.blog.Post">
SELECT *
FROM POST P
WHERE ID in
<foreach item="item" index="index" collection="list"
open="(" separator="," close=")">
#{item}
</foreach>
</select>
10.ibatis的annotation
ibatis3.0也增加了annotation,当然主要还是用在mapper这个问题上
个人感觉是鸡肋,暂时不会使用.
ibatis3.0应该更简单高效.最近还自己写了个ibatis3.0与spring集成的bean,运行还正常,还自鸣得意了一番,但是当独立使用ibatis时,在事务管理这个方面还是出现不少问题,所以还是打算再认真研究一番ibatis3.0
1.SqlSessionFactory
每个ibatis应用都应该只有一个SqlSessionFactory的实例对象,所以一般设置为static属性或者使用spring管理时返回singleton类型,与spring集成时其实也是写一个怎样构建SqlSessionFactory的Bean,
构建SqlSessionFactory一般是SqlSessionFactoryBuild通过读取ibatis的配置文件而进行build的:
Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuild().build(reader);
配置文件SqlMapConfig.xml的一般结构(元素顺序不能变)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
<configuration>
<properties resource="jdbc.properties" />
<settings>
<setting name="cacheEnabled" value="false" />
<setting name="lazyLoadingEnabled" value="true" />
<setting name="multipleResultSetsEnabled" value="false" />
<setting name="useColumnLabel" value="true" />
<setting name="defaultExecutorType" value="SIMPLE" />
</settings>
<typeAliases>
<typeAlias alias="Person" type="test.Person"/>
</typeAliases>
<environments default="dev">
<environment id="dev">
<transactionManager type="jdbc">
<property name="" value="" />
</transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${user}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="sqlMappers/Person.xml" />
<mapper resource="sqlMappers/UserShop.xml" />
</mappers>
</configuration>
<settings />是配置ibatis的具体行为属性的,
<typeAliases />是为了将较长的module类名简化,在<mappers />里可以使用
<environment />是配置transaction manager和connection pooling的
<mappers />是sql语句的构造地方,一般每个module对应一个文件
2.SqlSession
可以从SqlSessionFactory得到SqlSession: sessionFactory.openSession();
SqlSession是一切Sql相关数据库操作的中心,insert,select,update,delete...
SqlSession不是线程安全的(也就是有状态的),所以它的作用域最好是在一个Thread下,每个Thread有自己的SqlSession对象实例,彼此不相关.
Never keep references to a SqlSession instance in a static field or even an instance field of a class. Never keep references to a
SqlSession in any sort of managed scope, such as HttpSession of of the Servlet framework.
默认sessionFacory.openSession()拿到的SqlSession不是自动commit的,所以如果是更新操作必须自己执行session.commit()
关闭SqlSession很重要,必须保证在线程结束时关闭这个SqlSession,可以在finally中
session.close();
那跟Spring集成是怎样做到这一点的呢,因为dataSource是由spring管理的,所以他可以保证在一个Thread的每个方法中拿到的Connection是同一个对象,
虽然每个方法从sessionFactory.openSession()拿到的SqlSession对象是不同的,但是sqlSession对象中的connection是相同的,所以spring就可以在service层的方法结束之前将这个connection commit跟close,这样就实现了事务控制.
我们往往在dao层是一个方法对应一个sql语句的,不在这里控制事务,控制事务应该在service层, dao的每个方法拿到的sqlsession对象都是不相同的(尽管它的connection可能相同).
那我们应该怎样在没有spring的情况下实现ibatis的事务控制呢?还要保持dao的结构,以保持能跟spring随时切换?
看来ThreadLocal要派上用场了
---占位----
3.讲完了SqlSession这个大头,再来说说具体的配置信息
配置文件结构
configuration
properties
settings
typeAliases
typeHandlers
objectFactory
plugins
environments
environment
transactionManager
dataSource
mappers
4.ibatis可以配置多个environment环境
供开发,测试,上线等切换
但是一个SqlSessionFactory只能对应一个environment,
也就是 one SqlSessionFactory per database
5.transactionManager
There are two TransactionManager types (i.e. type=”?????”) that are included with iBATIS:
JDBC – This configuration simply makes use of the JDBC commit and rollback facilities directly. It relies on the connection retrieved from the dataSource to manage the scope of the transaction.
MANAGED – This configuration simply does nothing, quite literally. It never commits, rolls back or closes a connection. Instead, it lets the container manage the full lifecycle of the transaction (e.g. Spring or a JEE Application Server context).
6.dataSource的配置
类型可使用UNPOOLED,POOLED,JNDI三种
7.接下来是重头戏mappers
这里是我们直接写sql的地方,ibatis在这里也花了最多功夫,特别是关于select的mapper.
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE mapper
PUBLIC "-//ibatis.apache.org//DTD mapper 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="test.UserShop">
<insert ...> ... </insert>
<select ...> ... </select>
<update ...> ... </update>
<delete ...> ... </delete>
</mapper>
(1).select
<select id="getUser" parameterType="int" resultType="test.User">
select * from user where userId = #{value}
</select>
注意#{value},resultType可以换成resultMap,这个resultMap就比较复杂了,也是最强大的工具,可以完成复杂的mapper(resultSet->object)
(2).insert,update,delete
这几个操作都比较类似,返回的一般是受影响的行数.
insert 可以返回auto_increament的值
<insert id="insertPerson" parameterType="Person"
useGeneratedKeys="true" keyProperty="userId">
insert into person(name,age) values(#{name},#{age})
</insert>
这样,传入的Person类对象的userId就会被set成auto_increament那个值.
(3).可以使用<sql id="columns">name,age</sql>构造可重用的sql片段
这样就可以在那四个主要的元素里用<include refid="columns">引用这个常用sql片段
(4).resultMap很复杂,它可以处理一对一,一对多,多对多关系
比如一个blog对应一个author, 一个blog对应多个post, 一个post对应多个comment
resultMap的结构:
resultMap
constructor (向java构造函数设置值)
idArg
arg
id (id result,同result)
result (字段映射注入)
association (一对一关系,它里面有自己的result映射)
collection (一对多关系, 它里面有自己的result映射,和可能的collection)
discriminator
(5).association (一个Blog对应一个Author)
<resultMap id="blogResult" type="Blog">
<association property="author" column="blog_author_id" javaType="Author">
<id property="id" column="author_id" />
<result property="username" column="author_username" />
</associaton>
</resultMap>
当然association也可以使用
<association property="author" column="blog_author_id" javaType="Author" resultMap="authorResult"/>
在Blog类定义里会有一个Author类字段,会自动装载数据
private Author author;
(6).collection (一个Blog对应多个Post)
<resultMap id="blogResult" type="Blog">
<collection property="posts" column="blog_id" ofType="Post" javaType="ArrayList" resultMap="postResult" />
</resultMap>
collection也可以精简为
<collection property="posts" ofType="Post" resultMap="postResult" />
相就地,在Blog类定义里会有:
private List<Post> posts
8.cache
其实我是不打算在ibatis这层做cache的,一般cache还是在service层做.
ibatis对于select才会进行cache,而我觉得这个时候cache没多大意义,因为多次請求相同的select語句(sql相同)而又没有进行表的相关update的情况并不多.
但还是看看ibatis是怎样处理cache的
要开启cache,需要在mapper文件中加上一句: <cache />
(1).cache所有select的結果
(2).在同一mapper文件中的insert,update,delete会flush cache
(3).cache使用least recently used(LRU)算法
(4).cache没有定时flush的功能
(5).cache保存1024个对象或list引用
(6).cache是read/write cache, 从cache拿出对象不是共享的,caller可以任意修改而不用担心其他caller也拿到相同的对象(相同的reference)
9.动态SQL
以前用jdbc时经常要根据输入条件而组装成不同的sql,这种就是动态sql
ibatis的动态sql关键词:
if, choose(when,otherwise),trim(where,set),foreach
(1).if
<if test="title != null">
AND title like #{title}
</if>
<![CDATA[
]]>
(2).choose(when,otherwise)只选择其中一种情况
<select ...>
<choose>
<when test="title != null">
AND title like #{title}
</when>
<when test="author != null and author.name != null">
AND title like #{author.name}
</when>
<otherwise>
AND featured = 1
</otherwise>
</choose>
</select>
(3).trim, where, set
<select id="findBlog" paramaterType="Blog" resultType="Blog">
select * from blog
<where>
<if test=”state != null”>
state = ${state}
</if>
<if test=”title != null”>
AND title like ${title}
</if>
<if test=”author != null and author.name != null”>
AND title like ${author.name}
</if>
</where>
</select>
<update id="updateAuthorIfNecessary"
parameterType="domain.blog.Author">
update Author
<set>
<if test="username != null">username=#{username},</if>
<if test="password != null">password=#{password},</if>
<if test="email != null">email=#{email},</if>
<if test="bio != null">bio=#{bio}</if>
</set>
where id=#{id}
</update>
(4).foreach
<select id="selectPostIn" resultType="domain.blog.Post">
SELECT *
FROM POST P
WHERE ID in
<foreach item="item" index="index" collection="list"
open="(" separator="," close=")">
#{item}
</foreach>
</select>
10.ibatis的annotation
ibatis3.0也增加了annotation,当然主要还是用在mapper这个问题上
个人感觉是鸡肋,暂时不会使用.
评论
2 楼
wmr365
2010-05-09
user guide的简单翻译。不错。。。哈哈
1 楼
dwangel
2010-03-15
iBatis3的session 跟hibernate 的很像了。我也在研究怎么处理事务。
在参考hibernate的。
在参考hibernate的。
发表评论
-
Springmvc 乱码问题
2012-08-24 22:54 12110后端的Tomcat server.xml里配置的<Con ... -
logback note
2012-04-01 16:35 01.logback核心 a.Logger(记录者), b.A ... -
java Cookie
2011-11-01 21:33 1377cookie的组成部分: key, value, maxage ... -
java 正则表达式
2011-10-30 14:53 2143正则表达式的关键是 创建用于"在源字符串中匹配出某些 ... -
java email
2011-10-27 17:04 0http://coolshell.cn/articles/42 ... -
java 定时器
2011-10-27 11:26 01.java.util.Timer 1.1 对应单个后台线程 ... -
Resin note1
2011-06-27 23:11 1658<cluster-default> ... -
Maven note2
2011-04-25 14:16 01.The Build Lifecycle A build ... -
Maven note1
2011-04-24 18:07 01.What is Maven Although there ... -
freemarker使用总结
2010-06-20 16:51 35051.freemarker在使用spring MVC时会出现乱 ... -
springmvc 笔记
2010-05-22 10:27 6833struct2很不好用,springmvc比较给力,跟spr ... -
ibatis3 的返回值
2010-05-11 16:43 1180当执行sqlSession.selectOne("& ... -
java static util, helper
2010-04-18 19:50 1575我们经常会写一些util,helper类, 而一般这些类的方 ... -
Quartz 使用笔记
2010-04-16 21:35 14191.Quartz的主要构件: SchedulerFactory ... -
pinyin4j 笔记
2010-04-05 21:00 1806最近需要将城市名称转换为拼音去访问google weather ... -
ibatis3 的变量
2010-04-05 10:12 1758ibatis的变量其实没什么特别,就是使用#{}定义, 比如 ... -
VPS中的resin3.1和tomcat6
2010-03-28 11:00 1764兴冲冲地在VPS安装了jdk1.6, resin-pro-3. ... -
java URL encoding and decoding
2010-03-19 09:48 8676HTML编码规则是: 字符"a"-&quo ... -
Cookie小解
2010-03-18 19:27 1252Cookie是客户端与服务器 ... -
thinking in java (2)
2010-03-11 20:43 9321. Your objects might not get g ...
相关推荐
本篇文章基于“Ibatis3手册 Ibatis3参考手册”的标题及描述,深入解析Ibatis3的核心概念、架构特点以及如何进行实际操作,旨在帮助读者全面理解Ibatis3的工作原理与应用场景。 ### 一、Ibatis3简介 Ibatis3是一款...
介绍了ibatis3.0的配置技巧,包括比较复杂的sql语句的写法。
这个压缩包包含了iBATIS的相关使用文档和安装包,是学习和使用iBATIS的重要参考资料。 《iBATIS-SqlMaps-2.pdf》可能是关于iBATIS SQL映射器的详细指南,它会介绍如何编写SQL Map配置文件,这些文件定义了数据库...
**标题与描述解析** 《iBatis 使用手册》是一份详尽的开发...总的来说,《iBatis 使用手册》是开发者学习和使用iBatis的重要参考资料,它覆盖了从基础到高级的所有内容,可以帮助开发者快速上手并熟练掌握iBatis框架。
【标题】:“Ibatis-SQLMap相关参考” 在IT领域,Ibatis是一个广泛使用的轻量级持久层框架,它提供了一种将SQL语句与Java代码分离的方式,从而简化了数据库操作。SQLMap是Ibatis的核心组件,它定义了如何执行SQL...
通过Ibatis3xml文件配置+Mysql实现数据批量插入,原先在网上找很多,都是关于批量更新,批量插入的很少,而且其写法又完全不同,所以自己研究了一下。可供参考。另外插入时如出现内容报错,请参照my.cnf修改书库配置...
iBatis3 GA(General Availability)版本是其稳定且广泛使用的版本,而Javadoc API则是开发者理解和使用iBatis3的重要参考资料。本文将基于提供的Javadoc HTML文档,解析并详细介绍其中的关键知识点,帮助开发者更好...
"Ibatis 与 Spring3 整合"这一主题,涉及到的是两个知名Java框架——Ibatis(一个轻量级的持久层框架)和Spring(一个全面的企业级应用框架)的协同工作。下面我们将深入探讨这一整合过程中的关键知识点。 Ibatis ...
**Ibatis 中文参考文档详解** Ibatis 是一个优秀的、开源的 Java 数据库持久层框架,它简化了 JDBC 的繁琐工作,提供了灵活的映射机制,使得 SQL 和 Java 代码可以更加紧密地结合,便于数据库操作。这个文档是针对 ...
《iBatis 3.1 官方中文帮助文档》是开发者们学习和掌握iBatis框架的重要参考资料,尤其对于那些使用中文作为主要工作语言的程序员来说,这是一份非常实用的指南。iBatis是一个优秀的持久层框架,它允许开发者将SQL...
《Ibatis 入门经典 实例》 Ibatis 是一款著名的轻量级 Java 持久层框架,它提供了一种映射 SQL 和 Java 对象的简单方式...在实际操作中,参考提供的 `ibatisTest` 示例,你会发现学习 Ibatis 是一件轻松而有趣的事情。
Ibatis文档是学习和解决问题的重要资源,它包含了详细的API参考、配置指南、最佳实践和常见问题解答。通过阅读文档,你可以了解如何配置Ibatis、创建Mapper接口和XML映射文件,以及如何处理复杂的查询和关联。 在...
关于Ibatis的中文参考文档《iBATIS-SqlMaps-2_cn.pdf》,这份文档详细介绍了Ibatis的配置、映射文件、SQL映射元素、结果映射、动态SQL等内容,是学习和使用Ibatis的重要参考资料。 而Hibernate的中文参考文档...
在IT行业中,数据库连接是应用程序的核心部分,尤其是在使用ORM(对象关系映射)框架时,如IBATIS。本文档将深入探讨如何在IBATIS框架下连接和管理多个数据库,以便于在不同环境中灵活切换或同时操作多个数据源。 ...
3. **实践项目**: 尝试在一个小项目中使用iBATIS,实践中遇到的问题会加深对iBATIS的理解。 4. **了解MyBatis**: 虽然iBATIS已被MyBatis取代,但两者有很多相似之处。了解MyBatis的新特性,如注解支持和更强大的...
为了更好地理解iBATIS 3的使用方式,我们可以参考以下示例,展示如何使用iBATIS 3来映射一个简单的Java类——`Automobile`类。如清单1所示,`Automobile`类包含了四个属性:`id`、`make`、`model`和`year`。 ```...
iBATIS3 用户手册 iBATIS 是一个Java编程语言中的持久层框架,它提供了将SQL语句与Java代码解耦的能力,使开发者能够更灵活地处理数据库操作。iBATIS3是该框架的一个版本,引入了更多改进和增强功能,以适应现代...
本书详细介绍了iBATIS这一流行开源框架的核心概念、工作原理以及在实际项目中的应用技巧,是iBATIS学习者和使用者不可或缺的参考资料。 ### IBATIS哲学 iBATIS的哲学强调简洁性与灵活性,它旨在提供一个轻量级的...
《iBATIS实战》既可为广大的开发人员(不仅仅是Web应用程序开发人员)提供指导,也可为架构师的项目决策提供参考。项目经理、数据库管理员、质量保证员与测试员以及系统分析师也能从《iBATIS实战》中受益。 作者简介 ...