读书人

Spring2.5(全引文)+Ibatis2.3的集成

发布时间: 2012-11-20 09:55:43 作者: rapoo

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

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" 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" value="classpath:SqlMapConfig.xml" />
??? ??? <property name="dataSource" ref="dataSource" />
??? </bean>

??? <bean id="sqlMapClientTemplate" ref="sqlMapClient" />
??? </bean>

??? <!--事务 -->
??? <bean id="transactionManager"
??? ??? 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" resultparameterparameterparameterresultparameterresultparameterresultproperty="title">
??? ??? ??? ??? (title like #title#)
??? ??? ??? </isNotEmpty>
??? ??? ??? <isNotEmpty prepend="AND" property="autor">
??? ??? ??? ??? (author like #author#)
??? ??? ??? </isNotEmpty>
??? ??? </dynamic>
??? </select>

??? <!-- 更新图书 -->
??? <update id="updateBook" parameter");
??? ??? 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;

读书人网 >软件架构设计

热点推荐