﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-探索与发现-随笔分类-hibernate</title><link>http://www.blogjava.net/zhaijianhui/category/11282.html</link><description>研究java技术</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 12:37:54 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 12:37:54 GMT</pubDate><ttl>60</ttl><item><title>学习一下ibatis</title><link>http://www.blogjava.net/zhaijianhui/archive/2006/07/24/59724.html</link><dc:creator>蜘蛛</dc:creator><author>蜘蛛</author><pubDate>Sun, 23 Jul 2006 16:48:00 GMT</pubDate><guid>http://www.blogjava.net/zhaijianhui/archive/2006/07/24/59724.html</guid><wfw:comment>http://www.blogjava.net/zhaijianhui/comments/59724.html</wfw:comment><comments>http://www.blogjava.net/zhaijianhui/archive/2006/07/24/59724.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaijianhui/comments/commentRss/59724.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaijianhui/services/trackbacks/59724.html</trackback:ping><description><![CDATA[
		<p>to robbin <br />ibatis的网站<br /><a href="http://www.ibatis.com">www.ibatis.com</a>上面可以找到很好的文档，再加上有非常不错的例子，所以使用是相当的简单。<br />sourceforge上面的讨论<br /><a href="http://swik.net/DAO">http://swik.net/DAO</a><br /><a href="http://www.learntechnology.net/struts-ibatis.do">http://www.learntechnology.net/struts-ibatis.do</a><br /><a href="http://www.nabble.com/iBATIS-f360.html">http://www.nabble.com/iBATIS-f360.html</a><br /><a href="http://www.cjsdn.net/post/page?bid=20&amp;sty=3&amp;tpg=2&amp;s=73&amp;age=0">http://www.cjsdn.net/post/page?bid=20&amp;sty=3&amp;tpg=2&amp;s=73&amp;age=0</a><br /><a href="https://sourceforge.net/forum/forum.php?forum_id=206693">https://sourceforge.net/forum/forum.php?forum_id=206693</a><br /><a href="http://www.cjsdn.net/post/view?bid=11&amp;id=172565&amp;sty=1&amp;tpg=1&amp;age=0Windows">http://www.cjsdn.net/post/view?bid=11&amp;id=172565&amp;sty=1&amp;tpg=1&amp;age=0Windows</a><br />环境下的tomcat + apache配置(绝对实践操作版) </p>
		<p>ibatis大体上可以分为两个部分:SQL Maps + Data Access Objects <br />我现在的项目中都用到了，它提供的jpetstore就使用了db layer,可以参考它的实现方式。<br />不过我觉得jpetstore的db layer实现方式还不是太好，至少它的业务逻辑层和dao层没有明显区分，在实现比较</p>
		<p>大的项目的时候造成了程序的混乱，如果没有一个良好的模式来实现db layer 的时候，确实会造成效率的低下，</p>
		<p>有了良好的架构，速度确实很快（特别是SQL Maps + Data Access Objects 都使用的情况）<br />BO层的设计已经不是什么新鲜的了，但我觉得它确实可以很好的和DaoManager结合起来，通过DaoManager-&gt;SQL </p>
		<p>map-&gt;jdbc<br />它的两个核心的配置文件：dao.xml+SqlMapConfig.xml <br />通过灵活的配置文件的组合可以实现数据库不同的访问组合<br />比如：一个dao.xml可以对应多个SqlMapConfig.xml <br />一个dao.xml可对应一个数据库，多个dao.xml就可以访问多个数据库了（它的petstore就提供了演示distributed</p>
		<p>功能的样例是oracle+ms sql）<br />它的SqlMapConfig.xml中可配置sql-map resource，就是配置你具体的sql语句的xml文件。<br />它的sqlMap提供很多方法来访问数据库，直接返回你想要的结果</p>
		<p>***************************<br />DAO中的一个供分页查询的方法<br />***************************<br />......</p>
		<p>SqlMap sqlMap = getSqlMapFromLocalTransaction();//取到当前sqlmap对象<br />List list=sqlMap.executeQueryForList("你的MappedStatement文件中sql语句的名称", object("你可以通过这</p>
		<p>个object传一些查询条件"),skipResults,maxResults);</p>
		<p>...</p>
		<p>有了良好的设计模式，它可以和struts完美结合在一起，无论是效率还是清晰型上，都非常令人满意的 </p>
		<p>public void saveUser(User user) <br />    {<br />        if (user.getId() == null) <br />        {<br />                Long id = (Long) getSqlMapClientTemplate().insert("addUser", user);<br />            logger.info("new User id set to: " + id);<br />        } else {<br />            getSqlMapClientTemplate().update("updateUser", user);<br />        }<br />        <br />    }    </p>
		<p>domain is the central business tier. service package is more like a web package, just a way to </p>
		<p>expose these services remotely, so that users could use the web interfaces, or the webservice </p>
		<p>interfaces(like amazon's webservices). </p>
		<p>
				<br />//TestA.javapublic class TestA{public static void main(String[] args){TestA a=new TestA</p>
		<p>();System.out.println(a.getClass().getClassLoader());TestB b=new TestB();b.print</p>
		<p>();}}//TestB.javapublic class TestB{public void print(){System.out.println(this.getClass</p>
		<p>().getClassLoader());}}</p>
		<p>DAO(data access objects)允许你去创建简单的组件，为你访问你的数据，而不用去实现具体的实现细节。使用</p>
		<p>DAOS你能动态配置不同的持久层机制。<br />注意：DAO框架与sqlmaps框架是完全的分离开和互不依赖性，所以你可以单独使用，或一起来用都没有关系.</p>
		<p>下面是一些重要的daos api<br />DaoManager(Facade模式):负责配置DAO框架实例（经过dao.xml),在其它api当中充当facade.<br />DaoTransaction(Marker Interface):通用的接口，为了去使用事物（连接），通用的实现将包装jdbc的连接对象</p>
		<p>.<br />DaoException(RuntimeException运行期异常):所有的方法和类全部抛出dao api专有的异常。<br />Dao(Marker Interface):一个标记接口供所有的dao去实现，这个接口必须为所有的dao类去实现。这个接口没有</p>
		<p>声名任何方法被实现，只是充当一个标记（例如：一些DaoFactory去辩别不同的类);<br />-----------------------------------<br />jdbc事务控制实现<br />sqlmap:通过sqlmaps框架和它的事物管理服务去实现，包括不同的DataSource和事物管理配置<br />hibernate:提供简单容易的和hibernate,它的事物工具（SessionFactory,Session,Transaction)整合<br />jdbc:通过jdbc api，使用它的基本的dataSource和Connction接口去管理事物<br />jta:管理分部式事物，需要被管理的datasource，这样子可以通过jndi访问.<br />external:允许事物被外部控制</p>
		<p>dao.xml为配置文件(<a href="http://www.ibatis.com/dtd/dao-2.dtd">http://www.ibatis.com/dtd/dao-2.dtd</a>)<br />DaoManager负责配置dao框架。DaoManager类可以为框架解析特定的xml文件，而提供出有用的信息供框架使用。</p>
		<p>那么配置文件(xml文件)需要指定下面的内容:<br />1)dao的上下文<br />2)事物为每一个上下文件的实现<br />3)TransactionManager配置属性<br />4)Dao为每一个实现的dao接口<br />一个Dao上下文是一组相关的配置信息和Dao实现。通常一个上下文关联到一个数据源(datasource)或一个文件。<br />dao配置文件（通常被叫做dao.xml，但不是必须的),为下面的结构<br />&lt;!DOCTYPE daoConfig<br />PUBLIC "-//iBATIS.com//DTD DAO Configuration 2.0//EN"<br />"<a href="http://www.ibatis.com/dtd/dao-2.dtd">http://www.ibatis.com/dtd/dao-2.dtd</a>"&gt;<br />&lt;<br />daoConfig&gt;<br />&lt;properties resource="com/domain/properties/MyProperties.properties"/&gt;<br />&lt;!-- Example JDBC DAO Configuration --&gt;<br />&lt;context&gt;<br />&lt;transactionManager type="JDBC"&gt;<br />&lt;property name="DataSource" value="SIMPLE"/&gt;<br />&lt;property name="JDBC.Driver" value="${driver}"/&gt;<br />&lt;property name="JDBC.ConnectionURL" value="${url}"/&gt;<br />&lt;property name="JDBC.Username" value="${username}"/&gt;<br />&lt;property name="JDBC.Password" value="${password}"/&gt;<br />&lt;property name="JDBC.DefaultAutoCommit" value="true" /&gt;<br />&lt;property name="Pool.MaximumActiveConnections" value="10"/&gt;<br />&lt;property name="Pool.MaximumIdleConnections" value="5"/&gt;<br />&lt;property name="Pool.MaximumCheckoutTime" value="120000"/&gt;<br />&lt;/transactionManager&gt;<br />&lt;dao interface="com.domain.dao.OrderDao"<br />implementation="com.domain.dao.jdbc.JdbcOrderDao"/&gt;<br />&lt;dao interface="com.domain.dao.LineItemDao"<br />implementation="com.domain.dao.jdbc.JdbcLineItemDao"/&gt;<br />&lt;dao interface="com.domain.dao.CustomerDao"<br />implementation="com.domain.dao.jdbc.JdbcCustomerDao"/&gt;<br />&lt;/context&gt;<br />&lt;!-- Example SQL Maps DAO Configuration --&gt;<br />&lt;context&gt;<br />&lt;transactionManager type="SQLMAP"&gt;<br />&lt;property name="SqlMapConfigResource" value="com/domain/dao/sqlmap/SqlMapConfig.xml"/&gt;<br />&lt;/transactionManager&gt;<br />&lt;dao interface="com.domain.dao.PersonDao"<br />implementation="com.domain.dao.sqlmap.SqlMapPersonDao"/&gt;<br />&lt;dao interface="com.domain.dao.BusinessDao"<br />implementation="com.domain.dao.sqlmap.SqlMapBusinessDao"/&gt;<br />&lt;dao interface="com.domain.dao.AccountDao"<br />implementation="com.domain.dao.sqlmap.SqlMapAccountDao"/&gt;<br />&lt;/context&gt;<br />&lt;/daoConfig&gt;<br />一个dao.xml里可以有多个context,通常一个上下文指定一个特定的dataSource<br />为了去管理多样的配置（因为有不同的环境），你可以使用可选的元素&lt;properties).<br />这个允许使用占用符，例如：<br />driver=org.postgresql.Driver<br />url=jdbc:postgresql://localhost:5432/test<br />这时你可以在dao.xml里用占用符取代具体的值，例如上面的可以改写成下面的<br />&lt;property name="JDBC.Driver" value="${driver}"/&gt;<br />&lt;property name="JDBC.ConnectionURL" value="${url}"/&gt;<br />在上下文当中，第一个context里同使用的是jdbc事物控制，所以在指定的property元素也要使用jdbc，不同的事</p>
		<p>物管理实现会需要不同的properties,</p>
		<p>事物管理实现(Transaction Manager Implementation and Configuration)是一个组件会管理pool（事物对象）</p>
		<p>，一事物管理通常只是包装特定的DataSource，简单的事物通常包装一特定的实现类如jdbc连接实现</p>
		<p>jdbc Transaction Manager:利用提供的datasource api提供连接池服务<br />有三种datasource是支持的(simple,dbcp,jndi),simple是实现了ibatis的SimpleDataSource。dbcp使用了</p>
		<p>jakarta dbcp datasource，最后，jndi是实现了查找datasource是从jndi上去查<br />下面是不同的配置方法<br />&lt;!-- Example iBATIS SimpleDataSource JDBC Transaction Manager --&gt;<br />&lt;transactionManager type="JDBC"&gt;<br />&lt;property name="DataSource" value="SIMPLE"/&gt;<br />&lt;property name="JDBC.Driver" value="${driver}"/&gt;<br />&lt;property name="JDBC.ConnectionURL" value="${url}"/&gt;<br />&lt;property name="JDBC.Username" value="${username}"/&gt;<br />&lt;property name="JDBC.Password" value="${password}"/&gt;<br />&lt;property name="JDBC.DefaultAutoCommit" value="true" /&gt;<br />&lt;!-- The following are optional --&gt;<br />&lt;property name="Pool.MaximumActiveConnections" value="10"/&gt;<br />&lt;property name="Pool.MaximumIdleConnections" value="5"/&gt;<br />&lt;property name="Pool.MaximumCheckoutTime" value="120000"/&gt;<br />&lt;property name="Pool.TimeToWait" value="10000"/&gt;<br />&lt;property name="Pool.PingQuery" value="select * from dual"/&gt;<br />&lt;property name="Pool.PingEnabled" value="false"/&gt;<br />&lt;property name="Pool.PingConnectionsOlderThan" value="0"/&gt;<br />&lt;property name="Pool.PingConnectionsNotUsedFor" value="0"/&gt;<br />&lt;/transactionManager&gt;</p>
		<p>&lt;!-- Example Jakarta DBCP JDBC Transaction Manager --&gt;<br />&lt;transactionManager type="JDBC"&gt;<br />&lt;property name="DataSource" value="DBCP"/&gt;<br />&lt;property name="JDBC.Driver" value="${driver}"/&gt;<br />&lt;property name="JDBC.ConnectionURL" value="${url}"/&gt;<br />&lt;property name="JDBC.Username" value="${username}"/&gt;<br />&lt;property name="JDBC.Password" value="${password}"/&gt;<br />&lt;property name="JDBC.DefaultAutoCommit" value="true" /&gt;<br />&lt;!-- The following are optional --&gt;<br />&lt;property name="Pool.MaximumActiveConnections" value="10"/&gt;<br />&lt;property name="Pool.MaximumIdleConnections" value="5"/&gt;<br />&lt;property name="Pool.MaximumWait" value="60000"/&gt;<br />&lt;!-- Use of the validation query can be problematic. If you have difficulty, try without it. --&gt;<br />&lt;property name="Pool.ValidationQuery" value="select 1 from ACCOUNT"/&gt;<br />&lt;property name="Pool.LogAbandoned" value="false"/&gt;<br />&lt;property name="Pool.RemoveAbandoned" value="false"/&gt;<br />&lt;property name="Pool.RemoveAbandonedTimeout" value="50000"/&gt;<br />&lt;/transactionManager&gt;</p>
		<p>
				<br />&lt;!-- Example JNDI DataSource JDBC Transaction Manager --&gt;<br />&lt;transactionManager type="JDBC"&gt;<br />&lt;property name="DataSource" value="JNDI"/&gt;<br />&lt;property name="DBJndiContext" value="java:comp/env/jdbc/MyDataSource"/&gt;<br />&lt;/transactionManager&gt;</p>
		<p>jta管理事物：它使用的是jta api.实种实现总是需要通过jndi去获得datasource和一个UserTransaction实例也</p>
		<p>是通过jndi访问的,因些需要在服务器配置一下，不过这使得配置dao框架十分简单了。下面是一个简单的配置<br />&lt;transactionManager type="JTA"&gt;<br />&lt;property name="DBJndiContext" value="java:comp/env/jdbc/MyDataSource"/&gt;<br />&lt;property name="UserTransaction" value="java:comp/env/UserTransaction"/&gt;<br />&lt;/transactionManager&gt;</p>
		<p>sqlmap管理事物：通过dao框架包装sql maps事物服务，所有的你都要指定一个sql maps配置文件。下面是一个简</p>
		<p>单的配置<br />&lt;transactionManager type="SQLMAP"&gt;<br />&lt;property name="SqlMapConfigResource" value="com/domain/dao/sqlmap/SqlMapConfig.xml"/&gt;<br />&lt;/transactionManager&gt;</p>
		<p>hibernate管理事物:同样的,通过dao框架包装hibernate事物服务,基本上properties在配置文件当中和</p>
		<p>hibernate.properties文件是一样的，另外，持久化类（你可能通过添加到hibernate配置文件当中去的）要</p>
		<p>以"class."开头，下面是一个例子:<br />&lt;transactionManager type="HIBERNATE"&gt;<br />&lt;property name="hibernate.dialect" value="net.sf.hibernate.dialect.PostgreSQLDialect"/&gt;<br />&lt;property name="hibernate.connection.driver_class" value="${driver}"/&gt;<br />&lt;property name="hibernate.connection.url" value="${url}"/&gt;<br />&lt;property name="hibernate.connection.username" value="${username}"/&gt;<br />&lt;property name="hibernate.connection.password" value="${password}"/&gt;<br />&lt;property name="class.1" value="com.domain.Person"/&gt;<br />&lt;property name="class.2" value="com.domain.Business"/&gt;<br />&lt;property name="class.3" value="com.domain.Account"/&gt;<br />&lt;/transactionManager&gt;</p>
		<p>external 管理事物:允许使用dao框架控制。这个执行基本是没有行为，因些不需要properties，如果你使用一个</p>
		<p>flat file,你可以使用external事物管理,<br />&lt;transactionManager type="EXTERNAL"/&gt;</p>
		<p>dao实现模板：你可能要问我怎么使用上面的事物，好了每一种事物类型都要相应的dao模板与之对应。例如：</p>
		<p>jta,jdbc模板提供简单的访问jdbc连接对象。相似的sqlmap模板提供访问简单的SqlMapExecutor实例，而</p>
		<p>hibernate template提供访问Session object.<br />使用dao template完全是可选的，但99%的时间里，是不可不选择的/</p>
		<p>更多的模板请看下面的.<br />DaoManager编程：iBATIS　dao框架有许多的目的．第一个，它试图持久层的细节．这包括所有的接口，实现和异</p>
		<p>常细节（在你的持久层解决方案当中）.<br />例如：如果你使用jdbc,dao框架将为你隐藏类如DataSource,Connection和SQLException.类似的，如果你使用</p>
		<p>Hibernate orm,dao框架会为你隐藏类如Configuration,SessionFactory,Session和HibernateException.所有的</p>
		<p>这些细节都会隐藏到了dao接口层．甚至在显示层的许多的datasource也会被隐藏.<br />第二个目的是:简化持久层编程模型,使在同一时间保持一致.不同的持久层解决方案有不同的编程语义和行为.<br />dao框架试图隐藏更多,允许在你的应用service和domain层,写出一致的风格.</p>
		<p>DaoManager类负责dao框架的配置文件(通过dao.xml),另外,DaoManage扮演着中心门面的角色,它特殊之处是,还提</p>
		<p>供方法允许你访问事物和dao实例.</p>
		<p>读取配置文件:<br />使用DaoManagerBuilder类的静态方法buildDaoManager()方法读取dao.xml文件,buildDaoManager()方法需要一个</p>
		<p>Reader实例作为参数.<br />例如:<br />Reader reader = new FileReader(C:/myapp/dao.xml);<br />DaoManager daoManager = DaoManagerBuilder.buildDaoManager(reader);</p>
		<p>如在web应用环境当中(或其它),一般配置文件都会从classpath当中去加载的.我们可以使用</p>
		<p>com.ibatis.common.resources.Resources类<br />Reader reader = Resources.getResourceAsReader(“com/domain/config/dao.xml”);<br />DaoManager daoManager = DaoManagerBuilder.buildDaoManager(reader);</p>
		<p>Context和DaoManager<br />DaoManager实例是从dao.xml文件建立的.当你需要一个dao实例时,你可以通过DaoManager,和事物控制也会从它此</p>
		<p>处提供的.因些不需直接访问context和事物管理..<br />你的dao知道它怎么去做.类似的,需要看你的daos怎么工作的,事物会恰当的开始和提交的.而且,事物仅在你的dao</p>
		<p>被调用时才启动.</p>
		<p>获取dao实例<br />一旦你得到了DaoManager实例,你就可以根据dao名字,利用DaoManager的getDao方法获取该dao实例了,如:<br />ProductDao productDao = (ProductDao) daoManager.getDao (ProductDao.class);</p>
		<p>DaoManager提供了处理事务的方法.这些方法允许你划分事务,和避免传递事务对象(eg:jdbc Connction)到你的所</p>
		<p>有的daos当中去.例如:<br />ProductDao productDao = (ProductDao) daoManager.getDao (ProductDao.class);<br />try {<br />daoManager.startTransaction();<br />Product product = productDao.getProduct (5);<br />product.setDescription (“New description.”);<br />productDao.updateProduct(product);<br />daoManager.commitTransaction();<br />} finally {<br />daoManager.endTransaction();<br />}<br />调用startTransaction()只是让DaoManager知道,你将要启动编程控制事务.<br />dao实例化时才启动事务的,甚至事务仅仅是contexts需要的时候.<br />commitTransaction()提交事务,endTransaction()需要在try{}catch(){}里面的,,<br />如果发现了异常,那么就会回滚.</p>
		<p>自动提交事务<br />像jdbc的setAutoCommit(true)一样,不过也有不同之处,你可以使用多个update作为一个事务,你不需要指定提交</p>
		<p>的行为方式,只要你不调用startTransaction()就行了<br />Product product = productDao.getProduct (5); // Transaction 1<br />product.setDescription (“New description.”);<br />productDao.updateProduct(product); // Transaction 2<br />product = productDao.getProduct (5); // Transaction 3<br />注意了,这里没有异常的事件发生的,如发生异常,就会回滚,和释放连接资源的.</p>
		<p>实现自己的dao接口:<br />dao接口非常的简单,因为它没有声名任何的方法,只是一个marker interface,所以实现的只是你自己的接口罢了,</p>
		<p>在你的接口当中没有限制你要定的任何方法,抛出的异常是运行期的DaoException类型的异常.<br />An example of a good Dao interface is:<br />public interface ProductDao extends Dao {<br />// Updates<br />public int updateProduct (Product product); // DAO Framework code may throw DaoException<br />public int insertProduct (Product product);<br />public int deleteProduct (int productId);<br />/<br />/ Queries<br />public Product getProduct (int productId);<br />public List getProductListByProductDescription (String description);<br />}</p>
		<p>Templates和Implementations<br />在上面也提到了,每一种模板都对应一种特殊的Transaction Manager.<br />每一种模板提供了一种便利的方法去交互.<br />template Class       Transaction Manager        Convenience Method<br />JdbcDaoTemplate      JDBC                       Connection getConnection()<br />JtaDaoTemplate       JTA                        Connection getConnection();<br />SqlMapDaoTemplate    SQLMAP                     SqlMapExecutor getSqlMapExecutor()<br />HibernateDaoTemplate  HIBERNATE             Session getSession()</p>
		<p>The following is an example implementation using the SqlMapDaoTemplate:<br />public class SqlMapProductDao implements ProductDao extends SqlMapDaoTemplate {<br />public SqlMapProductDao (DaoManager daoManager) {<br />super (daoManager);<br />}<br />/<br />* Insert method */<br />public int updateProduct (Product product) {<br />try {<br />getSqlMapExecutor().insert (“insertProduct”, product);<br />} catch (SQLException e) {<br />throw new DaoException (“Error inserting product. Cause: “ + e, e);<br />}<br />}<br />/<br />/ … assume remaining methods to save space<br />}<br />注意:在上面的例子里只有一些个构造器,参数为DaoManager,它是在初始化实例时通过DaoManagerBuilder自动注</p>
		<p>入参数进去..第一个需要DaoManager作为构造器的参数,也就迫使它的子类都要一个带参(DaoManager)的构造器,</p>
		<p>当你使用模板时,构造器是必须的,你不需要提供其它的构造器了..你的daos仅仅需要DaoManagerBuilder去实例化</p>
		<p>它.</p>
		<p>考虑dao的设计方式:<br />推荐使用一个继承dao接口的接口,另一个为一个继承dao接口的抽象类(封闭一些异常,事务等等)..<br />实际上你只需要一个就行了,另外你也可以选择下面这种方式..<br />你可以使用BaseJdbcDao(abstract)继承dao接口,需让ProductDao不要去断承dao接口,让ProductJdbcDao去实现</p>
		<p>ProductDao和继承BaseJdbcDao就可以了,让Product接口仍然与dao分离开来....<br />在上面的例子当中可以将BaseJdbcDao继承JdbcDaoTemplate(它已经实现了dao接口)</p>
		<p>
				<br />现在做一个例子:<br />create table test<br />(<br />id int auto_increment;<br />name varchar(20)<br />);</p>
		<p>建一个对应的vo<br />package zhai;</p>
		<p>public class test {<br /> int id;<br /> String name;<br />public int getId() {<br /> return id;<br />}<br />public void setId(int id) {<br /> this.id = id;<br />}<br />public String getName() {<br /> return name;<br />}<br />public void setName(String name) {<br /> this.name = name;<br />}<br />}</p>
		<p>建一个配置数据库的配置文件<br />config.xml<br />&lt;?xml version="1.0" encoding="UTF-8" ?&gt;<br />&lt;!DOCTYPE sqlMapConfig<br />    PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"<br />    "<a href="http://www.ibatis.com/dtd/sql-map-config-2.dtd">http://www.ibatis.com/dtd/sql-map-config-2.dtd</a>"&gt;<br />&lt;sqlMapConfig&gt;<br />  &lt;transactionManager type="JDBC"&gt;<br />    &lt;dataSource type="SIMPLE"&gt;<br />      &lt;property value="com.mysql.jdbc.Driver" name="JDBC.Driver"/&gt;<br />      &lt;property value="jdbc:mysql://localhost:3306/test" name="JDBC.ConnectionURL"/&gt;<br />      &lt;property value="root" name="JDBC.Username"/&gt;<br />      &lt;property value="root" name="JDBC.Password"/&gt;<br />    &lt;/dataSource&gt;<br />  &lt;/transactionManager&gt;<br />  &lt;sqlMap url="file:C:\Test\sql.xml"/&gt;<br />&lt;/sqlMapConfig&gt;</p>
		<p>
				<br />--<br />sql.xml</p>
		<p>--------<br />&lt;?xml version="1.0" encoding="UTF-8" ?&gt;<br />&lt;!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"<br />    "<a href="http://ibatis.apache.org/dtd/sql-map-2.dtd">http://ibatis.apache.org/dtd/sql-map-2.dtd</a>"&gt;</p>
		<p>&lt;sqlMap namespace="test"&gt;<br />  &lt;typeAlias alias="test" type="test.test"/&gt;<br />  &lt;select id="getByName" resultClass="test" parameterClass="string"&gt;<br />    SELECT<br />     ID,<br />     NAME<br />    FROM TEST<br />    WHERE NAME = #name#<br />  &lt;/select&gt;<br />&lt;/sqlMap&gt;<br /></p>
		<p>----------------<br />------------------<br />package zhai;</p>
		<p>public interface MyDao {<br />  public void MyInsert(test t);<br />}<br />==================<br />package zhai;</p>
		<p>import java.sql.SQLException;</p>
		<p>import com.ibatis.dao.client.DaoManager;<br />import com.ibatis.dao.client.template.SqlMapDaoTemplate;</p>
		<p>public class TestDao extends SqlMapDaoTemplate implements MyDao{</p>
		<p> public TestDao(DaoManager arg0) {<br />  super(arg0);<br />  // TODO Auto-generated constructor stub<br /> }</p>
		<p> public void MyInsert(test t) {<br />  try {<br />   getSqlMapExecutor().insert ("insertTest",t);<br />  } catch (SQLException e) {<br />   System.out.println("插入时出异常");<br />   e.printStackTrace();<br />  }<br /> }</p>
		<p>}<br /><br />============<br />package zhai;<br />import java.io.*;</p>
		<p>import com.ibatis.sqlmap.client.*;<br />public class TestDemo {</p>
		<p> public static void main(String[] args) throws Exception {<br />  Reader reader=new FileReader("C:\\Test\\config.xml");<br />     SqlMapClient sqlmap=SqlMapClientBuilder.buildSqlMapClient(reader);<br />     test emp = (test) sqlmap.queryForObject("getById", new Integer(1));<br />        System.out.println("欢迎你="+emp.getName());<br /> }</p>
		<p>}<br />－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－</p>
		<p>－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－</p>
		<p>－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－</p>
		<p>－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－</p>
		<p>－－－－－－－<br />写一个运行dao的<br />&lt;!DOCTYPE daoConfig<br />PUBLIC "-//iBATIS.com//DTD DAO Configuration 2.0//EN"<br />"<a href="http://www.ibatis.com/dtd/dao-2.dtd">http://www.ibatis.com/dtd/dao-2.dtd</a>"&gt;<br />&lt;daoConfig&gt;<br />&lt;!-- Example JDBC DAO Configuration --&gt;<br />&lt;context&gt;<br />    &lt;transactionManager type="SQLMAP"&gt;<br />     &lt;property name="SqlMapConfigResource" value="zhai/config.xml"/&gt;<br />    &lt;/transactionManager&gt;<br />&lt;dao interface="zhai.MyDao" implementation="zhai.TestDao"/&gt;<br />&lt;/context&gt;<br />&lt;/daoConfig&gt;<br />----------------------<br />--------------------<br />&lt;?xml version="1.0" encoding="UTF-8" ?&gt;<br />&lt;!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"<br />    "<a href="http://ibatis.apache.org/dtd/sql-map-2.dtd">http://ibatis.apache.org/dtd/sql-map-2.dtd</a>"&gt;</p>
		<p>&lt;sqlMap namespace="test"&gt;<br />  &lt;typeAlias alias="test" type="zhai.test"/&gt;<br />  &lt;select id="getById" resultClass="test" parameterClass="int"&gt;<br />    SELECT<br />     ID,<br />     NAME<br />    FROM TEST<br />    WHERE ID = #id#<br />  &lt;/select&gt;<br />  &lt;insert id="insertTest" parameterClass="test"&gt;<br />    insert into TEST (NAME) values (#name#)<br />  &lt;/insert&gt;<br />  <br />&lt;/sqlMap&gt;<br />--------------------------------------------------------------------------------------------------</p>
		<p>---------------------------------------------<br />package zhai;<br />import java.io.*;</p>
		<p>import com.ibatis.dao.client.DaoManager;<br />import com.ibatis.dao.client.DaoManagerBuilder;<br />import com.ibatis.sqlmap.client.*;<br />public class TestDemo {</p>
		<p> public static void main(String[] args) throws Exception {<br />                //Reader reader = Resources.getResourceAsReader("zhai/dao.xml");<br />  Reader reader=new FileReader("C:\\Test\\dao.xml");<br />  DaoManager daoManager = DaoManagerBuilder.buildDaoManager(reader);<br />  MyDao testdao = (MyDao) daoManager.getDao(MyDao.class);<br />  test t=new test();<br />  t.setName("test");<br />  testdao.MyInsert(t);<br /> }</p>
		<p>}</p>
		<p>
				<br />注意了如果你用的是<br />Reader reader = Resources.getResourceAsReader("zhai/dao.xml");<br />那么你就得注意事了，dao.xml要放在项目的bin目录下面，否则就会出错<br />还有在dao.xml里的  &lt;transactionManager type="SQLMAP"&gt;<br />     &lt;property name="SqlMapConfigResource" value="zhai/config.xml"/&gt;<br />    &lt;/transactionManager&gt;<br />也是一个道理呀</p>
<img src ="http://www.blogjava.net/zhaijianhui/aggbug/59724.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaijianhui/" target="_blank">蜘蛛</a> 2006-07-24 00:48 <a href="http://www.blogjava.net/zhaijianhui/archive/2006/07/24/59724.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>