<sqlMap namespace="Account">
<!-- 對類型定義的別名 -->
<typeAlias alias="Account" type="com.mydomain.domain.Account"/>
<!-- 數據庫中的字段名和Java Object中的屬性明的對應關系 -->
<resultMap id="AccountResult" class="Account">
<result property="id" column="ACC_ID"/>
<result property="firstName" column="ACC_FIRST_NAME"/>
<result property="lastName" column="ACC_LAST_NAME"/>
<result property="emailAddress" column="ACC_EMAIL"/>
</resultMap>
<!-- 查詢 SQL語句 -->
<select id="selectAllAccounts" resultMap="AccountResult">
select * from ACCOUNT
</select>
<!-- 基于ID的查詢Sql語句 -->
<select id="selectAccountById" parameterClass="int" resultClass="Account">
select
ACC_ID as id,
ACC_FIRST_NAME as firstName,
ACC_LAST_NAME as lastName,
ACC_EMAIL as emailAddress
from ACCOUNT
where ACC_ID = #id#
</select>
<!-- 插入SQL語句 -->
<insert id="insertAccount" parameterClass="Account">
insert into ACCOUNT (
ACC_ID,
ACC_FIRST_NAME,
ACC_LAST_NAME,
ACC_EMAIL
values (
#id#, #firstName#, #lastName#, #emailAddress#
)
</insert>
<!-- 更新SQL語句 -->
<update id="updateAccount" parameterClass="Account">
update ACCOUNT set
ACC_FIRST_NAME = #firstName#,
ACC_LAST_NAME = #lastName#,
ACC_EMAIL = #emailAddress#
where
ACC_ID = #id#
</update>
<!-- 刪除SQL語句 -->
<delete id="deleteAccountById" parameterClass="int">
delete from ACCOUNT where ACC_ID = #id#
</delete>
</sqlMap>
使用代碼:
首先裝在配置文件:
try {
Reader reader = Resources.getResourceAsReader("com/mydomain/data/SqlMapConfig.xml");
sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);
reader.close();
} catch (IOException e) {
// Fail fast.
throw new RuntimeException("Something bad happened while building the SqlMapClient instance." + e, e);
}
各種方法的使用:
查詢列表,返回List
sqlMapper.queryForList("selectAllAccounts");
查詢對象
(Account) sqlMapper.queryForObject("selectAccountById", id);
插入
sqlMapper.insert("insertAccount", account);
更新
sqlMapper.update("updateAccount", account);
刪除
sqlMapper.delete("deleteAccount", id);
在Struts2環境中結合Springframework使用ibatis
在Struts2環境中結合Springframework使用ibatis
想要使用ibatis必須首先定義數據源,這里使用DBCP數據源。
DBCP是apache jakarta下面的一個opensouce 名字叫做Database Connection Pool
使用DBCP需要將以下兩個文件拷貝到WEB-INF/lib目錄下:
commons-dbcp.jar
commons-pool.jar
在Spring配置文件中可以使用Ioc的方式配置數據庫連接池(DBCP)
通常將數據庫鏈接信息放在database.properties文件中,該文件通常放在WEB-INF目錄下
文件內容為:
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/teamware
jdbc.username=teamware
jdbc.password=teamware
為了在spring配置文件中讀取這些信息需要如下配置:
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>WEB-INF/database.properties</value>
</list>
</property>
</bean>
配置數據庫鏈接池:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
其中${}部分內容引用了database.properties文件中的內容。
配置ibatis
配置ibatis需要的sqlmap-config.xml和TodoVO.xml
sqlmap-config.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>
<sqlMap resource="com/jpleasure/teamware/vo/TodoVO.xml" />
</sqlMapConfig>
TodoVO.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 namespace="TodoVO">
<typeAlias alias="TodoVO" type="com.jpleasure.teamware.vo.TodoVO"/>
<resultMap id="TodoVOResult" class="TodoVO">
<result property="startDate" column="start_date"/>
<result property="startTime" column="start_time"/>
<result property="endDate" column="end_date"/>
<result property="endTime" column="end_time"/>
<result property="status" column="status"/>
<result property="priority" column="priority"/>
<result property="category" column="category"/>
<result property="title" column="title"/>
<result property="content" column="content"/>
</resultMap>
<select id="selectAllTodoVOs" resultMap="TodoVOResult">
select * from todo
</select>
</sqlMap>
package com.jpleasure.teamware.dao;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.jpleasure.teamware.vo.TodoVO;
public class TodoDao {
private SqlMapClient sqlMap = null;
public SqlMapClient getSqlMap() {
return sqlMap;
}
public void setSqlMap(SqlMapClient sqlMap) {
this.sqlMap = sqlMap;
}
public List<TodoVO> listAll() {
List todos = new ArrayList();
try {
todos = sqlMap.queryForList("selectAllTodoVOs");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return todos;
}
public TodoVO insert(TodoVO todo) {
return todo;
}
public TodoVO update(TodoVO todo) {
return todo;
}
public TodoVO delete(TodoVO todo) {
return todo;
}
}
配置DAO
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC
"-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="todo" class="com.jpleasure.teamware.action.TodoAction"
singleton="false">
<property name="todoLogic" ref="todoLogic"></property>
</bean>
<bean id="todoLogic"
class="com.jpleasure.teamware.logic.TodoLogic">
<property name="todoDao" ref="todoDao"></property>
</bean>
<bean id="todoDao" class="com.jpleasure.teamware.dao.TodoDao">
<property name="sqlMap" ref="sqlMapClient"></property>
</bean>
</beans>
使用DAO
package com.jpleasure.teamware.logic;
import java.util.List;
import com.jpleasure.teamware.dao.TodoDao;
import com.jpleasure.teamware.vo.TodoVO;
public class TodoLogic {
/****************************************
* TodoDao
****************************************/
private TodoDao todoDao;
public TodoDao getTodoDao() {
return todoDao;
}
public void setTodoDao(TodoDao todoDao) {
this.todoDao = todoDao;
}
/****************************************
* Logic Method
****************************************/
public List<TodoVO> listAll() {
List<TodoVO> todos = todoDao.listAll();
return todos;
}
public TodoVO insert(TodoVO todo) {
return todo;
}
public TodoVO update(TodoVO todo) {
return todo;
}
public TodoVO delete(TodoVO todo) {
return todo;
}
}
由于使用了Spring配置的DBCP,所以其中的數據庫鏈接部分不需要再配置。
只需要配置使用的映射文件即可。
spring中配置ibatis
<bean id="sqlMapClient"
class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="sqlmap-config.xml"/>
<property name="dataSource" ref="dataSource" />
</bean>
使用Ibatis做數據庫訪問
定義DAO