iBatis的基本使用

数据库连接信息:db.properties

driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/ssi
username=root
password=123456

主配置文件:sqlMapConfig.xml

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <!DOCTYPE sqlMapConfig
 3     PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
 4     "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
 5 <sqlMapConfig>
 6     <properties resource="db.properties"/>
 7     <!--iBatis配置信息-->
 8     <settings enhancementEnabled="true"
 9             useStatementNamespaces="true"
10             cacheModelsEnabled="true"
11             lazyLoadingEnabled="true"/>
12
13     <!--事务管理器-->
14     <transactionManager type="JDBC">
15     <!--数据库连接信息-->
16     <dataSource type="SIMPLE">
17       <property name="JDBC.Driver" value="${driverClass}"/>
18       <property name="JDBC.ConnectionURL" value="${url}"/>
19       <property name="JDBC.Username" value="${username}"/>
20       <property name="JDBC.Password" value="${password}"/>
21     </dataSource>
22     </transactionManager>
23     <!-- 映射文件位置 -->
24     <sqlMap resource="org/zln/ibatis/sqlmaps/Person.xml" />
25     <sqlMap resource="org/zln/ibatis/sqlmaps/UserAccount.xml" />
26 </sqlMapConfig>

初始化配置文件

 1 package org.zln.ibatis.utils;
 2
 3 import com.ibatis.common.resources.Resources;
 4 import com.ibatis.sqlmap.client.SqlMapClient;
 5 import com.ibatis.sqlmap.client.SqlMapClientBuilder;
 6
 7 import java.io.IOException;
 8 import java.io.Reader;
 9
10 /**
11  * Created by sherry on 000008/6/8 14:36.
12  */
13 public class SqlMapUtils {
14     private static final String resource = "sqlMapConfig.xml";
15     public static SqlMapClient sqlMapClient = null;
16
17     public static SqlMapClient getSqlMapClient() throws IOException {
18         Reader reader = Resources.getResourceAsReader(resource);
19         sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);
20         return sqlMapClient;
21     }
22 }

映射文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap
        PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
        "http://www.ibatis.com/dtd/sql-map-2.dtd">

<!-- 设置命名空间 -->
<sqlMap namespace="org.zln.ibatis.domain.UserAccount">

    <typeAlias alias="UserAccount" type="org.zln.ibatis.domain.UserAccount"/>

    /*外部参数映射*/
    <parameterMap id="fullUserAccountMapExport" class="UserAccount">
        <parameter property="userid" jdbcType="INTEGER"/>
        <parameter property="username" jdbcType="VARCHAR"/>
        <parameter property="password" jdbcType="VARCHAR"/>
        <parameter property="groupname" jdbcType="VARCHAR"/>
    </parameterMap>
    /*结果集映射*/
    <resultMap id="UserAccountMap" class="UserAccount">
        <result property="userid" column="userid"/>
        <result property="username" column="username"/>
        <result property="password" column="password"/>
        <result property="groupname" column="groupname"/>
        <!--当查询tt的时候,会查询select-id对应的SQL,然后映射到JavaBean中的listColl,-->
        <!--<result column="tt" property="listColl" select="select-id"/>-->
    </resultMap>

    <select id="getUserAccountList" parameterClass="UserAccount" resultClass="UserAccount">
        SELECT userid,username,password,groupname FROM user_account
        <dynamic prepend="WHERE">
            <isNotEmpty property="username" prepend="AND">
                username LIKE ‘%‘||#username#||‘%‘
            </isNotEmpty>
            <isNotEmpty property="password" prepend="AND">
                password = #password#
            </isNotEmpty>
            <isNotEmpty property="groupname" prepend="AND">
                groupname LIKE ‘%‘||#groupname#||‘%‘
            </isNotEmpty>
            <!--循环标签-->
            <iterate property="ids" open="(" close=")" conjunction=",">
                userid = #userid#
            </iterate>
        </dynamic>
    </select>

    <insert id="insertUserAccount" parameterClass="UserAccount">
        INSERT INTO user_account (username,password,groupname) VALUES (#username#,#password#,#groupname#)
    </insert>
    /*使用外部映射*/
    <insert id="insertUserAccount_1" parameterMap="fullUserAccountMapExport">
        INSERT INTO user_account (username,password,groupname) VALUES (?,?,?)
    </insert>
    /*Oracle的序列使用演示*/
    <!--<insert id="insertUserAccount_2" parameterMap="fullUserAccountMapExport">
        <selectKey keyProperty="userid" resultClass="int">
            SELECT nextVal(#序列#) FROM dual
        </selectKey>
        INSERT INTO user_account (userid,username,password,groupname) VALUES (?,?,?,?)
    </insert>-->

    <update id="updateUserAccount" parameterClass="UserAccount">
        UPDATE user_account set userid = #userid#
        <dynamic>
            <isNotEmpty prepend="," property="username">
                username = #username#
            </isNotEmpty>
            <isNotEmpty prepend="," property="password">
                password = #password#
            </isNotEmpty>
            <isNotEmpty prepend="," property="groupname">
                groupname = #groupname#
            </isNotEmpty>
        </dynamic>
        WHERE userid = #userid#
    </update>

    <sql id="select-user_account-list">
        SELECT userid,username,password,groupname FROM user_account
    </sql>
    <sql id="select-user_account-count">
        SELECT COUNT(1) FROM user_account
    </sql>
    <sql id="where-user_account">
        <![CDATA[
          WHERE userid > #userid:INTEGER#
        ]]>
    </sql>
    <select id="selectUserAccountsAfterId" parameterClass="UserAccount" resultClass="UserAccount">
        <include refid="select-user_account-list"/>
        <include refid="where-user_account"/>
    </select>

    /*调用存储过程演示*/
    <!--<procedure id="callProDemo" parameterClass="string" resultClass="int">
        {call product(?)}
    </procedure>-->

</sqlMap>

BaseDao.java

 1 package org.zln.ibatis.dao.base;
 2
 3 import com.ibatis.sqlmap.client.SqlMapClient;
 4 import org.zln.ibatis.utils.SqlMapUtils;
 5
 6 import java.io.IOException;
 7
 8 /**
 9  * Created by sherry on 000008/6/8 15:16.
10  */
11 public class BaseDao {
12     public SqlMapClient sqlMapClient;
13
14     {
15         try {
16             sqlMapClient = SqlMapUtils.getSqlMapClient();
17         } catch (IOException e) {
18             e.printStackTrace();
19         }
20     }
21 }

UserAccountDaoImpl.java

 1 package org.zln.ibatis.dao.impl;
 2
 3 import org.zln.ibatis.dao.UserAccountDao;
 4 import org.zln.ibatis.dao.base.BaseDao;
 5 import org.zln.ibatis.domain.UserAccount;
 6
 7 import java.sql.SQLException;
 8 import java.util.List;
 9 import java.util.Map;
10
11 /**
12  * Created by sherry on 000008/6/8 15:15.
13  */
14 public class UserAccountDaoImpl extends BaseDao implements UserAccountDao {
15
16     @Override
17     public List<UserAccount> getUserAccountList(UserAccount userAccount){
18         List<UserAccount> userAccounts = null;
19         try {
20             userAccounts = sqlMapClient.queryForList("org.zln.ibatis.domain.UserAccount.getUserAccountList",userAccount);
21
22             //start test queryForMap
23             Map<String,UserAccount> map = sqlMapClient.queryForMap("org.zln.ibatis.domain.UserAccount.getUserAccountList",userAccount,"username");
24             System.out.println(map);
25             //end
26         } catch (SQLException e) {
27             e.printStackTrace();
28         }
29         return userAccounts;
30     }
31
32     @Override
33     public List<UserAccount> getUserAccountListAfterId(UserAccount userAccount) {
34         List<UserAccount> userAccounts = null;
35         try {
36             userAccounts = sqlMapClient.queryForList("org.zln.ibatis.domain.UserAccount.selectUserAccountsAfterId",userAccount);
37
38         } catch (SQLException e) {
39             e.printStackTrace();
40         }
41         return userAccounts;
42     }
43
44     @Override
45     public void insertUserAccount(List<UserAccount> userAccounts) {
46         try {
47             /*批处理*/
48             sqlMapClient.startTransaction();
49             sqlMapClient.startBatch();
50             for (UserAccount userAccount:userAccounts){
51                 sqlMapClient.insert("org.zln.ibatis.domain.UserAccount.insertUserAccount",userAccount);
52             }
53             sqlMapClient.executeBatch();
54             sqlMapClient.commitTransaction();
55         } catch (SQLException e) {
56             e.printStackTrace();
57         }finally {
58             try {
59                 sqlMapClient.endTransaction();
60             } catch (SQLException e) {
61                 e.printStackTrace();
62             }
63         }
64     }
65
66     @Override
67     public void updateUserAccount(UserAccount userAccount) {
68         try {
69             sqlMapClient.update("org.zln.ibatis.domain.UserAccount.updateUserAccount",userAccount);
70         } catch (SQLException e) {
71             e.printStackTrace();
72         }
73     }
74
75
76 }
时间: 2024-10-26 07:27:19

iBatis的基本使用的相关文章

通过maven test 报org.apache.ibatis.binding.BindingException: Invalid bound statement

背景 直接使用eclipse工具去执行,没有问题,通过testng.xml去执行,没有问题,但通过mvn clean test执行,就报错,提示org.apache.ibatis.binding.BindingException: Invalid bound statement 解决方法 首先先肯定的是:mybatis的配置是没有问题,因为eclipse可以正常执行: 在eclipse中把mapper的xml文件放到src代码目录下是可以一起打包进classes的,而maven去编译的时候不会,

hibernate和ibatis对比

Hibernate是当前最流行的O/R mapping框架,iBATIS是另外一种优秀的O/R mapping框架. Hibernate对数据库结构提供了较为完整的封装,Hibernate的O/R Mapping实现了POJO和数据库表之间的映射,以及SQL的自动生成和执行.程序员往往只需定义好了POJO到数据库表的映射关系,即可通过Hibernate提供的方法完成持久层操作.Hibernate/OJB会根据制定的存储逻辑,自动生成对应的SQL并调用JDBC接口加以执行. 而iBATIS的着力点

iBatis系列之三

iBatis和Hibernate最大差别就是在于iBatis没有严格的和具体的表做关联:而是将结果集和DAO做关联. iBatis的SqlConfig.xml配置一个properties文件,其实可以完全在SqlConfig中配置相应的数据库信息,但是有了一个properties文件之后有一个好处:如果是从生产环境切换到测试环境,只需要修改一处"properties"节点即可. DAO模式就是通过生命一个DAO的接口形式来隐藏数据库层具体的实现:DAO模式提供的规则(接口的方法以及方法

spring2.5整合ibatis

SqlMapClient对象 这个对象是iBatis操作数据库的接口(执行CRUD等操作),它也可以执行事务管理等操作.这个类是我们使用iBATIS的最主要的类. <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/s

Mybatis与Ibatis区别

相信很多关键词在运用ibatis2.x的兄弟并没有通过ibatis的xml映射文件来完成目标间的联系映射.本来也的确没有必要那么做,由于ibatis2.x采用的是"嵌套查询"的方法将目标之间的联系通过查询句子的直接拼装来完成,其作用和在DAO或Service中自行封装是相同的. 不过这种方法存在"N+1查询疑问". 概括地讲,N+1查询疑问可所以这样导致的: ? 你执行了一个独自的SQL句子来获取成果列表(即是+1). ? 对回来的每条记录,你执行了一个查询句子来为

Mybatis缓存报错org.apache.ibatis.exceptions.PersistenceException

错误信息如下: org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: org.apache.ibatis.cache.CacheException: Error deserializing object. Cause: java.lang.ClassNotFoundException: com.kytsoft.model.Adminlink ### Cause: org.apa

ibatis中使用缓存

简单在ibatis中使用cache 首先设置SqlMapConfig.xml中<settings/>节点的属性cacheModelsEnabled="true"    然后在具体sqlmap文件中书写<cacheModel>    <cacheModel id="product-cache" type="LRU">       <flushInterval hours="24"/>

MyBatis3.4.0以上的分页插件错误:Could not find method on interface org.apache.ibatis.executor.statement.StatementHandler named prepare. Cause: java.lang.NoSuchMethodException: org.apache.ibatis.executor.stateme

错误: Could not find method on interface org.apache.ibatis.executor.statement.StatementHandler named prepare. Cause: java.lang.NoSuchMethodException: org.apache.ibatis.executor.statement.StatementHandler.prepare(java.sql.Connection)] with root cause 问题

spring+ibatis环境搭建

简单的spring+ibatis入门实例:ibatis是一种半自动化的持久层框架,它介于JDBC和hibernate之间,使用比较灵活. 一:目录结构 二:需要导入的jar包: 所有的第三方jar包都需要加上,spring.jar.ibatis.-2.3.3.720.jar.sqlijdbc.jar.oscache-2.4.jar.commons-pool-1.3.jar.commons-dbcp-1.4.jar,mysql-connector-5.0.5.jar.不然运行的时候都要报错,这里需

Mybatis/Ibatis,数据库操作的返回值

该问题,我百度了下,根本没发现什么有价值的文章:还是看源代码(详见最后附录)中的注释,最有效了!insert,返回值是:新插入行的主键(primary key):需要包含<selectKey>语句,才会返回主键,否则返回值为null.update/delete,返回值是:更新或删除的行数:无需指明resultClass:但如果有约束异常而删除失败,只能去捕捉异常.queryForObject,返回的是:一个实例对象或null:需要包含<select>语句,并且指明resultMap