欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

iBatis開發(fā)的一個(gè)應(yīng)用

系統(tǒng) 1868 0

今天開始學(xué)習(xí)iBatis框架,感覺這個(gè)框架很輕巧,方便,使用上手很快,沒有多大的難點(diǎn),下面就介紹一下第一個(gè)應(yīng)用開發(fā)的步驟:

第一步:在mysql的test數(shù)據(jù)庫中建立一張表: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;
  

然后插入兩條測(cè)試數(shù)據(jù):

    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文件:

首先來看一下應(yīng)用工程的結(jié)構(gòu)圖:

iBatis開發(fā)的一個(gè)應(yīng)用

配置: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實(shí)體類起一個(gè)別名 -->
  <typeAlias alias="Account" type="com.ibatis.demo.domain.Account"/>

  <!-- 將Account實(shí)體類中的屬性和mysql中的account表中的字段對(duì)應(yīng)起來 -->
  <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表中所有數(shù)據(jù),其中id是這條查詢語句的id號(hào),在代碼中用到,具有唯一性 -->
  <select id="selectAllAccounts" resultMap="AccountResult">
    select * from account
  </select>

  <!-- 通過id來查詢account表中的數(shù)據(jù) -->
  <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>

  <!-- 配置數(shù)據(jù)庫連接 -->
  <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>
  

對(duì)于上面的數(shù)據(jù)源配置的參數(shù)說明:

    transactionManager節(jié)點(diǎn)定義了iBatis的事務(wù)管理器,提供三種方式,(1、JDBC,2、jta:分布式數(shù)據(jù)庫,3、EXTERNAL:itbatis本身不做事務(wù)處理由外部進(jìn)行處理);
dataSource節(jié)點(diǎn):從屬于transactionManager節(jié)點(diǎn),用于設(shè)定ibatis運(yùn)行期使用的DataSource屬性;
  
    type屬性:type屬性指定了dataSource的實(shí)現(xiàn)模式,共三種模式,(1、simple:ibatis提供的較小的
    
      連接池
    
     2、dbcp:是apache實(shí)現(xiàn)的連接池 3、jndi:tomcate或weblogic提供的服務(wù));
    
JDBC.Driver:JDBC驅(qū)動(dòng);
JDBC.ConnectionURL:數(shù)據(jù)庫連接URL,如果用的是SQLServer JDBC Driver,需要在url后追加SelectMethod=Cursor以獲得JDBC事務(wù)的多Statement支持; JDBC.Username:數(shù)據(jù)庫用戶名;
JDBC.Password:數(shù)據(jù)庫用戶密碼;
Pool.MaximumActiveConnections:數(shù)據(jù)庫連接池可維持的最大容量;
Pool.MaximumIdleConnections:數(shù)據(jù)庫連接池中允許的掛起(idle)連接數(shù);
Pool.MaximumCheckoutTime數(shù)據(jù)庫連接池中,連接被某個(gè)任務(wù)所允許占用的最大時(shí)間,如果超過這個(gè)時(shí)間限定,連接將被強(qiáng)制收回,(毫秒);
Pool.TimeToWait:當(dāng)線程試圖從連接池中獲取連接時(shí),連接池中無可用連接可供使用,此時(shí)線程將進(jìn)入等待狀態(tài),直到池中出現(xiàn)空閑連接。此參數(shù)設(shè)定了線程所允許等待的最長時(shí)間,(毫秒);
Pool.PingQuery:數(shù)據(jù)庫連接狀態(tài)檢測(cè)語句。某些數(shù)據(jù)庫在某段時(shí)間持續(xù)處于空閑狀態(tài)時(shí)會(huì)將其斷開。而連接池管理器將通過此語句檢測(cè)池中連接是否可用,
檢測(cè)語句應(yīng)該是一個(gè)最簡化的無邏輯SQL。如“select 1 from user”,如果執(zhí)行此語句成功,連接池管理器將認(rèn)為此連接處于可用狀態(tài);
Pool.PingEnabled:是否允許檢測(cè)連接狀態(tài);
Pool.PingConnectionsOlderThan:對(duì)持續(xù)連接時(shí)間超過設(shè)定值(毫秒)的連接進(jìn)行檢測(cè);
Pool.PingConnectionsNotUsedFor:對(duì)空閑超過設(shè)定值(毫秒)的連接進(jìn)行檢測(cè);

第三步實(shí)現(xiàn)源代碼:

Account的實(shí)體類:

    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;
  }

}
  

這個(gè)類沒什么好說的了。


然后就是iBatis訪問數(shù)據(jù)的類:

    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);
  }

}
  

這個(gè)類就是訪問數(shù)據(jù)庫的數(shù)據(jù),可以查看一下sqlMapper的一些其他的方法的使用.


然后就是寫一個(gè)ServletDemo來訪問數(shù)據(jù)測(cè)試了:

    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);
}

}
  

這里只測(cè)試了訪問所有的記錄,將訪問的結(jié)果放到request域中,然后再index.jsp中使用jstl標(biāo)簽訪問:

     <!-- c:forEach標(biāo)簽的使用:迭代 -->
     <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>
  

最后千萬不要忘記導(dǎo)入相關(guān)的jar包:具體引用到的jar包可以查看上面的圖片。

iBatis開發(fā)的一個(gè)應(yīng)用


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 亚洲综合区 | 欧美激情图片区 | 午夜精品视频在线观看 | 精品免费久久久久国产一区 | 精品一区视频 | 日本欧美一区二区三区视频麻豆 | 亚洲aⅴ天堂av在线电影软件 | 污视频在线免费 | 国产无遮挡一级毛片 | 亚洲免费在线播放 | 久久日韩在线 | 欧美卡一卡二卡新区网站 | 欧美成人久久一级c片免费 91在线免费视频 | cheaperapp.work直接访问 | 一级做a爰性色毛片免费 | 国产理论自拍 | 蜜桃av一区二区三区 | 亚洲精品免费观看 | 国产成年网站v片在线观看 中文字幕在线免费视频 | 9191av| 欧美一区久久 | 99久久精品免费观看区一 | 日本老妇乱子伦中文视频 | 梦中人在线观看免费完整版 | 国产精品一区二区在线观看 | 欧美视频99| 欧洲精品视频完整版在线 | 自拍偷拍亚洲一区 | 偷拍自拍视频在线观看 | 国产在视频一区二区三区吞精 | 欧美成人全部视频 | 久久一二区 | 欧美日本日韩aⅴ在线视频 日韩福利视频导航 | 日韩视频在线精品视频免费观看 | 成人自拍在线 | 亚洲欧美综合精品久久成人 | 午夜影皖 | 久久久婷婷一区二区三区不卡 | 欧美日韩亚洲一区 | 国产在线网址 | 91精品久久 |