- 浏览: 13413 次
- 性别:
- 来自: 合肥
文章分类
最新评论
在开发过程中最能帮助你的是什么?是框架,一个优秀的框架可以极大的提高你的效率。
struts给了我们什么?MVC的实现,国际化、灵活。还有很多。不过,在一个通常的WEB应该中
,是不能缺少数据库的,而struts在这方面并没有给我们提供什么有效的帮助。通常情况下我
们做这个的时候有几个选择。
最直接的当然是JDBC啊,自己写connect、statment和resultset等等的代码,结果是累死自己
。
然后一种方法是EJB,EJB确实是一个好东西,可惜在很多场合用不上,起码它很烦,速度很慢
还有一种选择就是JDO及类似的东西。最著名是free的应该是castor,hibernate等。
现在我们又多了一种选择,就是ibatis Db Layer,它的主页是http://www.ibatis.com,为什
么说它好,让我们来看看作者自己的说明吧,使用ibatis的理由
另外一点它是100% Open Source Freeware
下面我们就来看一看,做一个简单的ibatis需要哪一些工作。然后一步一步深入探索它的强大
功能。在实践中来看它的好处在哪里。
在ibatis的网站上有一个它自己的petstore,在我个人看来是最简洁的petstore了,跟
struts1.0结合。应该说是一个不错的教程。希望大家能够好好研究。当然,作为入门。我们
先来做一个简单的程序。所采用的库嘛,就仍然是用petstore的了。数据库也是选择Oracle(
为什么选择Oracle,很多朋友不理解,怎么不用mysql之类的呢,一个主要的原因是个人爱好
,Oracle毕竟是商业数据库,有它的强大之处,另外在linux下它也是免费的,:)。废话少说
,先用jpetstore3.1提供的ddl建立一个库吧。
然后在eclipse里建立一个ibatisDemo的工程。加入ibatis提供的库,建立相就的目录。看一下
一个最简单的程序需要哪一些文件。我们选择一个简单表,即Category这个表的操作来演示功
能
文件路径 功能说明 备注 config\properties\petstore.properties 可变参数配置文件,所
有根据环境不同的参数都放在这里 config\properties\simple\dao.xml dao配置文件,主要
存放dao对象和数据池设置 config\properties\simple\sql-map-config-storedb.xml 真正的
核心配置文件 config\sqlmap\Category.xml 存放Category的数据操作的SQL
com.ewuxi.champion.exception.DaoException.java 自定义的Exception类,不用说了吧
com.ewuxi.champion.Service.java 一个服务类,用于初始化
com.ewuxi.champion.persistence.dao.DaoCommon Dao层的统一操作类,提供一些公共函数
com.ewuxi.champion.persistence.dao.CategoryDb Category的操作类
com.ewuxi.champion.persistence.vo.Category valueObject 值对象
com.ewuxi.champion.persistence.dao.CategoryDbTest 单元测试类
下面一个一个文件详细说明
这个不用解释,就是数据库的连接串,如果你在自己的机器上运行,当然这些都是需要改的。
上面这一段也是很简单的,连一个dao也没有配置,也就是说,用的是默认的Dao。其中
<context name="StoreDaoManager" default="true">表示它是默认的数据库配置(它可以根据
名字不同同时连接几个数据库的)。
sql-map-config-storedb.xml
这里真正实现了数据库连接,我们使用的是dbcp的连接池。JDBC的配置大家都很熟了。
${SimpleDriver}就是指的前面petstore.properties中的SimpleDriver的内容。
而<sql-map resource="sqlmap/Category.xml" />则表示包含Category.xml这个文件。
Category.xml
上述文件就是真正的SQL所存在的地方。
值对象。当执行查询的时候,dblay会封装出一个Category对象或者一个Category的list集合
。其中数据列CATID就对象javabean的categoryId值。name是自定义的
此处result-map="result"表示返回结果以后,就会参照前面的result来返回对象。select
CATID, NAME, DESCN from CATEGORY where CATID = #categoryId#标准的SQL,只不过这一点
CATID = #categoryId#有些不同,#categoryId#表示传递一个Category对象时,Dblay会自动
取得categoryId的值来执行SQL
再来看一个
这个地方就体现了dblayer的强大之处,动态SQL。平常我们经常碰到的情况是根据不同的情况
,执行的SQL有一点点不一样。写在程序里,要写不少的if then之类的,在这里,dbLayer给
你一下解决了。比如在这里,我们三个值都是String对象,所以通过isNotNull就可以实现几
种不同的update了,比如,如果我只想修改DESCN这个字段,只要传过去的Category对象只有
categoryId和description有值,就会生成update CATEGORY set DESCN = #description#
where CATID =#categoryId#。同样如果传递的对象只有categoryId和name有值,就会生成
update CATEGORY set NAME = #name# where CATID =#categoryId#。是否很强大?:)
前面这两种,参数的传递方式是内置参数,也就是CATID =#categoryId#这种,大家可能不太
习惯,那就看一看标准的写法吧。
这里面的insert语句想来大家都很熟了吧?这个时候怎么取得参数呢?关键在于这里
parameter-map="insert-params",表示会读取<parameter-map name="insert-params">的设
置,而这个设置也不用多解释了吧,就是按顺序,三个?分别对应三个值。还能指明他们的数
据类型。
下面来看看Service.java
一个静态方法,从resource文件中读出配置,最后用DaoManager.configure(reader);完成配
置。
DaoCommon
三个主要的函数,第一个是得到默认的DAO对象,后两个是根据一个dao对象或者一个参数(也
就是前面<context name="StoreDaoManager" >中是name值)。取得SqlMap对象,这个对象是主
要的数据操作接口。
下面的一些函数是对事务的一些封装。想必也很容易理解。
然后让我们来看CategoryDb的内容
每一个函数都很类似的。关键就在这一句(Category) sqlMap.executeQueryForList
("findByPrimaryKeyCategoryDao",vo);。看到"findByPrimaryKeyCategoryDao",这个对应于
前面Category.xml中的名字。而vo则是一个Category对象。
最后是CategoryDbTest类,这个是我们的单元测试程序
struts给了我们什么?MVC的实现,国际化、灵活。还有很多。不过,在一个通常的WEB应该中
,是不能缺少数据库的,而struts在这方面并没有给我们提供什么有效的帮助。通常情况下我
们做这个的时候有几个选择。
最直接的当然是JDBC啊,自己写connect、statment和resultset等等的代码,结果是累死自己
。
然后一种方法是EJB,EJB确实是一个好东西,可惜在很多场合用不上,起码它很烦,速度很慢
还有一种选择就是JDO及类似的东西。最著名是free的应该是castor,hibernate等。
现在我们又多了一种选择,就是ibatis Db Layer,它的主页是http://www.ibatis.com,为什
么说它好,让我们来看看作者自己的说明吧,使用ibatis的理由
引用
10、知道怎样操作10种以上的数据库
9 、可配置的caching(包括从属)
8、支持DataSource、local transaction managemen和global transaction
7、简单的XML配置文档
6、支持Map, Collection, List和简单类型包装(如Integer, String)
5、支持JavaBeans类(get/set 方法)
4、支持复杂的对象映射(如populating lists, complex object models)
3、对象模型从不完美(不需要修改)
2、数据模型从不完美(不需要修改)
1、你已经知道SQL,为什么还要学习其他东西
9 、可配置的caching(包括从属)
8、支持DataSource、local transaction managemen和global transaction
7、简单的XML配置文档
6、支持Map, Collection, List和简单类型包装(如Integer, String)
5、支持JavaBeans类(get/set 方法)
4、支持复杂的对象映射(如populating lists, complex object models)
3、对象模型从不完美(不需要修改)
2、数据模型从不完美(不需要修改)
1、你已经知道SQL,为什么还要学习其他东西
另外一点它是100% Open Source Freeware
下面我们就来看一看,做一个简单的ibatis需要哪一些工作。然后一步一步深入探索它的强大
功能。在实践中来看它的好处在哪里。
在ibatis的网站上有一个它自己的petstore,在我个人看来是最简洁的petstore了,跟
struts1.0结合。应该说是一个不错的教程。希望大家能够好好研究。当然,作为入门。我们
先来做一个简单的程序。所采用的库嘛,就仍然是用petstore的了。数据库也是选择Oracle(
为什么选择Oracle,很多朋友不理解,怎么不用mysql之类的呢,一个主要的原因是个人爱好
,Oracle毕竟是商业数据库,有它的强大之处,另外在linux下它也是免费的,:)。废话少说
,先用jpetstore3.1提供的ddl建立一个库吧。
然后在eclipse里建立一个ibatisDemo的工程。加入ibatis提供的库,建立相就的目录。看一下
一个最简单的程序需要哪一些文件。我们选择一个简单表,即Category这个表的操作来演示功
能
文件路径 功能说明 备注 config\properties\petstore.properties 可变参数配置文件,所
有根据环境不同的参数都放在这里 config\properties\simple\dao.xml dao配置文件,主要
存放dao对象和数据池设置 config\properties\simple\sql-map-config-storedb.xml 真正的
核心配置文件 config\sqlmap\Category.xml 存放Category的数据操作的SQL
com.ewuxi.champion.exception.DaoException.java 自定义的Exception类,不用说了吧
com.ewuxi.champion.Service.java 一个服务类,用于初始化
com.ewuxi.champion.persistence.dao.DaoCommon Dao层的统一操作类,提供一些公共函数
com.ewuxi.champion.persistence.dao.CategoryDb Category的操作类
com.ewuxi.champion.persistence.vo.Category valueObject 值对象
com.ewuxi.champion.persistence.dao.CategoryDbTest 单元测试类
下面一个一个文件详细说明
petstore.properties ################################################################## SIMPLE CONFIGURATION SECTION ################################################################## ## SimpleDataSource properties ## Use only if useSimpleConfiguration=true SimpleDriver=oracle.jdbc.OracleDriver SimpleUrl=jdbc:oracle:thin:@10.0.0.5:1521:champion SimpleUsername=pet SimplePassword=pet
这个不用解释,就是数据库的连接串,如果你在自己的机器上运行,当然这些都是需要改的。
dao.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE dao-config PUBLIC "-//iBATIS.com//DTD DAO Configuration 1.0//EN" "http://www.ibatis.com/dtd/dao.dtd"> <dao-config> <context name="StoreDaoManager" default="true"> <!-- Configure the transaction pool. --> <transaction-pool implementation="com.ibatis.db.dao.jdbc.SqlMapDaoTransactionPool"> <property name="sql-map-config-file" value="properties/simple/sql-map-config- storedb.xml"/> </transaction-pool> </context> </dao-config>
上面这一段也是很简单的,连一个dao也没有配置,也就是说,用的是默认的Dao。其中
<context name="StoreDaoManager" default="true">表示它是默认的数据库配置(它可以根据
名字不同同时连接几个数据库的)。
sql-map-config-storedb.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sql-map-config PUBLIC "-//iBATIS.com//DTD SQL Map Config 1.0//EN" "http://www.ibatis.com/dtd/sql-map-config.dtd"> <sql-map-config> <properties resource="properties/petstore.properties" /> <settings maxExecute="0" maxExecutePerConnection="0" maxTransactions="0" cacheModelsEnabled="true" statementCacheSize="175" useBeansMetaClasses="false" useGlobalTransactions="false" /> <datasource name="jpestoreSimple" factory-class="com.ibatis.db.sqlmap.datasource.DbcpDataSourceFactory" default="true" > <property name="JDBC.Driver" value=" ${SimpleDriver}"/> <property name="JDBC.ConnectionURL" value=" ${SimpleUrl}"/> <property name="JDBC.Username" value=" ${SimpleUsername}"/> <property name="JDBC.Password" value=" ${SimplePassword}"/> <property name="Pool.MaximumActiveConnections" value="15"/> <property name="Pool.MaximumIdleConnections" value="15"/> <property name="Pool.MaximumWait" value="1000"/> </datasource> <sql-map resource="sqlmap/Category.xml" /> </sql-map-config>
这里真正实现了数据库连接,我们使用的是dbcp的连接池。JDBC的配置大家都很熟了。
${SimpleDriver}就是指的前面petstore.properties中的SimpleDriver的内容。
而<sql-map resource="sqlmap/Category.xml" />则表示包含Category.xml这个文件。
Category.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sql-map PUBLIC "-//iBATIS.com//DTD SQL Map 1.0//EN" "http://www.ibatis.com/dtd/sql-map.dtd"> <sql-map name="Category"> <result-map name="result" class="com.ewuxi.champion.persistence.vo.Category"> <property name="categoryId" column="CATID" columnIndex="1" /> <property name="name" column="NAME" columnIndex="2"/> <property name="description" column="DESCN" columnIndex="3"/> </result-map> <mapped-statement name="findByPrimaryKeyCategoryDao" result-map="result"> select CATID, NAME, DESCN from CATEGORY where CATID = #categoryId# </mapped-statement> <dynamic-mapped-statement name="findCategoryDao" result-map="result"> select CATID, NAME, DESCN from CATEGORY <dynamic prepend="where"> <isNotNull prepend="and" property="categoryId" > CATID = #categoryId# </isNotNull> <isNotNull prepend="and" property="name" > NAME = #name# </isNotNull> <isNotNull prepend="and" property="description"> DESCN = #description# </isNotNull> </dynamic> </dynamic-mapped-statement> <mapped-statement name="findCategoryDaoCount" result-class="java.lang.Integer"> select count(1) as value from CATEGORY </mapped-statement> <!-- ============================================= mapped-statement ============================================= --> <dynamic-mapped-statement name="updateByPrimaryKeyCategoryDao"> update CATEGORY <dynamic prepend="set"> <isNotNull prepend="," property="name" > NAME = #name# </isNotNull> <isNotNull prepend="," property="description"> DESCN = #description# </isNotNull> </dynamic> where CATID =#categoryId# </dynamic-mapped-statement> <!-- ============================================= mapped-statement ============================================= --> <mapped-statement name="deleteByPrimaryKeyCategoryDao"> delete from CATEGORY where CATID =#categoryId# </mapped-statement> <!-- ============================================= OPTIONAL EXPLICIT PARAMETER MAP ============================================= --> <parameter-map name="insert-params"> <property name="categoryId"/> <property name="name" type="VARCHAR"/> <property name="description" type="VARCHAR"/> </parameter-map> <!-- ============================================= MAPPED STATEMENTS - w/Explicit Parameter Map ============================================= --> <mapped-statement name="insertCategoryDao" parameter-map="insert-params" > insert into CATEGORY ( CATID,NAME,DESCN) values ( ?,?,? ) </mapped-statement> </sql-map>
上述文件就是真正的SQL所存在的地方。
<result-map name="result" class="com.ewuxi.champion.persistence.vo.Category"> <property name="categoryId" column="CATID" columnIndex="1" /> <property name="name" column="NAME" columnIndex="2"/> <property name="description" column="DESCN" columnIndex="3"/> </result-map>这一段的内容表示返回的对象是com.ewuxi.champion.persistence.vo.Category,也就是我们
值对象。当执行查询的时候,dblay会封装出一个Category对象或者一个Category的list集合
。其中数据列CATID就对象javabean的categoryId值。name是自定义的
引用
<mapped-statement name="findByPrimaryKeyCategoryDao" result-map="result">
select CATID, NAME, DESCN from CATEGORY where CATID = #categoryId#
</mapped-statement>
select CATID, NAME, DESCN from CATEGORY where CATID = #categoryId#
</mapped-statement>
此处result-map="result"表示返回结果以后,就会参照前面的result来返回对象。select
CATID, NAME, DESCN from CATEGORY where CATID = #categoryId#标准的SQL,只不过这一点
CATID = #categoryId#有些不同,#categoryId#表示传递一个Category对象时,Dblay会自动
取得categoryId的值来执行SQL
再来看一个
<dynamic-mapped-statement name="updateByPrimaryKeyCategoryDao"> update CATEGORY <dynamic prepend="set"> <isNotNull prepend="," property="name" > NAME = #name# </isNotNull> <isNotNull prepend="," property="description"> DESCN = #description# </isNotNull> </dynamic> where CATID =#categoryId# </dynamic-mapped-statement>
这个地方就体现了dblayer的强大之处,动态SQL。平常我们经常碰到的情况是根据不同的情况
,执行的SQL有一点点不一样。写在程序里,要写不少的if then之类的,在这里,dbLayer给
你一下解决了。比如在这里,我们三个值都是String对象,所以通过isNotNull就可以实现几
种不同的update了,比如,如果我只想修改DESCN这个字段,只要传过去的Category对象只有
categoryId和description有值,就会生成update CATEGORY set DESCN = #description#
where CATID =#categoryId#。同样如果传递的对象只有categoryId和name有值,就会生成
update CATEGORY set NAME = #name# where CATID =#categoryId#。是否很强大?:)
前面这两种,参数的传递方式是内置参数,也就是CATID =#categoryId#这种,大家可能不太
习惯,那就看一看标准的写法吧。
<!-- ============================================= OPTIONAL EXPLICIT PARAMETER MAP ============================================= --> <parameter-map name="insert-params"> <property name="categoryId"/> <property name="name" type="VARCHAR"/> <property name="description" type="VARCHAR"/> </parameter-map> <!-- ============================================= MAPPED STATEMENTS - w/Explicit Parameter Map ============================================= --> <mapped-statement name="insertCategoryDao" parameter-map="insert-params" > insert into CATEGORY ( CATID,NAME,DESCN) values ( ?,?,? ) </mapped-statement> </sql-map>
这里面的insert语句想来大家都很熟了吧?这个时候怎么取得参数呢?关键在于这里
parameter-map="insert-params",表示会读取<parameter-map name="insert-params">的设
置,而这个设置也不用多解释了吧,就是按顺序,三个?分别对应三个值。还能指明他们的数
据类型。
下面来看看Service.java
package com.ewuxi.champion; import java.io.Reader; import java.util.Properties; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.ibatis.common.resources.Resources; import com.ibatis.db.dao.DaoManager; /** * @author champion * * To change the template for this generated type comment go to * Window - Preferences - Java - Code Generation - Code and Comments */ public class Service { static Log log = LogFactory.getLog(Service.class); public static void initSet() { try { String resource = null; resource = "properties/simple/dao.xml"; log.info("Using SIMPLE configuration. (" resource ")"); Reader reader = Resources.getResourceAsReader(resource); DaoManager.configure(reader); } catch (Exception e) { throw new RuntimeException( "Could not initialize BaseLogic. Cause: " e); } } }
一个静态方法,从resource文件中读出配置,最后用DaoManager.configure(reader);完成配
置。
DaoCommon
public static Dao getDefautDao(){ return DaoManager.getInstance().getDao(""); } public static SqlMap getSqlMap(Dao c) throws DaoException { try { DaoManager daoManager = DaoManager.getInstance(c); if (daoManager == null) { daoManager = DaoManager.getInstance(); } SqlMapDaoTransaction trans = (SqlMapDaoTransaction) daoManager.getLocalTransaction(); SqlMap sqlMap = trans.getSqlMap(); return sqlMap; } catch (Exception e) { throw new DaoException(e); } }
public static SqlMap getSqlMap(String c) throws DaoException { try { DaoManager daoManager = DaoManager.getInstance(c); SqlMapDaoTransaction trans = (SqlMapDaoTransaction) daoManager.getLocalTransaction(); SqlMap sqlMap = trans.getSqlMap(); return sqlMap; } catch (Exception e) { throw new DaoException(e); } }
三个主要的函数,第一个是得到默认的DAO对象,后两个是根据一个dao对象或者一个参数(也
就是前面<context name="StoreDaoManager" >中是name值)。取得SqlMap对象,这个对象是主
要的数据操作接口。
/** * @throws Exception * 开始事务,所在session层必须使用它 */ public static void startTransaction() throws Exception { if (!DaoCommon.inTransaction()) { DaoManager.getInstance().startTransaction(); } } public static boolean inTransaction() throws Exception { try { DaoManager.getInstance().getLocalTransaction(); return true; } catch (Exception e) { return false; } } /** * @throws Exception * 放弃事务 */ public static void rollBack() { try { DaoManager.getInstance().rollbackTransaction(); } catch (Exception e) { LogFactory.getLog(DaoCommon.class).error(e, e); } } /** * @throws Exception * 提交事务 */ public static void commit() throws Exception { DaoManager.getInstance().commitTransaction(); }
下面的一些函数是对事务的一些封装。想必也很容易理解。
然后让我们来看CategoryDb的内容
/* * Created on 2007-10-11 * * To change the template for this generated file go to * Window - Preferences - Java - Code Generation - Code and Comments */ package com.ewuxi.champion.persistence.dao; import com.ewuxi.champion.exception.DaoException; import com.ewuxi.champion.persistence.vo.Category; import com.ibatis.db.sqlmap.SqlMap; /** * @author champion * *category数据库操作对象 */ public class CategoryDb { /** * @param vo * @throws DaoException * 插入一条记录 */ public void insert(Category vo) throws DaoException{ try { SqlMap sqlMap=DaoCommon.getSqlMap(DaoCommon.getDefautDao()); sqlMap.executeUpdate("insertCategoryDao",vo); } catch (Exception e) { throw new DaoException(e); } } /** * @param vo * @throws DaoException * 删除一条记录 */ public void delete(Category vo) throws DaoException{ try { SqlMap sqlMap=DaoCommon.getSqlMap(DaoCommon.getDefautDao()); sqlMap.executeUpdate("deleteByPrimaryKeyCategoryDao",vo); } catch (Exception e) { throw new DaoException(e); } } /** * @param vo * @throws DaoException * 修改一条记录 */ public void update(Category vo) throws DaoException{ try { SqlMap sqlMap=DaoCommon.getSqlMap(DaoCommon.getDefautDao()); sqlMap.executeUpdate("updateByPrimaryKeyCategoryDao",vo); } catch (Exception e) { throw new DaoException(e); } } /** * @param vo * @return * @throws DaoException * 查找一条记录 */ public Category findByPk(Category vo) throws DaoException{ try { SqlMap sqlMap=DaoCommon.getSqlMap(DaoCommon.getDefautDao()); return (Category) sqlMap.executeQueryForObject("findByPrimaryKeyCategoryDao",vo); } catch (Exception e) { throw new DaoException(e); } } }
每一个函数都很类似的。关键就在这一句(Category) sqlMap.executeQueryForList
("findByPrimaryKeyCategoryDao",vo);。看到"findByPrimaryKeyCategoryDao",这个对应于
前面Category.xml中的名字。而vo则是一个Category对象。
最后是CategoryDbTest类,这个是我们的单元测试程序
/* * Created on 2007-10-11 * * To change the template for this generated file go to * Window - Preferences - Java - Code Generation - Code and Comments */ package com.ewuxi.champion.persistence.dao; import com.ewuxi.champion.exception.DaoException; import com.ewuxi.champion.persistence.vo.Category; import com.ibatis.db.sqlmap.SqlMap; /** * @author champion * *category数据库操作对象 */ public class CategoryDb { /** * @param vo * @throws DaoException * 插入一条记录 */ public void insert(Category vo) throws DaoException{ try { SqlMap sqlMap=DaoCommon.getSqlMap(DaoCommon.getDefautDao()); sqlMap.executeUpdate("insertCategoryDao",vo); } catch (Exception e) { throw new DaoException(e); } } /** * @param vo * @throws DaoException * 删除一条记录 */ public void delete(Category vo) throws DaoException{ try { SqlMap sqlMap=DaoCommon.getSqlMap(DaoCommon.getDefautDao()); sqlMap.executeUpdate("deleteByPrimaryKeyCategoryDao",vo); } catch (Exception e) { throw new DaoException(e); } } /** * @param vo * @throws DaoException * 修改一条记录 */ public void update(Category vo) throws DaoException{ try { SqlMap sqlMap=DaoCommon.getSqlMap(DaoCommon.getDefautDao()); sqlMap.executeUpdate("updateByPrimaryKeyCategoryDao",vo); } catch (Exception e) { throw new DaoException(e); } } /** * @param vo * @return * @throws DaoException * 查找一条记录 */ public Category findByPk(Category vo) throws DaoException{ try { SqlMap sqlMap=DaoCommon.getSqlMap(DaoCommon.getDefautDao()); return (Category) sqlMap.executeQueryForObject("findByPrimaryKeyCategoryDao",vo); } catch (Exception e) { throw new DaoException(e); } } }[url]
相关推荐
- "ibatis初步介绍.mht":针对初学者,可能包含Ibatis的基本概念和快速入门教程。 - "ibatis 开发指南.pdf":全面的Ibatis开发手册,深入讲解各个功能和API的使用。 - "Ibatis.ppt":可能是PPT形式的Ibatis教程,...
标签同样为"01_ibatis教程_准备ibatis环境.zip",进一步确认了文件内容的性质,即围绕Ibatis的初步学习,特别是环境配置部分。 【子文件解析】 根据"01_传智播客ibatis教程_准备ibatis环境"的子文件名,我们可以...
通过这个过程,你可以初步了解Ibatis的基本工作原理。 七、测试验证 完成环境配置后,编写一个简单的数据访问操作进行测试,如查询所有用户。这将帮助你确认Ibatis是否正确连接到数据库,以及相关的配置是否生效。 ...
本指南将详细介绍Ibatis的安装、配置、基本用法以及一些高级特性,帮助你更好地理解和运用这一强大的工具。 1. **安装与引入** 首先,你需要在项目中引入Ibatis的依赖库。如果你使用的是Maven,可以在pom.xml文件...
【标题】"ibatis-sqlMap-入门教程(代码)" 涉及的知识点主要集中在使用MyBatis(原iBATIS)框架进行数据库操作的初步实践上。MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射,避免了几乎...
这篇“ibatis学习笔记(一)”可能是博主对Ibatis基础概念、安装配置以及基本使用的介绍,让我们通过标签“源码”和“工具”来深入探讨Ibatis的相关知识。 首先,Ibatis是一个轻量级的Java ORM(对象关系映射)框架...
**Ibatis 快速入门** Ibatis 是一个优秀的开源持久层框架,它允许开发者将SQL语句与...通过以上介绍,相信你已经对Ibatis有了初步了解。继续深入学习和实践,你将能够熟练地利用Ibatis进行数据库操作,提高开发效率。
通过这个简单的例子,你已经初步了解了Ibatis的基本使用。在实际项目中,你可以根据需求扩展到更复杂的查询、更新、删除和插入操作。同时,Ibatis还提供了缓存机制、结果映射等功能,能更好地满足实际开发需求。深入...
通过本文的介绍,相信你已经对iBatis有了初步的认识,现在你可以尝试使用iBatis来开发你的第一个数据库应用了。在实际项目中,还可以深入学习和探索iBatis的高级特性,如结果映射、缓存机制、动态SQL等,这将有助于...
本学习资料旨在帮助你对 Ibatis 进行初步的入门学习,了解其基本概念、配置及使用方法。 1. **Ibatis 概述** - Ibatis 是由 Clinton Begin 创建的一个轻量级的 Java ORM(对象关系映射)框架。 - 它不同于 ...
《Ibatis与MySQL整合详解:从入门到精通》...通过以上介绍,相信你对Ibatis与MySQL的整合有了初步了解。实践中不断探索和积累经验,你会发现这个组合在数据访问层的构建上能带来极大的便利。祝你在编程之路上一帆风顺!
通过这个入门教程,你应该对Ibatis的基本使用有了初步了解,包括配置SQL Map、编写动态SQL、创建Java接口和实体类、与Spring的整合以及事务管理。进一步的学习和实践将帮助你更熟练地运用Ibatis解决实际开发中的数据...
通过上述步骤,你已经对Ibatis有了初步的认识,包括如何配置、如何编写SQL映射文件、如何创建接口以及如何使用SqlSession执行SQL等。实际开发中,Ibatis还可以与其他框架如Spring整合,实现更高效便捷的数据访问。...
“spring概述及入门”这个文件名表明了压缩包中可能包含Spring框架的基础知识,涵盖了Spring的核心概念、基本配置、IoC容器的使用、AOP的实现以及如何进行Spring项目的初步搭建。对于初学者来说,这是一份很好的学习...
通过本教程的第一部分,读者应该对 iBATIS 和 Apache Derby 的基本概念有了初步了解,并能够完成基本的配置和测试。后续的部分将更深入地探讨 iBATIS 和 DAO 框架的高级特性及其与 Apache Derby 的集成方式。
本文将详细介绍如何在iBatis框架中执行自定义SQL字符串,以及解决在实际应用中遇到的缓存问题。 2. 项目背景 在企业级项目中,系统需要定期向数据仓库(ODS)推送交易表数据。原有的设计由于缺乏灵活性,导致每次...
慢慢地初步看看规模,也有几个朋友给我点鼓励,给了明星。工程论文计划主要下面几大块,希望大家也可以一起加入进来,拓展Java设计模式这块的运用场景的提炼。 设计模式简介:主要介绍各种设计模式的概念和运用场景...
### MyBatis初步环境搭建详解 #### 一、MyBatis概述 MyBatis是一个半自动的ORM(Object Relational Mapping)框架,在当前的企业级应用开发中占据着重要的位置。ORM框架的主要目的是为了简化Java应用程序与数据库...
在本文中,我们将深入探讨如何初步搭建一个基于Spring Boot和MyBatis的Web应用程序。Spring Boot简化了Spring应用的初始化和配置,而MyBatis则是一个轻量级的持久层框架,它允许开发者通过简单的XML或注解来映射SQL...