Spring +ibatis整合配置介绍

来源:互联网 发布:cms新闻发布系统 编辑:程序博客网 时间:2024/04/29 06:25

Spring +ibatis整合配置介绍

上周支撑平台技术布道者-七修 给大伙讲了如何使用spring框架,及它的优点。

事后做了下练习,把大致的配置步骤和大家分享下:

<PS:此贴首先是分享贴,其次还是求助贴,问题见博文最下方,走过路过的,帮偶解决下吧,谢谢了>【问题已解决】

一、pom.xml加入spring、ibatis的依赖关系

    <dependency>

      <groupId>org.springframework</groupId>

       <artifactId>spring</artifactId>

      <version>2.5.6</version>

</dependency>

<dependency>

       <groupId>org.apache.ibatis</groupId>

       <artifactId>ibatis-sqlmap</artifactId>

       <version>2.3.0</version>

</dependency>

.

二、编写ibatis的sql映射文件user.xml(文件名自定)

.

该文件包含了user这一实体涉及到的所有增删改查的SQL语句。

如:

.

三、编写ibatis配置文件sqlMapConfig.xml(文件名自定)

.       

该文件说明sql映射文件位置(引入上述的user.xml)。

因需使用spring框架,所以其数据源具体的配置信息放入spring的配置文件,此文件中指明数据源bean名称即可。:

<sqlMapConfig>

        <sqlMapresource="user.xml" />

</sqlMapConfig>

  <property name="dataSource">

  <ref bean="dataSource"/>

  </property>

.

四、编写spring配置文件applicationContext.xml(文件名自定)

.

该文件包含了ibatis的配置,数据源配置,程序DAO层、Action层、Service层等的配置。

(1)ibatis配置,如:

<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">

     <property name="configLocation">

          <value>classpath:sqlMapConfig.xml</value>

       </property>

</bean>

(2)数据源配置,如:

    <bean id="dataSource"

class="org.springframework.jdbc.datasource.DriverManagerDataSource">

       <property name="driverClassName">

          <value>com.mysql.jdbc.Driver</value>

       </property>

       <property name="url">

          <value>jdbc:mysql://localhost/test</value>

       </property>

       <property name="username">

          <value>root</value>

       </property>

       <property name="password">

          <value>test</value>

       </property>

</bean>

(3)程序bean的配置,如user的DAO、Action、Service:

<bean id="userDAO" class="com.taobao.login.dao.impl.UserDAOImpl"></bean>

    <bean id="userAction"class="com.taobao.login.action.UserAction"></bean>

<bean id="userService" class="com.taobao.login.service.impl.UserServiceImpl"></bean>

参数介绍 

1)   id: 可自定义,但需保证唯一性;程序中引用id值即可。

2)   property:配置具体属性;

3)   value:具体的属性值;

4)   class: 指定bean关联的类,全路径;

5)   name: 类中需引用的方法名;对该class中指定name的set方法,传入value的值。

 

-----------------------------------------------------------------------------------

上述文件也可进行下优化处理: 

PS1:为了使applicationContext.xml文件更清晰可读,

可以把各类的配置文件,分成若干个spring文件,再在总的applicationContext.xml文件中import其它几个spring配置文件。

如:

<import resource="spring-dataSource.xml"/>

    <import resource="spring-ibatis.xml"/>

<import resource="spring-user.xml"/>

PS2:上述配置文件中会使用到一些常量值,如数据源、用户名、密码等,可再抽取成jdbc.properties文件统一赋值管理,其它文件中客户可使用${}来引用该变量值。

    <bean id="dataSource"

class="org.springframework.jdbc.datasource.DriverManagerDataSource">

       <property name="driverClassName">

          <value>${jdbc.driverClassName}</value>

       </property>

       <property name="url">

          <value>${jdbc.url}</value>

       </property>

       <property name="username">

          <value>${jdbc.username}</value>

       </property>

       <property name="password">

          <value>${jdbc.password}</value>

       </property>

</bean>

PS3:jdbc.properties文件路径是在applicationContext.xml中配置,

如下段代码表示取classpath路径下的jdbc.properties文件<匹配本地项目工程目录/target下的所有文件>)

    <bean id="propertyConfigurer"

class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

       <property name="locations">

          <list>

             <value>classpath:jdbc.properties</value>

          </list>

    </property>

</bean>

------------------------------------------------------------------------------------

.

五、编写web.xml

.

Web工程,可以直接在项目工程中的web.xml文件里引入spring的总配置文件,再加入spring监听即可,如:

    <context-param>

      <param-name>contextConfigLocation</param-name>

      <param-value>classpath:applicationContext.xml</param-value>

    </context-param>

    <listener>

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

.

六、程序中使用

.

经过上述5个步骤,即已成功配置spring+ibatis框架,至于程序中如何使用,可参见下方例子:

//声明bean ,其中sqlMapClient必须和spring配置文件中的id保持一致

//如是继承类,只需在父类中声明即可,子类中可直接使用

protectedSqlMapClient sqlMapClient;

//注入bean属性,spring通过setter注入,利用setter方法的属性来配置属性值

public voidsetSqlMapClient(SqlMapClient sqlMapClient) {

       this.sqlMapClient= sqlMapClient;

}  

//bean使用,此时不需要再实例化sqlMapClient,可以直接使用该对象

public UserDOinsertUser(UserDO userDO){

       try {

          sqlMapClient.insert("insertUser",userDO);

          return userDO;

       } catch(SQLException e) {

          e.printStackTrace();

       }

       return null;

    }

 

Spring的功能很强大,随便google一下,就可以搜出一堆的优点介绍,但偶暂时未体会到那么多,因为应用场景也小,现在暂时体会到的Spring几个好处是: 

1.  可以实现控制反转。

直白点的理解是通过一个配置文件集中控制程序,达到不用修改代码即可改变程序功能的作用(配置过的部分才起作用)。

2.  可以实现AOP面向方面编程。

直白点的理解 类似于公共业务处理,有些模块都需要处理同一业务,可以使用spring来控制,不用在每个模块中再去剖析或编写这些公共业务的代码。

相当于对程序里部分功能,做了一个横向管理。

3.  方便解耦,简化开发。

不必再为单实例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用

使用最明显的一点是使用配置过的对象时,程序中声明后即可直接使用,不用再实例化出一对象,提高开发效率。

  

【问题】:在测试TOPAPI的过程中,使用过@Resource标签功能来注入bean属性,即:

// 自动注入 bean名称为 userService的 Bean

@Resource

private UserService userService;

 但在此工程中@Resource功能无法体现,编译时总是报空指针错误,应该未注入成功Why?

.

【原因】spring容器中缺少一个负责处理这些注释的BeanPostProcessor的bean.导致@Resource无效

【解决方法】spring配置文件中加入

<beanclass="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor"/>

即可。

非常感谢 叶渡的解决和见田的献策 ~~~~O(∩_∩)O

 


原创粉丝点击