`
www-hello
  • 浏览: 100440 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Spring2.5(全注解)+Ibatis2.3的集成

    博客分类:
  • java
阅读更多

Spring2.5(全注解)+Ibatis2.3的集成
网址:http://www-hello.iteye.com/blog/646944

本文档所用文件:
    iBATIS : ibatis-2.3.4.726.zip
Spring : spring-framework-2.5.6.SEC01-with-dependencies.zip
DBCP : spring-framework-2.5.6.SEC01-with-dependencies.zip
MySQL驱动:mysql-connector-java-5.1.12.zip

Spring2.5与Ibatis2.3的集成
1.    新建Web工程(如SSI)。(与Struts的集成请参考:http://www-hello.iteye.com/blog/643937)
2.    添加所需Jar包到WEB-INF/lib目录下:
2.1    iBatis包:ibatis-2.3.4.726.jar
2.2    DBCP包:commons-pool.jar,commons-dbcp.jar
2.3    Spring包:spring.jar,commons-logging.jar,log4j-1.2.15.jar,antlr-2.7.6.jar,aspectjrt.jar,aspectjweaver.jar,commons-collections.jar
2.4    MySQL驱动包:mysql-connector-java-5.1.12-bin.jar

3.    配置文件
3.1    日志配置文件(log4j.properties)
log4j.rootLogger=DEBUG, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%c{1} - %m%n

log4j.logger.java.sql.PreparedStatement=DEBUT

3.2    Jdbc连接属性文件(jdbc.properties)
driverClassName=org.gjt.mm.mysql.Driver
url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
username=root
password=root
initialSize=1
maxActive=100
maxIdle=8
minIdle=1

3.3    Spring配置文件(applicationContext.xml)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

    <!-- 启用注解 -->
    <context:annotation-config />
    <context:component-scan base-package="cn.*" />
   
    <context:property-placeholder location="classpath:jdbc.properties" />

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
        <property name="driverClassName" value="${driverClassName}" />
        <property name="url" value="${url}" />
        <property name="username" value="${username}" />
        <property name="password" value="${password}" />
        <!--连接池启动时的初始值 -->
        <property name="initialSize" value="${initialSize}" />
        <!--连接池的最大值 -->
        <property name="maxActive" value="${maxActive}" />
        <!--最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 -->
        <property name="maxIdle" value="${maxIdle}" />
        <!--最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请 -->
        <property name="minIdle" value="${minIdle}" />
    </bean>

    <!--spring整合ibatis -->
    <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
        <property name="configLocation" value="classpath:SqlMapConfig.xml" />
        <property name="dataSource" ref="dataSource" />
    </bean>

    <bean id="sqlMapClientTemplate" class="org.springframework.orm.ibatis.SqlMapClientTemplate">
        <property name="sqlMapClient" ref="sqlMapClient" />
    </bean>

    <!--事务 -->
    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>

    <tx:annotation-driven transaction-manager="transactionManager" />

</beans>

3.4    总配置文件(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>
    <!--映射文件-->
    <sqlMap resource="cn/ssi/config/book.xml"/>
</sqlMapConfig>

3.5    实体映射文件(cn/ssi/config/book.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>
    <typeAlias alias="Book" type="cn.ssi.entity.Book" />

    <!-- 添加图书 -->
    <insert id="saveBook">
        <selectKey keyProperty="id" resultClass="int">
            SELECT
            LAST_INSERT_ID() AS VALUE
        </selectKey>
        INSERT INTO
        book(title,author,total,price,isbn,publisher)
        VALUES
        (#title#,#author#,#total#,#price#,#isbn#,#publisher#)
    </insert>

    <!-- 删除图书 -->
    <delete id="deleteBook" parameterClass="int">
        DELETE FROM book WHERE
        id=#id#
    </delete>

    <!-- 通过出版社查找此出版社出版的所有图书 -->
    <select id="findBooksByPublisher" parameterClass="String"
        resultClass="Book">
        SELECT
        id,title,author,total,price,isbn,publisher
        FROM
        book
        WHERE
        publisher = #publisher#
    </select>

    <!-- 通过isbn查找图书 -->
    <select id="findBookByISBN" parameterClass="String" resultClass="Book">
        SELECT
        id,title,author,total,price,isbn,publisher
        FROM
        book
        WHERE
        isbn =
        #isbn#
    </select>

    <!-- 通过ID查找图书 -->
    <select id="findBookById" parameterClass="int" resultClass="Book">
        SELECT
        id,title,author,total,price,isbn,publisher
        FROM
        book
        WHERE
        id = #id#
    </select>

    <select id="findBooks" parameterClass="Book" resultClass="Book">
        SELECT
        id,title,author,total,price,isbn,publisher
        FROM
        book
        <dynamic prepend="WHERE">
            <isNotEmpty prepend="AND" property="title">
                (title like #title#)
            </isNotEmpty>
            <isNotEmpty prepend="AND" property="autor">
                (author like #author#)
            </isNotEmpty>
        </dynamic>
    </select>

    <!-- 更新图书 -->
    <update id="updateBook" parameterClass="Book">
        UPDATE
        book
        SET
        title=#title#,author=#author#,total=#total#,price=#price#,isbn=#isbn#,publisher=#publisher#
        WHERE
        id=#id#
    </update>

</sqlMap>

4.    编写Java代码
4.1    Entity类(Book.java)
package cn.ssi.entity;

public class Book {
    private int id;
    private String title;
    private String author;
    private int total;
    private float price;
    private String isbn;
    private String publisher;

    public Book() {
    }

    public Book(String title) {
        this.title = title;
    }

    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 int getTotal() {
        return total;
    }

    public void setTotal(int total) {
        this.total = total;
    }

    public float getPrice() {
        return price;
    }

    public void setPrice(float price) {
        this.price = price;
    }

    public String getIsbn() {
        return isbn;
    }

    public void setIsbn(String isbn) {
        this.isbn = isbn;
    }

    public String getPublisher() {
        return publisher;
    }

    public void setPublisher(String publisher) {
        this.publisher = publisher;
    }

    @Override
    public String toString() {
       
        StringBuilder sb = new StringBuilder();
        sb.append("ID:").append(id).append(" ");
        sb.append("title:").append(title).append(" ");
        sb.append("author:").append(author).append(" ");
        sb.append("total:").append(total).append(" ");
        sb.append("price:").append(price).append(" ");
        sb.append("isbn:").append(isbn).append(" ");
        sb.append("publisher:").append(publisher).append(" ");

        return sb.toString();
    }

}

4.2    业务类接口(BookService.java)
package cn.ssi.service;

import java.util.List;

import cn.ssi.entity.Book;

public interface BookService {
   
    /**
     * 增加图书
     *
     * @param book
     *            图书
     */
    public void save(Book book);

    /**
     * 删除指定图书
     *
     * @param id
     *            图书ID号
     */
    public void deleteBook(int id);

    /**
     * 通过出版社查找此出版社出版的所有书籍
     *
     * @param publisher
     *            出版社
     * @return 所有书籍
     */
    public List<Book> findBookByPublisher(String publisher);

    /**
     * 根据Id查找图书
     *
     * @param id
     * @return
     */
    public Book findBookById(int id);

    /**
     * 更新图书
     * @param book 图书
     */
    public void updateBook(Book book);
}

4.3    业务类实现类(BookServiceBeanjava)
package cn.ssi.service.impl;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.orm.ibatis.SqlMapClientTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import cn.ssi.entity.Book;
import cn.ssi.service.BookService;

@Service
@Transactional
public class BookServiceBean implements BookService {
    private @Resource(name = "sqlMapClientTemplate")
    SqlMapClientTemplate sqlMapClientTemplate;

    @Override
    public void deleteBook(int id) {
        sqlMapClientTemplate.delete("deleteBook", id);
    }

    @Override
    public Book findBookById(int id) {
        return (Book) sqlMapClientTemplate.queryForObject("findBookById", id);
    }

    @SuppressWarnings("unchecked")
    @Override
    public List<Book> findBookByPublisher(String publisher) {
        return (List<Book>) sqlMapClientTemplate.queryForList(
                "findBooksByPublisher", publisher);
    }

    @Override
    public void save(Book book) {
        sqlMapClientTemplate.insert("saveBook", book);
    }

    @Override
    public void updateBook(Book book) {
        sqlMapClientTemplate.update("updateBook", book);
    }

}

5.    测试集成
5.1    Junit测试类(BookServiceTest.java)
package cn.ssi.book.test;

import java.util.List;

import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import cn.ssi.entity.Book;
import cn.ssi.service.BookService;

public class BookServiceTest {

    @BeforeClass
    public static void setUpBeforeClass() throws Exception {
    }

    @Test
    public void testBookService() {
        ApplicationContext ctx = new ClassPathXmlApplicationContext(
                "applicationContext.xml");
        BookService bookService = (BookService) ctx.getBean("bookServiceBean");
        Book book = new Book();
        book.setTitle("bookTest");
        book.setAuthor("author");
        book.setIsbn("ISBN:123456");
        book.setPublisher("publisher1");
        book.setPrice(45.0f);
        book.setTotal(100);
        bookService.save(book);

        List<Book> books = bookService.findBookByPublisher("publisher1");
        System.out.println("---------------BOOKS-------------------");
        System.out.println("图书:" + books.size());

        for (Book b : books) {
            System.out.println(b);
        }
    }
}
       
5.2    运行Junit测试
---------------BOOKS-------------------
图书:1
ID:10 title:bookTest author:author total:100 price:45.0 isbn:ISBN:123456 publisher:publisher1
       
5.3    MySQL数据库
mysql> select * from book;
+----+----------+--------+-------+-------+-------------+------------+
| id | title    | author | total | price | isbn        | publisher  |
+----+----------+--------+-------+-------+-------------+------------+
| 10 | bookTest | author |   100 |    45 | ISBN:123456 | publisher1 |
+----+----------+--------+-------+-------+-------------+------------+
1 row in set (0.00 sec)
   
    集成成功。

附:
数据库角本:
DROP TABLE IF EXISTS `book`;
CREATE TABLE `book` (
  `id` int(11) NOT NULL auto_increment,
  `title` varchar(50) default NULL,
  `author` varchar(20) default NULL,
  `total` int(11) default NULL,
  `price` float default NULL,
  `isbn` varchar(20) default NULL,
  `publisher` varchar(50) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

分享到:
评论

相关推荐

    SSI(struts2+spring2.5+ibatis2.3)项目实例

    **SSI(Struts2+Spring2.5+Ibatis2.3)项目实例详解** **一、Struts2框架** Struts2是一个基于MVC设计模式的Java Web开发框架,它继承了Struts1和WebWork的优点,提供了一种更灵活、更强大的控制层解决方案。在SSI...

    ssi框架集成增删改查及存储过程(spring2.5+struts2.1+ibatis2.3)

    在这个项目中,开发者利用了Spring 2.5、Struts 2.1和iBatis 2.3这三个组件来实现数据的增删改查功能,并且结合了存储过程来增强数据库操作的灵活性。同时,通过Junit进行单元测试,确保代码的正确性和稳定性。 ...

    Struts1.1+spring2.5+ibatis2.3+Ajax整合的源代码

    Struts1.1+Spring2.5+Ibatis2.3+Ajax整合是一个经典的Java Web开发框架组合,常用于构建企业级应用。这个源代码集合提供了如何将这四个技术有效地结合在一起的实例,以实现一个功能强大的、具有无刷新特性的用户界面...

    Spring2.5+ibatis2.3+Extjs2.0+Struts2实现用户管理

    本项目以"Spring2.5+ibatis2.3+Extjs2.0+Struts2实现用户管理"为主题,旨在为初学者提供一个全面理解这些技术集成使用的实例。下面将详细阐述这四个关键组件及其在用户管理系统中的作用。 首先,Spring框架是Java...

    SSI框架实现增删改查(spring2.5 + struts2.1 + ibatis2.3)

    在Spring和Struts的集成中,iBatis作为数据访问对象(DAO)层,负责与数据库的交互,通过XML配置文件或注解定义SQL映射,实现了动态SQL和数据访问的定制化。 **Junit测试框架**: Junit是Java开发中最常用的单元...

    struts2+spring2.5+ibatis2.3框架整合开发.doc

    在整合中,iBatis负责数据库操作,通过MyBatis-Spring插件与Spring进行集成,使得DAO层的bean可以在Spring容器中被管理,同时实现SQL执行和结果映射的自动化。 **框架整合步骤:** 1. **添加依赖库**:确保项目中...

    Spring 2.5整合iBATIS 2.3并使用Spring的声明式事务管理

    本篇将详细介绍如何在Spring 2.5版本中整合iBATIS 2.3,并利用Spring的声明式事务管理,以提升应用程序的稳定性和可维护性。 首先,我们需要了解Spring 2.5和iBATIS 2.3的基本概念。Spring 2.5是Spring框架的一个...

    struts2 + spring2.5 + ibatis2.3.4整合包文件

    这个"struts2 + spring2.5 + ibatis2.3.4整合包文件"包含了这三个框架的集成,用于搭建一个完整的Java Web应用程序。以下是对这些框架及其整合的详细说明: 1. Struts2:Struts2是基于Apache Struts 1的升级版,它...

    spring2.5 ibatis2.3 struts2.1 dwr3 annotation集成配置

    综上所述,"spring2.5 ibatis2.3 struts2.1 dwr3 annotation集成配置"涉及到的不仅仅是单一技术的使用,更是Java Web开发中多框架协同工作的典范,展示了如何利用注解简化配置,提高开发效率,并为大型企业级应用...

    struts2+ibatis-2.3+spring2.5整合实例

    在"Struts2+ibatis-2.3+spring2.5整合实例"中,我们首先需要设置项目的环境,包括JDK、Maven或Gradle等构建工具,以及Tomcat服务器。然后,创建一个新的Maven或Gradle项目,并在`pom.xml`或`build.gradle`文件中添加...

    Ibatis2.3+Struts1.3+Spring2.5 整合实例代码

    本示例代码涉及的是一个经典的技术栈:Ibatis2.3、Struts1.3和Spring2.5的整合。这三个框架各自都有其独特的功能和优点,组合在一起能够提供灵活的数据访问、高效的MVC架构以及全面的应用管理。 Ibatis,作为一款轻...

    SSI--struts2+spring2.5+ibatis项目实例

    3. **iBatis2.3**:iBatis是一个SQL映射框架,它将SQL语句与Java代码分离,使得开发者可以更灵活地编写和维护SQL。在SSI项目中,iBatis用于与数据库交互,通过XML配置文件定义SQL查询,然后在Java代码中执行这些查询...

    Struts2.1.8 spring2.5.6 ibatis2.3 集成

    Struts2.1.8、Spring2.5.6 和 iBatis2.3 的集成是Web开发中一种常见的技术组合,主要用于构建企业级的Java应用程序。这些框架各自都有其独特的优势,当它们协同工作时,可以提供强大的功能,如模型-视图-控制器(MVC...

    图书管理系统ssi(ibatis由Spring管理)

    项目中的文件"struts2spring2.5ibatis2.3"很可能包含了该项目所需的全部源码和配置文件,包括Struts2的配置文件(struts.xml),Spring的配置文件(spring-context.xml),以及Ibatis的映射文件(mybatis-config.xml和各...

    spring chm文档

    Spring Framework 开发参考手册 Rod Johnson Juergen Hoeller Alef Arendsen Colin Sampaleanu Rob Harrop Thomas Risberg Darren Davison Dmitriy Kopylenko Mark Pollack Thierry Templier Erwin ...

    Spring2.5.6 参考文档

    - **作为JCA适配器部署Spring应用上下文**:支持将Spring应用上下文作为JCA适配器进行部署,便于与其他企业级中间件进行集成。 - **任务调度**:引入了任务调度功能,支持定时任务的执行。 - **Java 5 (Tiger) 支持*...

    Spring-Reference_zh_CN(Spring中文参考手册)

    2. Spring 2.0 的新特性 2.1. 简介 2.2. 控制反转(IoC)容器 2.2.1. 更简单的XML配置 2.2.2. 新的bean作用域 2.2.3. 可扩展的XML编写 2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP XML配置 2.3.2. 对@AspectJ 切面的...

    Spring in Action(第二版 中文高清版).part2

    15.4 集成Spring Web Flow与其他框架 15.4.1 Jakarts Struts 15.4.2 JavaServer Face 15.5 小结 第16章 集成其他Web框架 16.1 协同使用Spring和Struts 16.1.1 向Struts注册Spring插件 16.1.2 编写知晓Spring...

    Spring中文帮助文档

    2.7. 移植到Spring 2.5 2.7.1. 改变 2.8. 更新的样例应用 2.9. 改进的文档 I. 核心技术 3. IoC(控制反转)容器 3.1. 简介 3.2. 基本原理 - 容器和bean 3.2.1. 容器 3.2.2. 实例化容器 3.2.3. 多种bean ...

    Spring API

    2. Spring 2.0和 2.5的新特性 2.1. 简介 2.2. 控制反转(IoC)容器 2.2.1. 新的bean作用域 2.2.2. 更简单的XML配置 2.2.3. 可扩展的XML编写 2.2.4. Annotation(注解)驱动配置 2.2.5. 在classpath中自动搜索组件...

Global site tag (gtag.js) - Google Analytics