一、本文經過幾個簡單的示例,實現ibatis的增刪改查的功能。
二、構建數據庫表,contact表,建表語句以下:(使用的是mysql數據庫) contact表:
- drop table if exists contact;
- create table contact(
- id int(10) not null auto_increment,
- firstName varchar(20) ,
- lastName varchar(20),
- email varchar(20),
- primary key(id)
- );
- insert into contact(firstName,lastName,email) values('tang','lj','tang@126.com');
- insert into contact(firstName,lastName,email) values('li','lin','ll@126.com');
- insert into contact(firstName,lastName,email) values('wang','lihong','lh@126.com');
- insert into contact(firstName,lastName,email) values('cen','fen','cf@126.com');
三、構建相應的JavaBean Contact.java
- package com.tonyj.pojo;
-
- public class Contact {
- private String firstName;
- private String lastName;
- private String email;
- private int id;
-
- }
四、ibatis配置文件詳解 SqlMapConfig.xml文件配置以下:
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE sqlMapConfig
- PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
- "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
- <sqlMapConfig>
- <properties resource="jdbc.properties"/>
- <settings
- cacheModelsEnabled="true"
- enhancementEnabled="true"
- lazyLoadingEnabled="true"
- maxRequests="32"
- maxSessions="10"
- maxTransactions="5"
- useStatementNamespaces="true"/>
- <transactionManager type="JDBC">
- <dataSource type="SIMPLE">
- <property name="JDBC.Driver" value="${jdbc.driverClassName}"/>
- <property name="JDBC.ConnectionURL" value="${jdbc.url}"/>
- <property name="JDBC.Username" value="${jdbc.userName}"/>
- <property name="JDBC.Password" value="${jdbc.password}"/>
- </dataSource>
- </transactionManager>
- <sqlMap resource="Contact.xml"/>
- </sqlMapConfig>
一、<properties>元素,SQL Map配置文件擁有惟一的<properties>元素,用於在配置文件中使用標準的Java 屬性文件(name=value)。這樣作後,在屬性文件中定義的屬性能夠做爲變量在SQL Map配置文件激情包含的全部SQL Map映射文件中引用。
二、<setting>元素 maxRequests:同時執行SQL預計的最大線程數。 maxSessions:同一時間內活動的最大session數。 maxTransactions:同時進入SqlMapClient.startTransaction()的最大線程數。 cacheModelsEnabled:全局性地啓用和禁用SqlMapClient的全部緩存model。 lazyLoadingEnabled:全局性地啓用或禁用SqlMapClient的全部延遲加載。 enhancementEnabled:全局性地啓用或禁用運行時字節碼加強,以優化訪問JavaBean屬性的性能,同時優化延遲加載的性能。 useStatementNamespaces:若是啓用本屬性,必須使用全限定名來引用mapped statement。Mapped statement的全限定名由sql-map的名稱和mapped-statement的名稱合成。
三、<typeAlias>元素 <typeAlias>元素爲一個一般較長的、全限定類名指定一個較短的別名。 <typeAlias alias="shortname" type="com.long.class.path.Class"/>
四、<transactionManager>元素 <transactionManager>元素包含三個事物管理器分別是,JDBC,JTA和EXTERNAL JDBC:經過經常使用的Connection commit()和rollback()方法,讓JDBC管理事務。 JTA:本事務管理器使用一個JTA全局事務,使用SQL Map的事務包括在更大的事務範圍內,這個更大的事務範圍可能包括了其餘的數據庫和事務資源。 EXTERNAL:這個配置能夠本身管理事務。
五、<datasource>元素 <datasource>是<transactionManager>的一部分,爲SQL Map數據源設置了一系列參數。目前SQL Map架構只提供了三個DataSourceFactory,也能夠添加本身的實現。 SimpleDataSourceFactory:DataSource提供了一個基本的實現,適用於J2EE容器提供DataSource的狀況。 DbcpDataSourceFactory:實現使用Jakarta DBCP(Database Connection Pool)的DataSource API提供鏈接池服務。適用於應用/Web容器不提供DataSource服務的狀況,或執行一單獨的應用。 JndiDataSourceFactory:在應用容器內部從JNDI Context中查找DataSource實現。當使用應用服務器,而且服務器提供了容器管理的鏈接池和相關DataSource實現的狀況下,可使用JndiDataSourceFactory。
六、<sqlMap>元素 <sqlMap>元素用於包括SQL Map映射文件和其餘的SQL Map配置文件。每一個SqlMapClient對象使用的全部SQL Map映射文件都要在此聲明。映射文件做爲stream resource從類路徑或URL讀入。
jdbc.properties配置文件
- jdbc.driverClassName=com.mysql.jdbc.Driver
- jdbc.url=jdbc:mysql:
- jdbc.userName=root
- jdbc.password=sa
Contact.xml文件
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE sqlMap
- PUBLIC "-//ibatis.apache.org//DTD SQL MAP 2.0//EN"
- "http://ibatis.apache.org/dtd/sql-map-2.dtd">
- <sqlMap>
- <typeAlias alias="Contact" type="com.tonyj.pojo.Contact"/>
- <!-- ibatis查詢操做 -->
- <select id="getAll" resultClass="Contact">
- select *
- from contact
- </select>
- <!-- ibatis插入1 -->
- <insert id="insert" parameterClass="Contact">
- insert into contact(firstName,lastName,email)
- values(#firstName#,#lastName#,#email#)
- <selectKey resultClass="int" keyProperty="id">
- select last_insert_id() as id
- </selectKey>
- </insert>
- <!-- ibatis插入操做2 -->
- <parameterMap class="Contact" id="insert-contact-parameter">
- <parameter property="lastName"/>
- <parameter property="firstName"/>
- <parameter property="email"/>
- </parameterMap>
- <statement id="insertContact" parameterMap="insert-contact-parameter">
- insert into contact(lastName,firstName,email) values (?,?,?);
- </statement>
- <!-- ibatis刪除操做 -->
- <delete id="deleteContactById" parameterClass="int">
- delete from Contact where id=#id#
- </delete>
- <!-- ibatis更新操做 -->
- <update id="updateById" parameterClass="int">
- update Contact set lastName="tonyJ"
- where id=#id#
- </update>
- <!-- ibatis根據id查詢 -->
- <resultMap class="Contact" id="result">
- <result property="id" column="id"/>
- <result property="firstName" column="firstName"/>
- <result property="lastName" column="lastName"/>
- <result property="email" column="email"/>
- </resultMap>
- <select id="getById" resultMap="result">
- select * from contact where id=#id#
- </select>
- <!-- ibatis調用mysql存儲過程 -->
- <procedure id="storedInfo" resultClass="Contact">
- {call showData()}
- </procedure>
- <!-- ibatis模糊查詢 -->
- <select id="selectByName" parameterClass="String" resultClass="Contact">
- select *
- from contact
- where firstName like '%$firstName$%'
- </select>
- <!-- ibatis分頁查詢1 -->
- <select id="getByPage" parameterClass="java.util.Map" resultClass="Contact">
- select * from contact
- <isParameterPresent>
- <isNotNull property="orderById">
- order by $orderById$
- </isNotNull>
- <isNotNull property="limitClauseStart">
- limit $limitClauseStart$,$limitClauseCount$
- </isNotNull>
- </isParameterPresent>
- </select>
- <!--ibatis 分頁查詢2 -->
- <select id="getByPage1" parameterClass="java.util.Map" resultClass="Contact">
- select *
- from contact
- </select>
- </sqlMap>
五、測試類以下: IbatisExample.java以下:
- package com.tonyj.test;
-
- import java.io.Reader;
-
- import com.ibatis.common.resources.Resources;
- import com.ibatis.sqlmap.client.SqlMapClient;
- import com.ibatis.sqlmap.client.SqlMapClientBuilder;
- import com.tonyj.pojo.Contact;
-
- public class IbatisExample {
- public static void main(String[] args) throws Exception{
- Reader reader=Resources.getResourceAsReader("SqlMapConfig.xml");
- SqlMapClient sqlMap=SqlMapClientBuilder.buildSqlMapClient(reader);
-
-
-
-
- System.out.println("*------insert Contact Table------------*");
- Contact contact=new Contact("firstName","lastName","tang@yes.com");
- sqlMap.insert("insertContact",contact);
-
-
-
-
-
-
-
-
-
-
-
-
- }
- }
對應Contact.xml文件,註釋的指導,能夠將註釋除掉一個一個實現該功能。 在上面示例中調用存儲過程的sql以下,先在mysql數據庫中執行以下sql:
- --更改命令結束符(由於在procedure中常常要用到默認的命令結束符--分號(;)
- --因此在建立procedure的時候須要定義新的結束符以說明建立procedure的命令結束)
- --這裏將結束符號改爲美圓符號--$
- delimiter $
- create procedure vin.showData()
- begin
- select * from Contact;
- end
- $