IBatis查刪改查與調用存儲過程 mysql數據庫

 

 

簡單介紹一下IBatis
是什麼iBATIS一詞來源於“internet”“abatis”的組合,是一個由Clinton Begin2001年發起的開放源代碼項目。最初側重於密碼軟件的開發,現在是一個基於Java的持久層框架。


iBATIS提供的持久層框架包括SQL MapsData Access ObjectsDAO),同時還提供一個利用這個框架開發的JPetStore實例。

相對HibernateApache OJB一站式”ORM解決方案而言,ibatis 是一種半自動化ORM實現。 

所謂半自動,可能理解上有點生澀。縱觀目前主流的 ORM,無論 Hibernate 還是Apache OJB,都對數據庫結構提供了較爲完整的封裝,提供了從POJO 到數據庫表的全套映射機制。程序員往往只需定義好了POJO 到數據庫表的映射關係,即可通過 Hibernate或者OJB 提供的方法完成持久層操作。程序員甚至不需要對 SQL 的熟練掌握,Hibernate/OJB 會根據制定的存儲邏輯,自動生成對應的 SQL 並調用 JDBC 接口加以執行。 


爲什麼看到這裏我想很多人想要問,爲什麼要弄一個半自動化的持久層框架,這裏的話就要從hibernate的缺陷說起,雖然hibernate使得對數據的操作變得簡單,但是如果數據庫的數據處理量特別大,性能也要求很高,需要對sql語句進行優化才能夠達到預期的要求,這個時候hibernate確實就是一個累贅了。所以在hibernatejdbc之間多了一個選擇,那就是IBatis,他使得開發人員不用在寫繁瑣的數據庫訪問代碼,和字段讀取操作。並且自己寫sql語句。

 

 

怎麼做:具體代碼在附件中

1.建表

 

CREATE TABLE `users` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `age` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

CREATE  PROCEDURE `sp_modify_user`(in_id Integer, in_age Integer)
begin
update users set age=in_age where id=in_id;
end;
 

 

 

2.建一個實體類

 

package com.ibatis.entity;

/**
 * 
 * @author Administrator
 *	User實體類
 */
public class Users {
	private int id;
	private String name;
	private int age;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

}

 

 4.一個映射

 

<?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="Users">
	<typeAlias alias="AllUsersParm" type="com.ibatis.entity.Users"/> 
	
	<select id="getUsers" resultClass="AllUsersParm">
		SELECT id,name,age FROM USERS
	</select>
	
	
	<insert id="addUser">
		insert into USERS(id,name,age) values(#id#,#name#,#age#)
	</insert>
	
	<select id="getUser" parameterClass="int" resultClass="com.ibatis.entity.Users">
		SELECT id,name,age FROM USERS WHERE id = #id#
	</select>
	
	<delete id="deleteUser" parameterClass="int">
		delete from users where id=#id#
	</delete>
	
	<update id="modifyUser" parameterClass="AllUsersParm">
		update users
		<dynamic prepend="set">
		    <isNotNull prepend="," property="name">
				name=#name#
			</isNotNull>
			<isGreaterThan prepend="," property="age" compareValue="0">
				age=#age#
			</isGreaterThan>
		</dynamic>
		    where id=#id#
	</update>
	
	<procedure id="updateUserAgeById" parameterClass="java.util.Map">
	 	<!-- {call sp_modify_user($id$,$age$)} -->
	 	call sp_modify_user($id$,$age$)
	</procedure>
	
	<!-- 分頁 -->
	<select id="pageUsers" parameterClass="java.util.Map" resultClass="AllUsersParm">
		select * from users  
		<dynamic prepend="WHERE">
			<isGreaterThan prepend="AND" property="age" compareValue="0"> 
				age > $age$
			</isGreaterThan>
		</dynamic> 
		 	order by id limit $beginCount$,$pageSize$
	</select>
	
	<!-- 
		二元條件元素
		屬性解釋:
		prepend:可被覆蓋的sql語句組成部分,添加在語句的前面(可選)
		property:被比較的屬性(必須)
		compareProperty:另一個用於和前者比較的屬性(必須或選擇comPareValue)
		compareValue:用於比較的值(必須或選擇compareProperty)
		
		isEqual
		isLessEqual
		isLessThan
		isGreaterThan
		isGreaterEqual:比較屬性值是否大於等於靜態值或另一個屬性值
		
		isPropertyAvailable:檢查是否存在該屬性(存在parameter bean 的屬性)
		isNotPropertyAvailable:檢查是否存在該屬性(不存在parameter bean 的屬性)
		isNull:檢查屬性是否爲null
		isNotNull:檢查屬性是否不爲null
		isEmpty:檢查Collection.size()的值,屬性的String或String.valueOf()值,是否爲null或空(""或size()<1)
		isNotEmpty:檢查Collection.size()的值,屬性的String或String.valueOf()值,是否不爲null或不爲空(不爲""或size()>0)
					if:<isNotEmpty prepend="and" property="name"> name=#name# </isNotEmpty>
		isParameterPresent:檢查是否存在參數對象(不爲null)
		isNotParameterPresent:檢查是否不存在參數對象
		 -->
 
</sqlMap>

 5.IBatis配置文件

 

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

<sqlMapConfig>
	<properties resource="com/ibatis/db.properties" />
	<settings cacheModelsEnabled="true" 
			enhancementEnabled="true"
			lazyLoadingEnabled="true" 
			maxRequests="32" 
			maxSessions="10"
			maxTransactions="5" 
			useStatementNamespaces="false" />

	<transactionManager type="JDBC">
		<dataSource type="SIMPLE">
			<property name="JDBC.Driver" value="${driver}" />
			<property name="JDBC.ConnectionURL" value="${url}" />
			<property name="JDBC.Username" value="${user}" />
			<property name="JDBC.Password" value="${password}" />
		</dataSource>
	</transactionManager>
	
	<sqlMap resource="com/ibatis/Users.xml" />
</sqlMapConfig>

<!-- 
	(文件元素說明:
	resource:屬性列表配置文件,以便用於數據庫連接參數設置。
	settings:
	cacheModelsEnabled:數據高速緩存,提高程序性能,利用LRU(最近最久未使用)方法對使用過的數據保存在內存中。默認true
	enhancementEnabled:指定是否用cglib中那些已優化的類來提高延遲加載的性能。默認ture
	lazyLoadingEnabled:延遲加載,除非絕對需要,否則推遲加載的技術。默認true
	maxRequests(已廢棄):一次最多有多少個請求,默認爲512
	maxSessions(已廢棄):任何時候只允許會話數,默認128
	maxTransactions(已廢棄):事務最大數目,默認32
	useStatementNamespaces:在引用已映射語句時,是否需要使用限定名。默認false
	transactionManager:處理所有的數據庫事務。
	dataSoutce:數據源工廠
	property:配置項
	sqlMap:配置SQLMAP文件
	typeAlias:定義別名)
-->
 6.後面的太長了還是下附件吧。。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章