首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Struts 2.1.6 實戰教程 (3):新聞管理 Model 層開發整合 iBatis 2.3.4

     編輯:Java 相關知識

前言

iBatis (現 MyBatis 前身) 是輕量級持久層框架,強調 SQL 手寫控制,適合複雜查詢場景。本篇建立新聞資料表、POJO、SQL Map 映射、SqlMapConfig、ArticleManager 業務邏輯與 JUnit 測試。

資料庫設計 (MySQL)

CREATE DATABASE simpledb;
CREATE TABLE article (
    ID INT AUTO_INCREMENT PRIMARY KEY,
    TITLE VARCHAR(25),
    AUTHOR VARCHAR(25),
    CONTENT TEXT,
    PUBTIME DATE
);

POJO (Article.java)

public class Article {
    private int id;
    private String title, author, content;
    private Date pubtime;
    // getter/setter 省略
}

SQL Map 映射 (Article.xml)

<sqlMap namespace="Article">
  <typeAlias alias="Article" type="cn.simple.pojo.Article"/>
  <resultMap id="ArticleResult" class="Article">
    <result property="id" column="ID"/>
    <result property="title" column="TITLE"/>
    <result property="author" column="AUTHOR"/>
    <result property="content" column="CONTENT"/>
    <result property="pubtime" column="PUBTIME"/>
  </resultMap>

  <select id="selectAllArticles" resultMap="ArticleResult">SELECT * FROM article</select>
  <select id="selectArticleById" parameterClass="int" resultClass="Article">
    SELECT ID as id, TITLE as title, AUTHOR as author, CONTENT as content, PUBTIME as pubtime
    FROM article WHERE ID=#id#
  </select>
  <insert id="insertArticle" parameterClass="Article">
    INSERT INTO article (TITLE, AUTHOR, CONTENT, PUBTIME) VALUES (#title#, #author#, #content#, #pubtime#)
  </insert>
  <update id="updateArticle" parameterClass="Article">
    UPDATE article SET TITLE=#title#, AUTHOR=#author#, CONTENT=#content#, PUBTIME=#pubtime# WHERE ID=#id#
  </update>
  <delete id="deleteArticleById" parameterClass="int">DELETE FROM article WHERE ID=#id#</delete>
</sqlMap>

SqlMapConfig.xml

<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/simpledb"/>
      <property name="JDBC.Username" value="root"/>
      <property name="JDBC.Password" value="root"/>
    </dataSource>
  </transactionManager>
  <sqlMap resource="cn/simple/pojo/Article.xml"/>
</sqlMapConfig>

ArticleManager 業務邏輯

public class ArticleManager {
    private static SqlMapClient sqlMapper;
    static {
        try {
            Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
            sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);
            reader.close();
        } catch (IOException e) { throw new RuntimeException("SqlMapClient建立失敗", e); }
    }
    public static List<Article> selectAllArticles() throws SQLException {
        return sqlMapper.queryForList("selectAllArticles");
    }
    public static void insertArticle(Article article) throws SQLException {
        sqlMapper.insert("insertArticle", article);
    }
    public static void updateArticle(Article article) throws SQLException {
        sqlMapper.update("updateArticle", article);
    }
    public static void deleteArticle(int id) throws SQLException {
        sqlMapper.delete("deleteArticleById", id);
    }
    public static Article queryArticleById(int id) throws SQLException {
        return (Article) sqlMapper.queryForObject("selectArticleById", id);
    }
}

JUnit 測試類

public class ArticleManagerTest {
    @Test public void testSelectAllArticles() throws SQLException {
        for (Article a : ArticleManager.selectAllArticles())
            System.out.println(a.getTitle() + a.getAuthor() + a.getContent() + a.getPubtime());
    }
    @Test public void testInsertArticle() throws SQLException {
        for (int i=0; i<10; i++) {
            Article a = new Article();
            a.setTitle("title-" + i); a.setAuthor("author-" + i);
            a.setContent("content-" + i); a.setPubtime(new Date());
            ArticleManager.insertArticle(a);
        }
    }
    @Test public void testUpdateArticle() throws SQLException {
        Article a = new Article(); a.setId(3); a.setTitle("title-title"); a.setAuthor("author-author");
        ArticleManager.updateArticle(a);
    }
    @Test public void testDeleteArticle() throws SQLException { ArticleManager.deleteArticle(5); }
}

專案結構圖


src/
  cn/simple/pojo/Article.java
  cn/simple/pojo/Article.xml
  cn/simple/manager/ArticleManager.java
  cn/simple/manager/ArticleManagerTest.java
  SqlMapConfig.xml
WEB-INF/lib/ibatis-2.3.4.726.jar, mysql-connector-java.jar

iBatis 學習建議

  1. 官網下載包含 simple_example 範例專案,最快上手路徑
  2. 對比 Hibernate:iBatis SQL 可見可控、動態 SQL 標籤強大、映射檔較繁瑣但彈性高
  3. 遷移至 MyBatis 3 只需調整命名空間、介面式映射、註解支援
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved