`
rongxh7
  • 浏览: 11964 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

Struts 2.1.6 精简实例系列教程(3):新闻管理Model层的开发(整合iBatis)

阅读更多

本期开始讲Model层的开发,整合iBatis框架,iBatis是Apache旗下Java数据持久层的框架,跟Hibernate是同一类型的框架。大家可到它的官方网站去下载http://ibatis.apache.org/java.cgi,如下图:

image

我这里下载的是当前最新版本iBatis 2.3.4 , 下载之后,解压包是这样的:

image

我们在lib目录下,找到“ibatis-2.3.4.726.jar”文件,加入到我们项目的lib目录下,就行。在这里,我们先说下怎么学习这个iBatis框架:上图中,有个simple_example的文件夹,它里面就包含了一个超级简单且容易理解的例子,大家可以去学习一下。By the way,如果你学过Hibernate的话,你会发觉iBatis要比Hibernate好学很多。关于Hibernate和iBatis的争论,网上有很多,大家有兴趣可以去了解一下。

好,我们先建立数据库和设计数据库吧。我这项目用的是MySQL 5.0。生成数据库和数据表的SQL语句如下:

create database simpledb;

create table article
(
    ID int auto_increment not null primary key,
    TITLE varchar(25),
    AUTHOR varchar(25),
    CONTENT text,
    PUBTIME date
);

 

这是我们常见的新闻表及其中的字段。

接下来,写一个与表对应的新闻类,Article.java,这个其实是POJO类,代码如下:

package cn.simple.pojo;

import java.util.Date;

public class Article {
    
    
private int id;
    
private String title;
    
private String author;
    
private String content;
    
private Date pubtime;
    
    
/** *//***********getter和setter方法***********/
    
public int getId() {
        
return id;
    }

    
public void setId(int id) {
        
this.id = id;
    }

    
public String getTitle() {
        
return title;
    }

    
public void setTitle(String title) {
        
this.title = title;
    }

    
public String getAuthor() {
        
return author;
    }

    
public void setAuthor(String author) {
        
this.author = author;
    }

    
public String getContent() {
        
return content;
    }

    
public void setContent(String content) {
        
this.content = content;
    }

    
public Date getPubtime() {
        
return pubtime;
    }

    
public void setPubtime(Date pubtime) {
        
this.pubtime = pubtime;
    }

    
}

 

有了数据表和实体类,现在来写两者之间映射的配置文件Article.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="Article">

    
<!-- Use type aliases to avoid typing the full classname every time. -->
    
<typeAlias alias="Article" type="cn.simple.pojo.Article" />

    
<!--
        Result maps describe the mapping between the columns returned from a
        query, and the class properties. A result map isn't necessary if the
        columns (or aliases) match to the properties exactly.
    
-->
    
<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 with no parameters using the result map for Account class.
    
-->
    
<select id="selectAllArticles" resultMap="ArticleResult">
        select * from article
      
</select>

    
<!--
        A simpler select example without the result map. Note the aliases to
        match the properties of the target result class.
    
-->
    
<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 example, using the Account parameter class -->
    
<insert id="insertArticle" parameterClass="Article">
        insert into article (
            TITLE,
            AUTHOR,
            CONTENT,
            PUBTIME
        ) values (
            #title#,
            #author#,
            #content#,
            #pubtime#
        )
  
</insert>

    
<!-- Update example, using the Account parameter class -->
    
<update id="updateArticle" parameterClass="Article">
        update article set
        TITLE = #title#,
        AUTHOR = #author#,
        CONTENT = #content#,
        PUBTIME = #pubtime#
        where
        ID = #id#
  
</update>

    
<!-- Delete example, using an integer as the parameter class -->
    
<delete id="deleteArticleById" parameterClass="int">
        delete from article where ID = #id#
  
</delete>

</sqlMap>

 

大家不要觉得这个映射文件很复杂,其实,这挺容易理解的,如果大家赖得写的话,可复制iBatis自带的simple_example下的例子的映射文件,然后修改一下就行。

有了表、实体类、表与实体之间的映射文件,之后,该做什么呢?学过Hibernate的朋友会想到那个数据库连接信息的配置文件,当然,iBatis也需要类似的文件,即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>

  
<!-- Configure a built-in transaction manager.  If you're using an 
       app server, you probably want to use its transaction manager 
       and a managed datasource 
-->
  
<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>

  
<!-- List the SQL Map XML files. They can be loaded from the 
       classpath, as they are here (com.domain.data
-->
  
<sqlMap resource="cn/simple/pojo/Article.xml"/>
  
<!-- List more here
  <sqlMap resource="com/mydomain/data/Order.xml"/>
  <sqlMap resource="com/mydomain/data/Documents.xml"/>
  
-->

</sqlMapConfig>

 

一看这代码,也有点复杂,我的说法同上,大不了COPY,再略作修改,呵呵

好了,来写我们的业务逻辑层:

package cn.simple.manager;

import java.io.IOException;
import java.io.Reader;
import java.sql.SQLException;
import java.util.List;
import cn.simple.pojo.Article;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;

public class ArticleManager {

    
/** *//**
     * SqlMapClient instances are thread safe, so you only need one. In this
     * case, we'll use a static singleton. So sue me. ;-)
     
*/

    
private static SqlMapClient sqlMapper;

    
/** *//**
     * It's not a good idea to put code that can fail in a class initializer,
     * but for sake of argument, here's how you configure an SQL Map.
     
*/

    
static {
        
try {
            Reader reader 
= Resources.getResourceAsReader("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);
        }

    }


    
/** *//**
     * 查询列表
     * 
@return
     * 
@throws SQLException
     
*/

    
public static List<Article> selectAllArticles() throws SQLException {
        
return sqlMapper.queryForList("selectAllArticles");
    }

    
    
/** *//**
     * 插入数据
     * 
@param article
     * 
@throws SQLException
     
*/

    
public static void insertArticle(Article article) throws SQLException {
        sqlMapper.insert(
"insertArticle", article);
    }

    
    
/** *//**
     * 更新数据
     * 
@param article
     * 
@throws SQLException
     
*/

    
public static void updateArticle(Article article) throws SQLException {
        sqlMapper.update(
"updateArticle", article);
    }


 

本文转自我的JavaEE技术博客http://www.blogjava.net/rongxh7/,转载请注明出处!谢谢!

分享到:
评论
6 楼 everher 2010-05-17  
我现在就在用ibatis,但是用ibatis作为持久层有一个比较大的缺点,即:代码生成工具很难使用,而且效果不好。
5 楼 ckn126 2010-05-13  
我问一下 如果 B对象包含在A中 如果我想用查询A时候,把B对象一起封装进去 ,这个在hibernate之中是使用component 那么 ibatis中如何处理对象的包含关系。。。
4 楼 快乐让让 2009-12-21  
没用呀,随便下个IBATIS的快速应用就有你所说的一切了,而且还比你说的详细。。。
3 楼 wenxiang_tune 2009-08-26  
小例子不能说明大问题。。。LZ的配置方法Hibernate已经实现的很好了,而且Hibernate有很多种可选方案
2 楼 SeanHe 2009-08-22  
如果你使用SPRING的话,spring帮你把IBATIS做封装,使用起来也很方便。印象中spring的例子里有对iBATIS整合的例子
1 楼 rtsbtx 2009-08-21  
我是一个新手,想问一下,这里如果要设计DAO层的话应该怎么改呢~~?

相关推荐

    STRUTS2.1.6+SPRING版本:2.5.6+Hibernate3.4.0整合实例

    STRUTS:2.1.6 Hibernate:3.4.0 SPRING版本:2.5.6整合 应用了泛型来做抽象类,简化了开发,适合初学者下载下来学习,然后自己尝试着搭一遍框架,会对三大框架的配置以及功能会有更深入的认识。

    struts2.1.6-lib

    3. **插件和支持库**: Struts2还提供了一系列插件,如 strut2-convention-plugin、struts2-json-plugin 等,它们扩展了框架的功能,例如自动配置、JSON响应等。这些插件的jar包也可能存在于lib目录下,以支持特定的...

    struts2.1.6jar all.zip

    Struts2是一个非常著名的Java Web开发框架,由Apache软件基金会维护。它基于MVC(Model-View-Controller)设计模式,极大地简化了Java Web应用程序的开发过程,提供了强大的功能和可扩展性。这次我们讨论的是Struts2...

    struts2.1.6jar包

    Struts2.1.6是Apache Struts框架的一个版本,它是基于MVC(Model-View-Controller)设计模式的Java Web应用程序开发框架。这个版本的jar包包含了运行Struts2应用所需的所有核心类库和依赖组件。以下是关于Struts...

    struts2.1.6-apps.zip

    Struts2.1.6是Apache Struts框架的一个特定版本,该框架是Java Web开发中的一个强大工具。Struts2以其MVC(Model-View-Controller)架构模式为核心,为开发者提供了一种组织应用程序结构、处理HTTP请求以及管理业务...

    Struts2.1.6 HelloWorld 实例

    Struts2.1.6是Apache Struts框架的一个版本,它是一个基于MVC(Model-View-Controller)设计模式的Java Web应用框架。这个"HelloWorld"实例是学习和理解Struts2基本工作原理和配置的绝佳起点。下面将详细阐述Struts...

    struts-2.1.6-sources

    Struts 2.1.6 是一个非常重要的版本,在Java Web开发中占据着核心地位,尤其是在基于MVC(Model-View-Controller)架构的应用程序设计中。Struts 2 是Apache软件基金会的一个开源项目,它是Struts 1的升级版,提供了...

    struts2.1.6 所有jar包和源码

    Struts2.1.6是Apache Struts框架的一个版本,这是一个流行且强大的Java Web应用程序开发框架,用于构建基于MVC(Model-View-Controller)模式的Web应用。它提供了简化HTTP请求处理、动作调度、视图渲染以及业务逻辑...

    Struts2.1.6 Spring2.5.6 Hibernate3.3.2

    标题 "Struts2.1.6 Spring2.5.6 Hibernate3.3.2" 描述的是一个基于Java的企业级应用程序开发的集成框架,其中包含了三个核心组件:Struts2、Spring和Hibernate。这些组件都是Java Web开发中的关键库,分别负责MVC...

    struts2.1.6

    Struts2.1.6是Apache Struts框架的一个版本,这是一个流行且强大的Java Web应用程序开发框架,用于构建和维护可扩展、易于维护的MVC(Model-View-Controller)架构的应用程序。Struts2的核心设计理念是提供一种组织...

    struts2.1.6 解决日历问题

    struts2.1.6 解决日历问题。区别struts2.0

    Struts2.1.6与Spring2.5.6框架整合开发

    Struts2.1.6与Spring2.5.6框架的整合开发是Java Web开发中的常见实践,这两种框架各自有着独特的优势,结合使用可以构建出高效、可维护的Web应用程序。Struts2作为MVC(Model-View-Controller)框架,负责处理请求和...

    struts2.1.6lib

    Struts2.1.6是Apache Struts框架的一个版本,它是基于MVC(Model-View-Controller)设计模式的Java Web应用程序开发框架。这个版本的lib目录包含了运行Struts2应用所需的所有核心类库,这些类库使得开发者能够构建...

    struts2.1.6教程(电子教程合集)

    Struts2.1.6教程合集是一份包含详尽指南和手册的资源包,专为学习和理解Struts2框架的2.1.6版本而设计。Struts2是Java Web开发中广泛使用的MVC(Model-View-Controller)框架,它提供了强大的功能和灵活性,用于构建...

    Struts2.1.6 jar包

    Struts2.1.6是Apache Struts框架的一个版本,它是基于MVC(Model-View-Controller)设计模式的Java Web应用程序开发框架。这个版本的Struts2包含了多个jar包,用于实现其核心功能和扩展服务。Struts2提供了一个强大...

    Struct1.2-Spring1.2-IBatis2.1.6 原创 实例

    在本实例中,我们主要探讨的是一个基于"Struct1.2", "Spring1.2" 和 "IBatis2.1.6" 的集成应用。这三个技术都是Java开发中非常重要的框架,它们各自承担着不同的职责,共同构建了一个高效、灵活的企业级应用。 首先...

    struts2.1.6+Spring2.0.8+Ibatis2.3.4工程

    struts2.1.6+Spring2.0.8+Ibatis2.3.4工程 开发工具:eclipse3.3+myeclipse6.5 应用技术:Struts2,Spring,Ibatis 数据库:oracle 测试JDK:JDK1.6 测试服务器:Tomcat6.0 非常完整的工程,部署到Tomcat上就可以使用...

    Struts1.2+Struts2.1.6+spring 2.0+hibernate3.1+Ibatis2.3(第一部分)

    Struts1.2+Struts2.1.6+spring 2.0+hibernate3.1+Ibatis2.3内个框架的集成

    Struts2.1.6API

    struts2.1.6api. 想学习struts2的朋友们。希望能喜欢这个api,我也希望能给你们一点帮助。

    struts2.1.6全部jar包

    Struts2.1.6是Apache Struts框架的一个版本,它是Java EE(企业版)应用程序开发中的一个流行MVC(模型-视图-控制器)框架。这个版本的Struts提供了许多功能,帮助开发者构建可维护、可扩展且结构良好的Web应用。在...

Global site tag (gtag.js) - Google Analytics