zoukankan      html  css  js  c++  java
  • OSGI企业应用开发(十)整合Spring和Mybatis框架(三)

    上篇文章中,我们已经完成了OSGI应用中Spring和Mybatis框架的整合,本文就来介绍一下,如何在其他Bundle中,使用Mybatis框架来操作数据库。

    为了方便演示,我们新建一个新的Plug-in Project工程,名称为com.csdn.osgi.user,表示用户模块。

    上篇文章中,我们使用<osgi:service/>标签將用于操作数据库的SqlSessionTemplate实例注册为服务,配置如下:

    <osgi:service id="sqlMapService" ref="sqlSessionTemplate" interface="org.apache.ibatis.session.SqlSession" />

    如果需要在其他Bundle中使用Mybatis框架来操作数据库,则必须將sqlMapService引入,然后注入到DAO对象中。

    因此我们需要在com.csdn.osgi.user工程的META-INF目录下新建一个spring目录,然后在该目录下新建一个dmconfig.xml文件用于引用其他Bundle注册的Bean。
    dmconfig.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:osgix="http://www.springframework.org/schema/osgi-compendium"
       xmlns:ctx="http://www.springframework.org/schema/context"
       xmlns:osgi="http://www.eclipse.org/gemini/blueprint/schema/blueprint"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
          http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context 
          http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/osgi-compendium 
          http://www.springframework.org/schema/osgi-compendium/spring-osgi-compendium.xsd
          http://www.eclipse.org/gemini/blueprint/schema/blueprint 
           http://www.eclipse.org/gemini/blueprint/schema/blueprint/gemini-blueprint.xsd">
    
       <osgi:reference  id="sqlMapService" interface="org.apache.ibatis.session.SqlSession" />
    </beans>

    前面文章中已经介绍到,引用其他Bundle发布的Bean,需要用到<osgi:reference/>标签。

    接下来我们可以新建一个DAO类,將sqlMapService注入,这样就可以使用SqlSessionTemplate实例操作数据库了。

    我们的DAO类名称为com.csdn.osgi.user.UserDao,内容如下:

    package com.csdn.osgi.user;
    
    import java.util.HashMap;
    
    import org.apache.ibatis.session.SqlSession;
    
    public class UserDao {
    
        SqlSession sqlSession;
    
        public SqlSession getSqlSession() {
            return sqlSession;
        }
    
        public void setSqlSession(SqlSession sqlSession) {
            this.sqlSession = sqlSession;
        }
    
        public void start(){
    
            System.out.println("UserDao start function...");
            HashMap userInfoMap = new HashMap();
            userInfoMap.put("UserName", "Jack");
            userInfoMap.put("Password", "Jack");
            sqlSession.insert("user.saveUser",userInfoMap);
        }
    }
    

    接着可以在META-INF/spring目录下新建一个user.xml文件,配置一个UserDao 类的实例,并將將sqlMapService注入,user.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"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
    
        <bean id="userDao" class="com.csdn.osgi.user.UserDao" init-method="start">
            <property name="sqlSession" ref="sqlMapService"></property>
        </bean>
    </beans>

    工程目录及文件结构如下图所示:
    这里写图片描述
    接下来还需要对com.csdn.osgi.user工程中的MANIFEST.MF文件进行修改,添加Bundle依赖,内容如下,其中Require-Bundle元数据头为新增。

    Manifest-Version: 1.0
    Bundle-ManifestVersion: 2
    Bundle-Name: User
    Bundle-SymbolicName: com.csdn.osgi.user
    Bundle-Version: 1.0.0.qualifier
    Bundle-Vendor: CSDN
    Bundle-RequiredExecutionEnvironment: JavaSE-1.8
    Require-Bundle: org.mybatis.mybatis;bundle-version="3.1.1",
     org.mybatis.mybatis-spring;bundle-version="1.2.3",
     com.springsource.com.mysql.jdbc;bundle-version="5.1.6",
     org.springframework.jdbc;bundle-version="3.0.0"
    

    UserDao的start()方法会在Bean实例化时调用一次,我们在该方法中,通过SqlSessionTemplate实例的insert()方法往数据库中插入一条数据。

    接下来启动OSGI容器,然后查询MySql数据库,会发现每次应用启动,数据库中会新增一条记录,如下图所示:
    这里写图片描述

    到此为止OSGI应用中Spring和Mybatis框架的整合已经全部完成了,后续笔者会继续介绍与Spring MVC框架的整合。

  • 相关阅读:
    C#开发微信公众平台-就这么简单(附Demo)
    Newtonsoft.Json高级用法
    C#获取文件的MD5码
    C#动态执行代码
    c#插件式开发
    利用反射执行代码
    yield关键字用法与解析(C# 参考)
    HttpContext.Current.Cache和HttpRuntime.Cache的区别,以及System.Runtime.Caching
    GZip压缩与解压缩
    Asp.Net 请求处理机制
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6468154.html
Copyright © 2011-2022 走看看