1. 程式人生 > >spring+ibatis【基本配置及動態sql】

spring+ibatis【基本配置及動態sql】

1、準備jar:commons-dbcp.jar、commons-logging.jar、commons-pool.jar、ibatis-common-2.jar、ibatis-sqlmap-2.jar、javax.servlet-5.1.12.jar、log4j-1.2.14.jar、spring-2.0.jar、spring-beans-2.0.6.jar、spring-context-2.0.6.jar、spring-core-2.0.6.jar、spring-web-2.0.6.jar、spring-webmvc.jar

JDBC jar:本文以oracle為例,ojdbc14.jar

2、工程目錄:

3、實體配置 Ibatis.xml 、Eq.xml

Ibatis.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 >
  <!-- 配置實體;user:相當於取了一個別名 -->
  <typeAlias type="com.tmall.bean.Ibatis" alias="user"/>
  <!-- 設定resultMap,column是資料表的列,property實際是實體bean中的屬性 -->
  <resultMap id="ibatisTest" class="user" >
    <result column="id" property="id" jdbcType="VARCHAR" />
    <result column="name" property="name" jdbcType="VARCHAR" />
  </resultMap>
  <!-- id:為這個sql取一個別名;resultMap:返回值型別 -->
  <!-- 獲得全查詢列表 -->
  <select id="getAllUsers" resultMap="ibatisTest">
    select * from Ibatis
  </select>
  
   <!-- 根據使用者名稱獲得使用者物件 -->
   <select id="getUsersByName" resultMap="ibatisTest">
     select * from Ibatis where name=#value#
  </select> 
  
  <!-- 根據id獲得使用者物件 -->
    <select id="getUsersById" resultMap="ibatisTest">
     select * from Ibatis where id=#value#
  </select> 
   <!-- 根據id和name獲得使用者物件 -->
    <select id="getUsersByIdAndName" resultMap="ibatisTest" parameterClass="java.util.Map" >
     select * from Ibatis where id=#id# and name=#name#
  </select> 
  
   <!-- 新增使用者物件 -->
   <insert id="insertUsers" parameterClass="user" >
      insert into ibatis (id,name) values (#id#,#name#)
   </insert>
   
   <!-- 刪除使用者物件 -->
   <delete id="deleteUsers">
     delete from ibatis where id=#value#
   </delete>
   
   <!-- 更新使用者物件 -->
   <delete id="updateUsers" parameterClass="user">
      update ibatis set name=#name# where id=#id#
   </delete>
</sqlMap>

Eq.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>
	<!-- 配置實體;eqinfo:相當於取了一個別名 -->
	<typeAlias type="com.tmall.bean.Eq" alias="eqinfo" />
	<!-- 設定resultMap -->
	<resultMap id="eqInfo" class="eqinfo">
		<result column="eq_id" property="eq_id" jdbcType="VARCHAR" />
		<result column="eq_name" property="eq_name" jdbcType="VARCHAR" />
	</resultMap>
	<!-- 根據id獲得使用者物件 -->
	<select id="getEqInfoById" resultMap="eqInfo">
		select eq_id,eq_name from eq where eq_id=#value#
	</select>
	<!-- 根據id或者名稱獲得使用者物件 -->
	<select id="getEqInfoByIdAadName" resultMap="eqInfo"  parameterClass="java.util.Map">
		select eq_id,eq_name from eq 
		<!-- 動態新增sql -->
		<dynamic prepend="where">
		    <!-- 不為空就新增條件 -->
		    <isNotEmpty prepend="and" property="id">
		    	 eq_id=#id#
		    </isNotEmpty>
		    <isNotEmpty prepend="or" property="name">
		    	eq_name like '%$name$%'
		    </isNotEmpty>
		</dynamic>
	</select>
</sqlMap>

4、sql對映檔案:sqlMapConfig.xml

<?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> 
<!-- 配置實體xml檔案路徑,支援多個實體 -->
<sqlMap resource="Ibatis.xml" /> 
<sqlMap resource="Eq.xml" />  
</sqlMapConfig>

5、spring配置檔案:applicationContext.xml檔案配置 

<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

<!-- 資料庫jdbc配置 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
  <property name="driverClassName">
    <value>oracle.jdbc.OracleDriver</value>
  </property>
  <property name="username">
    <value>test</value>
  </property>
  <property name="password">
    <value>test123</value>
  </property>
  <property name="url">
    <value>jdbc:oracle:thin:@127.0.0.1:1521:test</value>
  </property>
</bean>
 <!-- 此處應注入ibatis配置檔案,而非sqlMap檔案,否則會出現“there is no statement.....異常” -->
 <!-- org.springframework.orm.ibatis.SqlMapClientFactoryBean spring檔案 -->
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
  <property name="configLocation">
  	<!-- sqlMap配置檔案路徑 -->
     <value>sqlMapConfig.xml</value>
  </property>

</bean>
 <!-- 注入javabean -->
<bean id="DaoImp" class="com.tmall.dao.DaoImp">
   <property name="dataSource">
   <ref bean="dataSource"/>
 </property>
  <property name="sqlMapClient">
    <ref bean="sqlMapClient"/>
  </property> 
</bean>

</beans>

6、javaBean  Eq、Ibatis

package com.tmall.bean;

public class Ibatis {
	private String id;
	private String name;

	public String getId() {
		return id;
	}

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

	public String getName() {
		return name;
	}

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

	/**
	 * 需要一個空的建構函式
	 */
	public Ibatis() {

	}

	public Ibatis(String id, String name) {
		super();
		this.id = id;
		this.name = name;
	}
}
package com.tmall.bean;

public class Eq {
	private String eq_id;
	private String eq_name;

	public Eq() {
		super();
	}

	public Eq(String eq_id, String eq_name) {
		super();
		this.eq_id = eq_id;
		this.eq_name = eq_name;
	}

	public String getEq_id() {
		return eq_id;
	}

	public void setEq_id(String eq_id) {
		this.eq_id = eq_id;
	}

	public String getEq_name() {
		return eq_name;
	}

	public void setEq_name(String eq_name) {
		this.eq_name = eq_name;
	}

	@Override
	public String toString() {
		return "Eq [eq_id=" + eq_id + ", eq_name=" + eq_name + "]";
	}

}


7、Dao、DaoImp

package com.tmall.dao;

import java.util.List;

import com.tmall.bean.Eq;
import com.tmall.bean.Ibatis;

public interface Dao {
	public List<Ibatis> getList();

	public Ibatis getByName(String name);

	public Ibatis getById(String id);

	public void insert(Ibatis ibatis);

	public void delete(String id);

	public void update(Ibatis ibatis);

	public Ibatis getByNameAndId(String name, String id);

	public Eq getEqInfoById(String id);

	public List<Eq> getEqList(String name, String id);

}
package com.tmall.dao;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;

import com.tmall.bean.Eq;
import com.tmall.bean.Ibatis;

public class DaoImp extends SqlMapClientDaoSupport implements Dao {

	public void delete(String id) {
		getSqlMapClientTemplate().delete("deleteUsers", id);
	}

	public Ibatis getById(String id) {
		return (Ibatis) getSqlMapClientTemplate().queryForObject(
				"getUsersById", id);
	}

	public Ibatis getByName(String name) {

		return (Ibatis) getSqlMapClientTemplate().queryForObject(
				"getUsersByName", name);
	}

	@SuppressWarnings("unchecked")
	public List<Ibatis> getList() {
		return getSqlMapClientTemplate().queryForList("getAllUsers", null);
	}

	public void insert(Ibatis ibatis) {
		getSqlMapClientTemplate().insert("insertUsers", ibatis);
	}

	public void update(Ibatis ibatis) {
		getSqlMapClientTemplate().update("updateUsers", ibatis);
	}

	@Override
	public Ibatis getByNameAndId(String name, String id) {
		Map<String, String> map = new HashMap<String, String>();
		map.put("name", "1");
		map.put("id", "1");
		return (Ibatis) getSqlMapClientTemplate().queryForObject(
				"getUsersByIdAndName", map);
	}

	@Override
	public Eq getEqInfoById(String eq_id) {
		return (Eq) getSqlMapClientTemplate().queryForObject("getEqInfoById",
				eq_id);
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Eq> getEqList(String name, String id) {
		Map<String, String> map = new HashMap<String, String>();
		map.put("name", name);
		map.put("id", id);
		return getSqlMapClientTemplate().queryForList("getEqInfoByIdAadName",
				map);
	}

}


8、好了完成以上操作,下面測試呼叫了

package com.tamll.test;

import java.util.Iterator;
import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.tmall.bean.Eq;
import com.tmall.bean.Ibatis;
import com.tmall.dao.DaoImp;

public class Test {
	public static void main(String[] args) {
		 ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");  
		 DaoImp dao = (DaoImp)context.getBean("DaoImp");
		 Iterator<Ibatis> iterator =  dao.getList().iterator();
		 while(iterator.hasNext()){
			 Ibatis i = iterator.next();
			 System.out.println(i.getId()+i.getName());
		 }
		 Ibatis ibatis = dao.getByNameAndId("1", "1");
		 System.out.println(ibatis.getId()+ibatis.getName());
		 Eq eq = dao.getEqInfoById("test");
		 System.out.println(eq.getEq_name());
		 List<Eq> eqs = dao.getEqList("test","test");
		 Iterator<Eq> i = eqs.iterator();
		 while(i.hasNext()){
			 Eq e = i.next();
			 System.out.println(e.toString());
		 }
	}
}

以上簡單學習之後整的一個測試,包含基本配置以及動態sql的配置。

ibatis的優缺點:
ibatis 是一種“半 自動化”的ORM實現,可以自定義返回結果。ibatis是一種半自動化的ORM, 需要手工編寫sql ;hibernate不需要手工編寫sql,完全由hibernate實現反射。