Ibatis的增刪改查操作

ibatis的移植性雖然沒有hibernate那麼強,但是很多方面hibernate是做不到的,ibatis的特點在於動態sql查詢以及靈活性上面。升級版的mybatis同樣在動態sql查詢上下了不少功夫,如果對hibernate之類的東西厭倦了學習ibatis應該是個不錯的選擇。

1.ibatis程序需要的東西

數據庫驅動必不可少,選擇什麼數據庫無所謂,最重要的就是ibatis的jar包了

2.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>
	<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="com.mysql.jdbc.Driver" />
			<property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost:3306/humansource" />
			<property name="JDBC.Username" value="root" />
			<property name="JDBC.Password" value="123456" />
		</dataSource>
	</transactionManager>
	<!-- 映射文件的相關配置 -->
	<sqlMap resource="org/lxh/mapping/Role_sqlmap.xml" />
	
</sqlMapConfig>

這個配置文件數據源的配置居多,最下面的sqlmap配置的是映射文件,數據源配置出錯或者映射文件不對,程序就運行不起來


3.映射文件

我的建議是屬性名稱和數據庫的列名相對應,另外ibatis的映射文件大部分都是sql語句,如果害怕寫sql,那建議就不要學ibatis了

<?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="Role">
    <resultMap id="resultMap" class="org.lxh.info.Role">
	  <result property="id" column="id"/>
	  <result property="name" column="name"/>
	  <result property="remark" column="remark"/>
    </resultMap>
    <!-- 添加角色 -->
	<insert id="createRole" parameterClass="org.lxh.info.Role"> 
	insert into m_role(name, remark)values(#name#,#remark#)  
	</insert>
	<!-- 刪除角色 -->
	<delete id="deleteRole" parameterClass="int">
	  delete from m_role where id=#id#
	</delete>
	<!-- 修改角色信息 -->
	<delete id="updateRole" parameterClass="org.lxh.info.Role">
	 update m_role set remark=#remark# where id=#id#
	</delete>
	<!-- 查詢所有的角色信息 -->
	<select id="findAll" resultMap="resultMap">
	 select * from m_role
	</select>
</sqlMap>

這個文件最前面的resultMap是返會的結果集的配置,這個地方主要在查詢上面使用,ibatis會把結果集進行封裝

4.領域模型文件

package org.lxh.info;

public class Role {
	private Integer id;
	private String name;
	private String remark;

	public String getName() {
		return name;
	}

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

	public String getRemark() {
		return remark;
	}

	public void setRemark(String remark) {
		this.remark = remark;
	}

	public Integer getId() {
		return id;
	}

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

ibatis的映射文件應該是比較好理解的,沒有像hibernate那樣另類有什麼一對一對多配置一大把的,ibatis對增刪改查都要很好額區別 如果是查詢那標籤就應該是select其他的以此類推


4.增刪改查操作

package org.lxh.junit;

import static org.junit.Assert.*;

import java.io.Reader;
import java.util.*;

import org.junit.Test;
import org.lxh.info.Role;

import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;

public class TestIbatis {
    //添加角色
	@Test
	public void testInsert() {
		try {

			Reader reader = com.ibatis.common.resources.Resources.getResourceAsReader("DataSource.xml");
			SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
			Role r = new Role();
			r.setName("系統維護人員");
			r.setRemark("--");
			sqlMap.insert("createRole", r);
			
		} catch (Exception e) {
			e.printStackTrace();
		}

	}
	
    //刪除角色
	@Test
	public void testDelete() {
		try {
			Reader reader = com.ibatis.common.resources.Resources.getResourceAsReader("DataSource.xml");
			SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
			sqlMap.delete("deleteRole", 3);
		} catch (Exception e) {
			e.printStackTrace();
		}

	}
	//修改角色
		@Test
		public void testUpdate() {
			try {
				Reader reader = com.ibatis.common.resources.Resources.getResourceAsReader("DataSource.xml");
				SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
				Role r=new Role();
				r.setId(2);
				r.setRemark("***");
				sqlMap.update("updateRole", r);
			} catch (Exception e) {
				e.printStackTrace();
			}

		}
		//查詢角色信息
		@Test
		public void testSelect() {
			try {
				Reader reader = com.ibatis.common.resources.Resources.getResourceAsReader("DataSource.xml");
				SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
				List<Role>all=sqlMap.queryForList("findAll");
				Iterator<Role> it=all.iterator();
				while(it.hasNext()){
					Role info=it.next();
					System.out.println(info.getName()+","+info.getId());
				}
			} catch (Exception e) {
				e.printStackTrace();
			}

		}
}

有人會問ibatis可以寫連接查詢碼,那是肯定的,可以參考下這個文章:

http://blog.csdn.net/walkcode/article/details/6929898

當然瞭如果要使用ibatis執行存儲過程可以參考下面這篇文章

http://blog.csdn.net/walkcode/article/details/9318039

要了解ibatis動態sql可以看下面這個

http://blog.csdn.net/walkcode/article/details/8925435

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