首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

spring3与ibatis的集成筹建及简单应用

2012-07-31 
spring3与ibatis的集成搭建及简单应用一、spring及ibatis的简介关于spring和ibatis的介绍在这里就不多说了,

spring3与ibatis的集成搭建及简单应用

一、spring及ibatis的简介

  关于spring和ibatis的介绍在这里就不多说了,具体的简介及应用可以参考我前面的两篇文章:《ibatis的简介与初步搭建应用》,《spring的简介与初步搭建应用》,这里主要结合两者,搭建起集成环境,并演示简单的实例应用。

二、集成环境的搭建

下图是我的搭建图

           spring3与ibatis的集成筹建及简单应用

  (一)、Dao层搭建

  这里Dao层的搭建就是指Dao层接口,即Mapper接口的创建,和我《ibatis的简介与初步搭建应用》这篇文章里的是相同的,你也可以参考那里面的:

1.       表结构的创建,SQL如下:

CREATE TABLE goods (  id int(11) NOT NULL DEFAULT '0',  category_id int(11) DEFAULT NULL,  name varchar(100) DEFAULT NULL,  price decimal(10,0) DEFAULT NULL,  description varchar(100) DEFAULT NULL,  acount int(11) DEFAULT NULL,  update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,  PRIMARY KEY (id))

导入两条数据:

INSERT INTO goods VALUES (1,1,'Nokia-L900',3010,'Windows7 Mobile Phone',1,'2012-06-22 14:09:18');INSERT INTO goods VALUES (2,1,'Moto-525',1800,'Andriod 2.2',15,'2012-06-23 01:19:36');

2.       创建表所对应的domain对象

package com.csdn.kane.domain;import java.sql.Timestamp;public class Goods {private int id;private int categoryId;private String name;private float price;private String description;private int acount;private Timestamp updateTime;public int getId() {return id;}public void setId(int id) {this.id = id;}public int getCategoryId() {return categoryId;}public void setCategoryId(int categoryId) {this.categoryId = categoryId;}public String getName() {return name;}public void setName(String name) {this.name = name;}public float getPrice() {return price;}public void setPrice(float price) {this.price = price;}public String getDescription() {return description;}public void setDescription(String description) {this.description = description;}public int getAcount() {return acount;}public void setAcount(int acount) {this.acount = acount;}public Timestamp getUpdateTime() {return updateTime;}public void setUpdateTime(Timestamp updateTime) {this.updateTime = updateTime;}}

3.       创建Dao层接口,用来提供Dao层操作,在本应用中为GoodsDao接口

package com.csdn.kane.dao;import org.apache.ibatis.annotations.Select;import com.csdn.kane.domain.Goods;public interface GoodsDao {@Select("select * from Goods where id=#{id}")public Goods selectGoodsById(int id);}

4.       ibatis的配置文件

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><typeAliases><typeAlias type="com.csdn.kane.domain.Goods"/></typeAliases></configuration>

  因为这里集成了spring,所以在ibatis的配置文件中不再配置数据源,而是将其配置在spring的配置文件中,同时也不再配置GoodsDao接口,而是由spring的annotation来自动创建该bean,所以ibatis的配置文件只包含domain的配置。

(二)、Service层搭建

这里Service层的搭建就是指service层的接口及实现类的创建。

1.       service接口

package com.csdn.kane.service;import com.csdn.kane.domain.Goods;public interface GoodsService {public Goods selectGoodsById(int id);}

2.       service接口的实现类

package com.csdn.kane.service;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.csdn.kane.dao.GoodsDao;import com.csdn.kane.domain.Goods;@Service("goodsService")public class GoodsServiceImpl implements GoodsService {@Autowiredprivate GoodsDao goodsDao;@Overridepublic Goods selectGoodsById(int id) {Goods goods = new Goods();goods = goodsDao.selectGoodsById(id);return goods;}}

  正如看到的,在service的实现类中,我们将Dao层接口通过@Autowried注解来引入,方法中调用了Dao层接口,通过Dao层来获取数据,因为Dao层是直接和数据库打交道的。同时我们将该service实现类通过@Service("goodsService")注解来自动引入,而不用在配置文件中配置了。

3.       spring的配置文件

<?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:tx="http://www.springframework.org/schema/tx"  xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd           http://www.springframework.org/schema/tx           http://www.springframework.org/schema/tx/spring-tx-3.0.xsd           http://www.springframework.org/schema/context           http://www.springframework.org/schema/context/spring-context.xsd"><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"><property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property><property name="url"><value>jdbc:mysql://127.0.0.1:3306/XiaoQingTest</value></property><property name="username"><value>root</value></property><property name="password"><value>08073440</value></property><property name="maxActive"><value>255</value></property><property name="maxIdle"><value>2</value></property><property name="maxWait"><value>120000</value></property></bean><bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource" /></bean><!-- enable autowire --><context:annotation-config /><!-- (Annotation方式配置services)enable component scanning (beware that this does not enable mapper scanning!) --><context:component-scan base-package="com.csdn.kane.service" /><!-- enable transaction demarcation with annotations --><tx:annotation-driven /><!-- define the SqlSessionFactory, notice that configLocation is not needed when you use MapperFactoryBean --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /><property name="configLocation" value="com/csdn/kane/dao/mybatis-config.xml" /></bean><!-- scan for mappers and let them be autowired --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!-- Mapper接口所在包名,Spring会自动查找其下的Mapper --><property name="basePackage" value="com.csdn.kane.dao" /></bean><!-- more bean definitions go here --><!-- <bean id="goodsService" class="com.csdn.kane.service.GoodsServiceImpl" />--></beans>

  首先我们配置了数据源,原本在ibatis中配置的数据源已省去,通过spring来进行数据源配置及事务管理。

  接着,我们配置使用spring的annotation注解来代替xml的方式配置bean.

  然后,我们配置了ibatis和spring的集成,注意这里你要去ibatis官网下载ibatis-spring的集成jar包。

  最后,我们要配置Dao层的接口,能让spring自动实例化dao层的bean。

 

三、测试

  最后,我们编写一个测试类来测试spring和ibatis的集成

package com.csdn.kane.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.csdn.kane.domain.Goods;import com.csdn.kane.service.GoodsService;public class TestIntegrate {public static void main(String[] args) {// create and configure beansApplicationContext context = new ClassPathXmlApplicationContext("/springContext.xml");// retrieve configured instanceGoodsService goodsService = (GoodsService) context.getBean("goodsService");Goods goods = goodsService.selectGoodsById(2);System.out.println(goods.getName());System.out.println(goods.getDescription());}}

运行后,可能到结果如下:

spring3与ibatis的集成筹建及简单应用

到此,你就完成了spring和ibatis的集成,通过service层调用dao层接口完成示例,就这么简单。


 

热点排行