今天開始學習iBatis框架,感覺這個框架很輕巧,方便,使用上手很快,沒有多大的難點,下面就介紹一下第一個應用開發的步驟:
第一步:在mysql的test數據庫中建立一張表:account
create table account(
_id int,first_name varchar(10),
last_name varchar(10),
emall varchar(10),
primary key(_id)
)engine=InnoDB default charset=gb2312;
然后插入兩條測試數據:
insert account(_id,first_name,last_name,emall) values(1,'jiangwei','wei','123@qq.com');
insert account(_id,first_name,last_name,emall) values(2,'huang','yang','234@qq.com');
這樣第一步就完成了
第二步:開始配置iBatis文件:
首先來看一下應用工程的結構圖:
配置:Account.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="Account">//命名空間
<!-- 給Account實體類起一個別名 -->
<typeAlias alias="Account" type="com.ibatis.demo.domain.Account"/>
<!-- 將Account實體類中的屬性和mysql中的account表中的字段對應起來 -->
<resultMap id="AccountResult" class="Account">
<result property="id" column="_id"/>
<result property="firstName" column="first_name"/>
<result property="lastName" column="last_name"/>
<result property="emailAddress" column="emall"/>
</resultMap>
<!-- 查詢account表中所有數據,其中id是這條查詢語句的id號,在代碼中用到,具有唯一性 -->
<select id="selectAllAccounts" resultMap="AccountResult">
select * from account
</select>
<!-- 通過id來查詢account表中的數據 -->
<select id="selectAccountById" parameterClass="int" resultClass="Account">
select
id as _id,
first_name as firstName,
last_name as lastName,
emall as emailAddress
from account
where _id = #id#
</select>
<!--插入語句-->
<insert id="insertAccount" parameterClass="Account">
insert into accout (
_id,
first_name,
last_name,
emall
values (
#id#, #firstName#, #lastName#, #emailAddress#
)
</insert>
<!-- 更新語句 -->
<update id="updateAccount" parameterClass="Account">
update account set
first_name = #firstName#,
last_name = #lastName#,
emall = #emailAddress#
where
_id = #id#
</update>
<!-- 刪除語句 -->
<delete id="deleteAccountById" parameterClass="int">
delete from account where _id = #id#
</delete>
</sqlMap>
上面的配置完成后,接下來開始配置全局的文件: SqlMapConfig.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>
<!-- 配置數據庫連接 -->
<transactionManager type="JDBC" commitRequired="false">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="com.mysql.jdbc.Driver"/>
<property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8"/>
<property name="JDBC.Username" value="root"/>
<property name="JDBC.Password" value="jiangwei"/>
<property name="Pool.MaximumActiveConnections" value="10" />
<property name="Pool.MaximumIdleConnections" value="5" />
<property name="Pool.MaximumCheckoutTime" value="120000" />
<property name="Pool.TimeToWait" value="500" />
<property name="Pool.PingQuery" value="select 1 from account" />
<property name="Pool.PingEnabled" value="false" />
<property name="Pool.PingConnectionsOlderThan" value="1" />
<property name="Pool.PingConnectionsNotUsedFor" value="1" />
</dataSource>
</transactionManager>
<!-- 配置SQL查詢的配置文件的Account.xml -->
<sqlMap resource="/Account.xml"/>
</sqlMapConfig>
對于上面的數據源配置的參數說明:
transactionManager節點定義了iBatis的事務管理器,提供三種方式,(1、JDBC,2、jta:分布式數據庫,3、EXTERNAL:itbatis本身不做事務處理由外部進行處理);
dataSource節點:從屬于transactionManager節點,用于設定ibatis運行期使用的DataSource屬性;
type屬性:type屬性指定了dataSource的實現模式,共三種模式,(1、simple:ibatis提供的較小的
連接池
2、dbcp:是apache實現的連接池 3、jndi:tomcate或weblogic提供的服務);
JDBC.Driver:JDBC驅動;
JDBC.ConnectionURL:數據庫連接URL,如果用的是SQLServer JDBC Driver,需要在url后追加SelectMethod=Cursor以獲得JDBC事務的多Statement支持;
JDBC.Username:數據庫用戶名;
JDBC.Password:數據庫用戶密碼;
Pool.MaximumActiveConnections:數據庫連接池可維持的最大容量;
Pool.MaximumIdleConnections:數據庫連接池中允許的掛起(idle)連接數;
Pool.MaximumCheckoutTime數據庫連接池中,連接被某個任務所允許占用的最大時間,如果超過這個時間限定,連接將被強制收回,(毫秒);
Pool.TimeToWait:當線程試圖從連接池中獲取連接時,連接池中無可用連接可供使用,此時線程將進入等待狀態,直到池中出現空閑連接。此參數設定了線程所允許等待的最長時間,(毫秒);
Pool.PingQuery:數據庫連接狀態檢測語句。某些數據庫在某段時間持續處于空閑狀態時會將其斷開。而連接池管理器將通過此語句檢測池中連接是否可用,
檢測語句應該是一個最簡化的無邏輯SQL。如“select 1 from user”,如果執行此語句成功,連接池管理器將認為此連接處于可用狀態;
Pool.PingEnabled:是否允許檢測連接狀態;
Pool.PingConnectionsOlderThan:對持續連接時間超過設定值(毫秒)的連接進行檢測;
Pool.PingConnectionsNotUsedFor:對空閑超過設定值(毫秒)的連接進行檢測;
第三步實現源代碼:
Account的實體類:
package com.ibatis.demo.domain;
public class Account {
private int id;
private String firstName;
private String lastName;
private String emailAddress;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmailAddress() {
return emailAddress;
}
public void setEmailAddress(String emailAddress) {
this.emailAddress = emailAddress;
}
}
這個類沒什么好說的了。
然后就是iBatis訪問數據的類:
package com.ibatis.demo.data;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
import com.ibatis.common.resources.Resources;
import com.ibatis.demo.domain.Account;
import java.io.Reader;
import java.io.IOException;
import java.util.List;
import java.sql.SQLException;
public class IbaitsData {
private static SqlMapClient sqlMapper;
static {
try {
//讀取iBatis的配置文件:SqlMapConfig.xml
Reader reader = Resources.getResourceAsReader("/SqlMapConfig.xml");
sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);
reader.close();
} catch (IOException e) {
throw new RuntimeException("Something bad happened while building the SqlMapClient instance." + e, e);
}
}
//查詢account表中的所有記錄
@SuppressWarnings("unchecked")
public static List selectAllAccounts () throws SQLException {
return sqlMapper.queryForList("selectAllAccounts");
}
//查詢account表中_id為id的記錄
public static Account selectAccountById (int id) throws SQLException {
return (Account) sqlMapper.queryForObject("selectAccountById", id);
}
//插入一條記錄
public static void insertAccount (Account account) throws SQLException {
sqlMapper.insert("insertAccount", account);
}
//更新一條記錄
public static void updateAccount (Account account) throws SQLException {
sqlMapper.update("updateAccount", account);
}
//刪除一條記錄
public static void deleteAccount (int id) throws SQLException {
sqlMapper.delete("deleteAccount", id);
}
}
這個類就是訪問數據庫的數據,可以查看一下sqlMapper的一些其他的方法的使用.
然后就是寫一個ServletDemo來訪問數據測試了:
package com.ibaits.demo.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.ibatis.demo.data.IbaitsData;
public class ServletDemo extends HttpServlet{
private static final long serialVersionUID = -1461257848765985759L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {
try{
req.setAttribute("listAccout", IbaitsData.selectAllAccounts());
req.getRequestDispatcher("/index.jsp").forward(req, resp);
}catch(Exception e){
e.printStackTrace();
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {
doGet(req,resp);
}
}
這里只測試了訪問所有的記錄,將訪問的結果放到request域中,然后再index.jsp中使用jstl標簽訪問:
<!-- c:forEach標簽的使用:迭代 -->
<c:forEach var="userBean" items="${listAccout}">
用戶id:<c:out value="${userBean.id}"></c:out>
姓:<c:out value="${userBean.firstName}"></c:out>
名:<c:out value="${userBean.lastName}"></c:out>
郵箱地址:<c:out value="${userBean.emailAddress}"></c:out>
<br><br>
</c:forEach>
最后千萬不要忘記導入相關的jar包:具體引用到的jar包可以查看上面的圖片。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

