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实现反射。
具体可以查阅一下:http://blog.sina.com.cn/s/blog_6d44cb28010113cw.html