﻿<?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-braint8-文章分类-ibatis学习过程</title><link>http://www.blogjava.net/braint8/category/41447.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 06 Nov 2009 12:53:01 GMT</lastBuildDate><pubDate>Fri, 06 Nov 2009 12:53:01 GMT</pubDate><ttl>60</ttl><item><title>ibatis操作大字段Clob和Blob问题及解决</title><link>http://www.blogjava.net/braint8/articles/299298.html</link><dc:creator>情晚风</dc:creator><author>情晚风</author><pubDate>Thu, 22 Oct 2009 02:15:00 GMT</pubDate><guid>http://www.blogjava.net/braint8/articles/299298.html</guid><wfw:comment>http://www.blogjava.net/braint8/comments/299298.html</wfw:comment><comments>http://www.blogjava.net/braint8/articles/299298.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/braint8/comments/commentRss/299298.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/braint8/services/trackbacks/299298.html</trackback:ping><description><![CDATA[1.插入，修改Clob类型：<br />ibatis语句:content=#content:CLOB#<br />如果bean里定义为String类型的，直接用resultClass，不能把CLOB类型值赋值给String;<br />必须使用resultMap来定义jdbcType和javaType,如：<br />    &lt;resultMap class="fastrise.work.obj_class.Pub_Msg" id="pub_msg_rm"&gt;<br />        &lt;result property="pub_msg_id" column="PUB_MSG_ID"/&gt;<br />        &lt;result property="pub_msg_title" column="PUB_MSG_TITLE"/&gt;        <br />        &lt;result property="pub_msg_content" column="PUB_MSG_CONTENT" jdbcType="CLOB" javaType="java.lang.String" /&gt;        <br />        &lt;result property="pub_msg_senddate" column="PUB_MSG_SENDDATE"/&gt;<br />        &lt;result property="pub_msg_creater" column="PUB_MSG_CREATER"/&gt;<br />    &lt;/resultMap&gt;<br />以上是用来对于select使用的，因为返回的list里是自动封装好的bean对象,直接使用resultClass的话，也可以返回封装好bean的list，但是对于Clob字段里的值是null.<br /><br />2.ibatis对clob字段的插入修改，数据过长的问题：<br />使用9i数据本身提供的jdbc驱动不能完美支持大数据文本，一直提示数据超过大小，也试过改配置：<br />在SqlMapConfig.xml里的事务配置数据源里加配置<br />    &lt;property name="SetBigStringTryClob" value="true"/&gt;<br />还是不行，查了很多资料，找个10g的jdbc驱动，不要用class12.jar,这个是支持老版本jdk，实在不好用<br />上官网找最新的10g的jdbc驱动ojdbc14.jar，更新工程，正常可以插入大数据了.<br />(鄙视下oracle，下个驱动还要我注册。。。)<br />oracle 10g jdbc驱动地址：<br />http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/jdbc_10201.html<br /><br />Blob类型应该类似，但没实际使用过。<br />参考文章：http://opensource.atlassian.com/confluence/oss/display/IBATIS/How+do+I+use+a+BLOB+or+CLOB<br />英文的，不过多数看的懂意思，比较简单，看来还是多数英文的资料可靠;上国内的网找资料，多数是这里，那里复制<br />过来的，很多都一字不差。<img src ="http://www.blogjava.net/braint8/aggbug/299298.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/braint8/" target="_blank">情晚风</a> 2009-10-22 10:15 <a href="http://www.blogjava.net/braint8/articles/299298.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ibatis动态SQL语句</title><link>http://www.blogjava.net/braint8/articles/295821.html</link><dc:creator>情晚风</dc:creator><author>情晚风</author><pubDate>Mon, 21 Sep 2009 02:48:00 GMT</pubDate><guid>http://www.blogjava.net/braint8/articles/295821.html</guid><wfw:comment>http://www.blogjava.net/braint8/comments/295821.html</wfw:comment><comments>http://www.blogjava.net/braint8/articles/295821.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/braint8/comments/commentRss/295821.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/braint8/services/trackbacks/295821.html</trackback:ping><description><![CDATA[动态SQL语句<br />1)二元条件元素的属性： <br />    prepend  － 可被覆盖的 SQL 语句组成部分，添加在语句的前面（可选） <br />    property  － 被比较的属性（必选） <br />    compareProperty  －  另一个用于和前者比较的属性（必选或选择 compareValue） <br />    compareValue  －  用于比较的值（必选或选择 compareProperty） <br />&lt;isEqual&gt;                  比较属性值和静态值或另一个属性值是否相等。 <br />&lt;isNotEqual&gt;          比较属性值和静态值或另一个属性值是否不相等。<br />&lt;isGreaterThan&gt;      比较属性值是否大于静态值或另一个属性值。 <br />&lt;isGreaterEqual&gt;  比较属性值是否大于等于静态值或另一个属性值。 <br />&lt;isLessThan&gt;          比较属性值是否小于静态值或另一个属性值。 <br />&lt;isLessEqual&gt;          比较属性值是否小于等于静态值或另一个属性值。 <br />例子： <br />&lt;isLessEqual prepend=”AND” property=”age” compareValue=”18”&gt; <br />    ADOLESCENT = 'TRUE' <br />&lt;/isLessEqual&gt; <br /> <br />2)一元条件元素的属性： <br />    prepend  － 可被覆盖的 SQL 语句组成部分，添加在语句的前面（可选） <br />    property  － 被比较的属性（必选） <br />&lt;isPropertyAvailable&gt;          检查是否存在该属性（存在 parameter bean 的属性） 。 <br />&lt;isNotPropertyAvailable&gt;  检查是否不存在该属性（不存在 parameter bean 的属性） 。 <br />&lt;isNull&gt;                                  检查属性是否为 null。 <br />&lt;isNotNull&gt;                              检查属性是否不为 null。 <br />&lt;isEmpty&gt;                                  检查 Collection.size()的值，属性的 String 或 String.valueOf()值,<br />                                                    是否为 null或空（ “”或size() &lt; 1） 。 <br />&lt;isNotEmpty&gt;                          检查 Collection.size()的值，属性的 String 或 String.valueOf()值,<br />                                                    是否不为 null 或不为空（ “”或 size() &gt; 0） 。 <br />例子： <br />&lt;isNotEmpty prepend=”AND” property=”firstName” &gt; <br />    FIRST_NAME=#firstName# <br />&lt;/isNotEmpty&gt;  <br /><br />3)Iterate：这属性遍历整个集合，并为 List 集合中的元素重复元素体的内容。<br />     <br />    Iterate 的属性： <br />        prepend  － 可被覆盖的 SQL 语句组成部分，添加在语句的前面（可选） <br />        property  － 类型为 java.util.List 的用于遍历的元素（必选） <br />        open  －  整个遍历内容体开始的字符串，用于定义括号（可选） <br />        close  －整个遍历内容体结束的字符串，用于定义括号（可选） <br />        conjunction －  每次遍历内容之间的字符串，用于定义 AND 或 OR（可选） <br />        <br />    &lt;iterate&gt;  遍历类型为 java.util.List的元素。 <br />                         例子： <br />                         &lt;iterate prepend=”AND” property=”userNameList” <br />                                         open=”(” close=”)” conjunction=”OR”&gt; <br />                                         username=#userNameList[]# <br />                         &lt;/iterate&gt; <br />     <br />#注意：使用&lt;iterate&gt;时，在List元素名后面包括方括号[]非常重要，方括号[]将<br />    对象标记为List，以防解析器简单地将List输出成String。<img src ="http://www.blogjava.net/braint8/aggbug/295821.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/braint8/" target="_blank">情晚风</a> 2009-09-21 10:48 <a href="http://www.blogjava.net/braint8/articles/295821.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ibatis学习过程(五)</title><link>http://www.blogjava.net/braint8/articles/295817.html</link><dc:creator>情晚风</dc:creator><author>情晚风</author><pubDate>Mon, 21 Sep 2009 02:42:00 GMT</pubDate><guid>http://www.blogjava.net/braint8/articles/295817.html</guid><wfw:comment>http://www.blogjava.net/braint8/comments/295817.html</wfw:comment><comments>http://www.blogjava.net/braint8/articles/295817.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/braint8/comments/commentRss/295817.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/braint8/services/trackbacks/295817.html</trackback:ping><description><![CDATA[1.Result Map各种方式<br />1)隐式的Result Map,返回结果为Product实例<br />    &lt;statement id=”getProduct” resultClass=”com.ibatis.example.Product”&gt; <br />        select <br />        PRD_ID as id, <br />        PRD_DESCRIPTION as description <br />        from PRODUCT <br />        where PRD_ID = #value# <br />    &lt;/statement&gt; <br />上面的 mapped statement定义了 resultClass 属性，并为每个字段指定了别名，用于匹配<br />Product 类的属性名称。这样就可以了，不需要 result map。缺点在于，您无法指定字段的数据类型，且<br />不区分大小写，不建议用。<br /><br />2)基本类型的Result（即String，Integer，Boolean）返回结果为int<br />&lt;resultMap id=”get-product-result” class=”java.lang.String”&gt; <br />    &lt;result property=”value” column=”PRD_DESCRIPTION”/&gt; <br />&lt;/resultMap&gt; <br />更简单方法是，在 mapped statement 中使用 resultClass 属性（使用“as”关键字给字段<br />取别名“value” ） ： <br />&lt;statement id=”getProductCount” resultClass=”java.lang.Integer”&gt; <br />    select count(1) as value <br />    from PRODUCT <br />&lt;/statement&gt; <br /><br />3)Map方式，返回结果为HashMap<br />&lt;resultMap id=”get-product-result” class=”java.util.HashMap”&gt; <br />    &lt;result property=”id” column=”PRD_ID”/&gt; <br />    &lt;result property=”code” column=”PRD_CODE”/&gt; <br />    &lt;result property=”description” column=”PRD_DESCRIPTION”/&gt; <br />    &lt;result property=”suggestedPrice” column=”PRD_SUGGESTED_PRICE”/&gt; <br />&lt;/resultMap&gt; <br /><br />&lt;statement id=”getProductCount” resultClass=”java.util.HashMap”&gt; <br />    select * from PRODUCT <br />&lt;/statement&gt; <br /><br />2.一对多的配置实现方式,如：Category 拥有 Product 对象的 List<br />&lt;resultMap id=”get-category-result” class=”com.ibatis.example.Category”&gt; <br />    &lt;result property=”id” column=”CAT_ID”/&gt; <br />    &lt;result property=”description” column=”CAT_DESCRIPTION”/&gt; <br />    &lt;result property=”productList” column=”CAT_ID” select=” getProductsByCatId”/&gt; <br />&lt;/resultMap&gt; <br />&lt;resultMap id=”get-product-result” class=”com.ibatis.example.Product”&gt; <br />    &lt;result property=”id” column=”PRD_ID”/&gt; <br />    &lt;result property=”description” column=”PRD_DESCRIPTION”/&gt; <br />&lt;/resultMap&gt; <br />&lt;statement id=”getCategory” parameterClass=”int” resultMap=”get-category-result”&gt; <br />    select * from CATEGORY where CAT_ID = #value# <br />&lt;/statement&gt; <br />&lt;statement id=”getProductsByCatId” parameterClass=”int” resultMap=”get-product-result”&gt;<br />    select * from PRODUCT where PRD_CAT_ID = #value# <br />&lt;/statement&gt; <br /><br />3.ibatis通过配置解决N+1的问题，解决大数据量时的效率问题<br />    &lt;resultMap id=”get-product-result” class=”com.ibatis.example.Product”&gt; <br />        &lt;result property=”id” column=”PRD_ID”/&gt; <br />        &lt;result property=”description” column=”PRD_DESCRIPTION”/&gt; <br />        &lt;result property=”category.id” column=”CAT_ID” /&gt; <br />        &lt;result property=”category.description” column=”CAT_DESCRIPTION” /&gt; <br />    &lt;/resultMap&gt; <br />    &lt;statement id=”getProduct” parameterClass=”int” resultMap=”get-product-result”&gt; <br />        select * <br />        from PRODUCT, CATEGORY <br />        where PRD_CAT_ID=CAT_ID <br />        and PRD_ID = #value# <br />    &lt;/statement&gt;<br />    利用连接来实现，直接一条SQL语句<br /><br />4.ibatis对于字段的继承的问题？<br />如：表字段10个，定义一个映射第1，2字段，再定义一个映射包含1，2字段，还需要3，4字段，是否可以用继承来减少资源实现？<br />&lt;typeAlias alias="Test" type="com.xxx.Test" /&gt;  <br />&lt;resultMap id = "test" type = "Test"&gt;  <br />   &lt;result property="id" column="id" /&gt;  <br />&lt;/resultMap&gt;  <br />&lt;resultMap id = "extTest" extends="test"&gt;  <br />  &lt;result property="name" column="name"/&gt;  <br />&lt;/resultMap&gt;<br />这样使用 extTest 则拥有id,name两个属性，达到复用。<br /><img src ="http://www.blogjava.net/braint8/aggbug/295817.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/braint8/" target="_blank">情晚风</a> 2009-09-21 10:42 <a href="http://www.blogjava.net/braint8/articles/295817.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ibatis学习过程(四)</title><link>http://www.blogjava.net/braint8/articles/293145.html</link><dc:creator>情晚风</dc:creator><author>情晚风</author><pubDate>Sat, 29 Aug 2009 15:33:00 GMT</pubDate><guid>http://www.blogjava.net/braint8/articles/293145.html</guid><wfw:comment>http://www.blogjava.net/braint8/comments/293145.html</wfw:comment><comments>http://www.blogjava.net/braint8/articles/293145.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/braint8/comments/commentRss/293145.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/braint8/services/trackbacks/293145.html</trackback:ping><description><![CDATA[四、对于ibatis是在实现类里的操作方法是怎么找到对象对应的映射文件的？<br />实现类：<br />  Reader reader = Resources.getResourceAsReader("com/braint/ibatis/SqlMapConfig.xml");<br />  sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);<br /><br />查询方法：<br />  roleList = sqlMapClient.queryForList("searchRole",map);<br />            <br />SqlMapConfig.xml可配置多个sqlMap<br />  &lt;sqlMap resource="com/braint/ibatis/Role1.xml"/&gt;  <br />  &lt;sqlMap resource="com/braint/ibatis/Role.xml"/&gt;<br />  <br />这里只有加载SqlMapConfig.xml，操作的时候并不知道到底是调用哪一个，前面一直在研究配置文件的写法和调用，忽视了到底是怎么用的。测试了一个，写了两个sqlMap,就出错。<br /><br />网络上对于这个问题很少，因为对数是使用与spring结合，使用spring提供的dao模版来操作多个对象对应的映射文件，而且ibatis新版本取消了自己的dao模版(2.0的有)。为了弄清楚这个原理，看了源码，实在太长，看了很久，最终也没看懂。<br /><br />偶然间看到一个&lt;sqlMap namespace=""&gt;节点有个namespace属性，心想是否是利用这个值找对应的映射文件？<br />于是在Role.xml中配置&lt;sqlMap namespace="Role"&gt;，执行，依旧报错。。。<br />再SqlMapConfig.xml配置&lt;settings useStatementNamespaces="true"/&gt;，执行，还是错。。。<br />但是这次报错不一样了，提示There is no statement named searchRole in this SqlMap.按提示应该是直接在SqlMapConfig.xml这里找searchRole方法。<br />由此提示想到了实现类里的方法改为sqlMapClient.queryForList("Role.searchRole");正常了。。。<br /><br />总结：<br />①配置SqlMapConfig.xml配置&lt;settings useStatementNamespaces="true"/&gt;<br />②Role.xml中配置&lt;sqlMap namespace="Role"&gt;<br />③实现类调用sqlMapClient.queryForList("Role.searchRole")<br /><font color="#ff0000">#如果配置为&lt;sqlMap namespace="RoleSpace"&gt;,实现类也要改为sqlMapClient.queryForList("RoleSpace.searchRole")</font><br />不知道ibatis的这样用法是不是基本没人用了，网络上查了很多资料都没有，但最终还是解决问题。<br />使用spring的模版应该会更简单，就跟hibernate的模版一样吧，不过现在还没和spring结合不清楚。<img src ="http://www.blogjava.net/braint8/aggbug/293145.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/braint8/" target="_blank">情晚风</a> 2009-08-29 23:33 <a href="http://www.blogjava.net/braint8/articles/293145.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ibatis学习过程(三)</title><link>http://www.blogjava.net/braint8/articles/293119.html</link><dc:creator>情晚风</dc:creator><author>情晚风</author><pubDate>Sat, 29 Aug 2009 12:39:00 GMT</pubDate><guid>http://www.blogjava.net/braint8/articles/293119.html</guid><wfw:comment>http://www.blogjava.net/braint8/comments/293119.html</wfw:comment><comments>http://www.blogjava.net/braint8/articles/293119.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/braint8/comments/commentRss/293119.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/braint8/services/trackbacks/293119.html</trackback:ping><description><![CDATA[三、有条件的方法并执行配置文件.xml中的SQL语句<br />1.条件为Bean对象<br />roleList = sqlMapClient.queryForList("searchRole",role);<br /><br />Role.xml文件中<br />    &lt;select id="searchRole" parameterClass="Role" resultClass="Role"&gt;<br />        select * from t_role<br />        &lt;dynamic prepend="where"&gt;//dynamic标签，当下属标签成立时在sql语句后加入where,即isNotNull property="rolename"&gt;成立时<br />            &lt;isNotNull property="rolename"&gt;<br />                rolename like '%$rolename$%'<br />            &lt;/isNotNull&gt;<br />            &lt;isNotNull property="status"&gt;//可以在bean里设置多个属性值作为多个条件<br />                and status=#status#<br />            &lt;/isNotNull&gt;<br />        &lt;/dynamic&gt;<br />    &lt;/select&gt;<br /><br />    模糊查询的时候需要把##换成$$，一开始使用##，一直提示"赋值变量不存在"，网络上查了下才知道要换成$$，原因也不清楚。。。<br />    <br />2.条件为Map<br />与Bean对象一模一样，也可以用&lt;isNotNull property="rolename"&gt;<br /><br />3.只需要有用的字段<br />表的字段有10个，而这个时候你只需要用到5个，则可以使用resultMap<br />以最原始的查询为例子：<br />    &lt;select id="searchRole" resultClass="Role"&gt;<br />        select * from t_role<br />    &lt;/select&gt;<br />    <br />    可以修改为：<br />  &lt;resultMap id="get-role-result" class="Role"&gt;<br />      &lt;result property="roleid" column="roleid"/&gt;//property为role对象的属性，column为对应表的字段名<br />      &lt;result property="status" column="status"/&gt;<br />  &lt;/resultMap&gt;<br />  <br />  &lt;select id="searchRole" resultMap="get-role-result"&gt;<br />        select * from t_role<br />    &lt;/select&gt;<br />    这样返回的List里的role对象只就只有roleid,status有值，rolename是没有值为null;<br />    <br />4.分页<br />queryForList(String id, int skip, int max) <br />id表示配置文件中的方法<br />skip表示结果集记录的开始索引,从0开始<br />max表示结果集记录总数,max可以超过结果集的实际数无影响<br />比如要查结果集的前三条记录，skip=0,max=3;<br /><br />5.queryForPaginatedList方法提供分页的数据子集<br />PaginatedList 接口包含了向前和向后翻页的方法（nextPage()，previousPage()，gotoPage()） ，<br />并提供了检查翻页状态的方法（isFirstPage()，isMiddlePage()，isLastPage()，<br />isPreviousPageAvailable()，getPageIndex()，getPageSize()） 。<br />虽然不能从 PaginatedList 接口得到查询结果集的总数，但这个总数可以再执行一个简单的语句 <br />count()来得到。否则，PaginatedList接口会大大的降低性能。<br /><img src ="http://www.blogjava.net/braint8/aggbug/293119.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/braint8/" target="_blank">情晚风</a> 2009-08-29 20:39 <a href="http://www.blogjava.net/braint8/articles/293119.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ibatis学习过程(二)</title><link>http://www.blogjava.net/braint8/articles/293107.html</link><dc:creator>情晚风</dc:creator><author>情晚风</author><pubDate>Sat, 29 Aug 2009 10:37:00 GMT</pubDate><guid>http://www.blogjava.net/braint8/articles/293107.html</guid><wfw:comment>http://www.blogjava.net/braint8/comments/293107.html</wfw:comment><comments>http://www.blogjava.net/braint8/articles/293107.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/braint8/comments/commentRss/293107.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/braint8/services/trackbacks/293107.html</trackback:ping><description><![CDATA[利用ibatis对表增、删、改、查；方法与平常的DAO是一样的，只是去配置文件查找对应的方法而已<br /><br />1.获取单个对象<br />实现类方法：<br />    public Role getRole(int roleid) {<br />        <br />        Role role = null;<br />        try {<br />            role = (Role) sqlMapClient.queryForObject("getRole", roleid);<br />        } catch (SQLException e) {<br />            // TODO Auto-generated catch block<br />            e.printStackTrace();<br />        }<br />        return role;<br />    }<br />    <br />Role.xml文件中配置：<br />    &lt;select id="getRole" parameterClass="int" resultClass="Role"&gt;<br />        select * from t_role<br />        where roleid=#roleid#<br />    &lt;/select&gt;<br />    <br />    parameterClass="int"表示参数类型，resultClass="Role"依旧是返回值<br /><br />2.新增<br />实现类方法：<br />    public void insertRole(Role role) {<br />        <br />        try {<br />            sqlMapClient.insert("insertRole", role);//这个方法返回一个Object,其实是返回新插入记录的序列<br />            System.out.println("新增成功!");<br />        } catch (SQLException e) {<br />            // TODO Auto-generated catch block<br />            e.printStackTrace();<br />        }<br />    }<br />Role.xml文件中配置：<br />    &lt;insert id="insertRole" parameterClass="Role"&gt;<br />        &lt;selectKey resultClass="int" keyProperty="roleid"&gt;<br />            select SEQ_T_ROLE.nextval from dual<br />        &lt;/selectKey&gt;<br />        <br />        insert into t_role (roleid,rolename,status) <br />        values (#roleid#,#rolename#,#status#)<br />    &lt;/insert&gt;<br />    <br />    这里是根据序列新增一条记录，所以配置了selectKey;如果不根据序列的话，不用配置selectKey;<br />    <br />3.修改<br />实现类方法：<br />    public void updateRole(Role role) {<br />        <br />        try {<br />            sqlMapClient.update("updateRole", role);//返回值为受影响的行，int型<br />        } catch (SQLException e) {<br />            // TODO Auto-generated catch block<br />            e.printStackTrace();<br />        }<br />    }<br />Role.xml文件中配置：<br />    &lt;update id="updateRole" parameterClass="Role"&gt;<br />        update t_role set rolename=#rolename# where roleid=#roleid#<br />    &lt;/update&gt;<br /><br />4.删除<br />实现类方法：<br />    public void deleteRole(int roleid) {<br />        <br />        try {<br />            sqlMapClient.delete("deleteRole", roleid);<br />        } catch (SQLException e) {<br />            // TODO Auto-generated catch block<br />            e.printStackTrace();<br />        }<br /><br />    }<br />Role.xml文件中配置：<br />    &lt;delete id="deleteRole" parameterClass="int"&gt;<br />        delete from t_role where roleid=#roleid#<br />    &lt;/delete&gt;<img src ="http://www.blogjava.net/braint8/aggbug/293107.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/braint8/" target="_blank">情晚风</a> 2009-08-29 18:37 <a href="http://www.blogjava.net/braint8/articles/293107.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ibatis学习过程(一)</title><link>http://www.blogjava.net/braint8/articles/293104.html</link><dc:creator>情晚风</dc:creator><author>情晚风</author><pubDate>Sat, 29 Aug 2009 09:35:00 GMT</pubDate><guid>http://www.blogjava.net/braint8/articles/293104.html</guid><wfw:comment>http://www.blogjava.net/braint8/comments/293104.html</wfw:comment><comments>http://www.blogjava.net/braint8/articles/293104.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/braint8/comments/commentRss/293104.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/braint8/services/trackbacks/293104.html</trackback:ping><description><![CDATA[开始自学ibatis<br />1.环境：<br />导包classes12.jar和ibatis-2.3.4.726.jar<br />配置文件：<br />①数据库驱动，URL，用户名，密码<br />driver=oracle.jdbc.driver.OracleDriver<br />url=jdbc:oracle:thin:@localhost:1521:SID<br />username=ibatis<br />password=ibatis<br />②XML文件<br />复制ibatis-2.3.4.726\simple_example\com\mydomain\data\SqlMapConfig.xml文件和Account.xml文件到工程<br />(这里可以参考ibatis-2.3.4.726\simple_example\com\mydomain\data下的例子怎么写的)<br />修改Account.xml名为Role.xml，并配置&lt;sqlMap resource="com/braint/ibatis/Role.xml"/&gt;<br /><br />2.使用<br />①建立个普通Bean，保证有个无参数构造方法,创建所对应的表的属性以及set,get方法<br /><br />②Role.xml文件中写和实现类中方法所对应的标签，如：<br />    &lt;typeAlias alias="Role" type="com.braint.beans.Role"/&gt;<br />    这里alias="Role"应该是对于后面type的简写，下面查询的时候写的resultClass应与alias所对应（当然如果改为alias="Role111"，下面的查询改为resultClass="Role111"也是可以的）<br />    <br />    &lt;select id="searchRole" resultClass="Role"&gt;<br />        select * from t_role<br />    &lt;/select&gt;<br />    即为查找表t_role所有记录，返回为List&lt;Role&gt;<br /><br />③建立DAO和实现类,在实现类中创建各个方法。<br />首先得先创建读写流从Role.xml文件中读方法，所以在实现类中加如以下代码：<br />    private static SqlMapClient sqlMapClient;<br />    <br />    static {<br />        try {<br />            Reader reader = Resources.getResourceAsReader("com/braint/ibatis/SqlMapConfig.xml");<br />            sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);<br />        } catch (IOException e) {<br />            // TODO Auto-generated catch block<br />            e.printStackTrace();<br />        }<br />    }<br />④实现类中调用Role.xml文件中的方法：    <br />    public List&lt;Role&gt; searchRole() {<br />        <br />        List&lt;Role&gt; roleList = null;<br />        try {<br />            roleList = sqlMapClient.queryForList("searchRole");<br />            //这里的参数和返回值对应xml文件中的&lt;select id="searchRole" resultClass="Role"&gt;<br />        } catch (SQLException e) {<br />            // TODO Auto-generated catch block<br />            e.printStackTrace();<br />        }<br />        return roleList;<br />    }<br /><br /><img src ="http://www.blogjava.net/braint8/aggbug/293104.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/braint8/" target="_blank">情晚风</a> 2009-08-29 17:35 <a href="http://www.blogjava.net/braint8/articles/293104.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>