【进展】为NetVinace 项目加入数据访问支持。统一服务层(业务逻辑层)入口,设计引入命令系统

       由于工做的事情不少吗,已经好几天没上OSC了,个人NetVinace项目也荒废了好一段时间了。端午放假,必定要有一点更新才行。昨天,我花了一个下午,为项目加入了如下几项更新,虽然项目如今仍是不能使用的,但仍是得写写,本身作个记号。java

更新列表:mysql

  1. 引入数据库,并设计命令系统配置表;
  2. 加入基于hibernate的数据库访问支持;
  3. 统一应用中业务逻辑层接口;

     统一应用中业务逻辑层接口,因为java类能够实现多接口,若是有须要,用户能够编写本身的接口,并实现本身的接口,但必须实现系统默认服务接口。com.amos.main.service.ServiceUtil。此接口中包含业务入口,Boolean executeService(Object[] parm);方法.目前该接口还在测试阶段,后续还有很大的升级可能。不说太多,下面给出这次更新涉及到的源码。来,1,2,3 去马(码)!spring

引入数据库,并设计命令系统配置表:这次更新加入数据库支持,方便配置系统各类信息,引入命令系统,方便往后系统更新,与插件编写:sql

'命令处理器配置表' SQL:数据库

/* Table: COMMAND_HANDLER_CONFIG                                */
/*==============================================================*/
create table COMMAND_HANDLER_CONFIG
(
   OID                  int(3) not null,
   CMD_CODE             varchar(50) default NULL,
   CMD_NAME             varchar(50),
   CMD_HANDLER_CLZ      varchar(100),
   CMD_HANDLER_METHOND  varchar(100),
   PARMETER_NUM         int(2),
   ISHEAD               int(1) default 0,
   PARENT               int(3) comment '父级命令',
   NOTE                 text default NULL
);apache

alter table COMMAND_HANDLER_CONFIG comment '命令处理器配置表';session

/*==============================================================*/
/* Index: IDX_CMD_CODE                                          */
/*==============================================================*/
create index IDX_CMD_CODE on COMMAND_HANDLER_CONFIG
(
   CMD_CODE
);ide

/*==============================================================*/
/* Index: IDX_CMD_NAME                                          */
/*==============================================================*/
create index IDX_CMD_NAME on COMMAND_HANDLER_CONFIG
(
   CMD_NAME
);测试

 

 

命令参数配置表' SQL:this

create table COMMAND_PARMETERS_CONFIG
(
   OID                  int(10) not null,
   CMD_ID               int(3),
   PARM_NAME            varchar(20),
   PARM_TYPE            varchar(100),
   PARM_IDX             int(3),
   NOTE                 text
);

alter table COMMAND_PARMETERS_CONFIG comment '命令参数配置表';

alter table COMMAND_PARMETERS_CONFIG add constraint FK_FK_COMMAND_PARMETERS foreign key (OID)
      references COMMAND_HANDLER_CONFIG (OID) on delete restrict on update restrict;

客户端重要更新:
public class ClientApp implements ServiceUtil {  //你能够本身写接口,并在你的实现类中,同时实现ServiceUtil 和你本身的接口。

//ServiceUtil 接口方法

@Override
    public boolean executeService(Object[] parms) {
        // TODO Auto-generated method stub
        return startClient(parms[0].toString(), this);
    }

}

一样道理,服务端也有相似实现。。

 

//系统DAO接口定义(完整):

public interface ISystemCommonDao {

    public  int saveData(IEntry entry);

    /**
     *
     * @param entry
     * @return int
     * @category 更新数据
     */

    public  int updateData(IEntry entry);

    /**
     *
     * @param entryClass
     * @param id
     * @return int
     * @category 删除单条数据
     */

    public  int deleteData(Class entryClass, String id);

    /**
     * @author Administrator
     * @category 批量删除数据
     * @param entryClass,ids
     * @return int
     * @exception Exception
     * @since 1.0.0   2011-01-19
     */

    public  int deleteDatas(Class entryClass, String[] ids);

    /**
     *
     * @param entryClass
     * @param pageNo
     * @param pageSize
     * @return PageUtil
     * @category DAO查询分页方法
     */
    public  PageUtil queryAllData(Class entryClass, int pageNo,
            int pageSize);

    /**
     * @category DAO查询非分页方法
     * @param entryClass
     * @return
     */
    public  List<IEntry> queryAllData(Class entryClass);

    public  IEntry querySingleData(Class entryClass,
            String id);
   
    public  IEntry querySingleDataByCondition(Class entryClass,
            String condition);

    /**
     *
     * @param condition
     * @param entryClass
     * @return PageUtil
     * @category DAO条件查询分页方法
     */

    public  PageUtil queryDataByCondition(String condition,
            Class entryClass, int pageNo, int pageSize);

    /**
     *
     * @param condition
     * @param entryClass
     * @return
     * @category DAO条件查询非分页方法
     */
    public  List<IEntry> queryDataByCondition(
            String condition, Class entryClass, boolean distinct);

    /**
     *
     * @param sql
     * @return  List
     * @category SQL查询方法
     */

    public  List queryDataBySQL(String sql);

    /**
     *
     * @param sql
     * @return  List
     * @category SQL更新方法
     */

    public  void updateDataBySQL(String sql);

}

接下来就是对应接口的实现了。。

//系统DAO接口默认实现:

public class SystemCommonDaoImpl extends HibernateDaoSupport implements
ISystemCommonDao{

//方法重写。。省略N行。。O(∩_∩)O哈哈~

}

写完代码了,由于系统全部组件都交给Spring管理,因此,须要在spring配置文件中加入相关配置。

关于数据访问支持,确定要配置hibernate的sessionFactory

<bean id="sessionFactory"
        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>

        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.format_sql">true</prop>
                <prop key="hibernate.batch_size">15</prop>
            </props>
        </property>
    </bean>

固然,数据源配置也是必不可少

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://127.0.0.1:3306/netvinace"></property>
    <property name="username" value="root"></property>
    <property name="password" value="201441"></property>
    <property name="initialSize" value="50"></property>
    <property name="maxActive" value="100"></property>
    <property name="maxIdle" value="10"></property>
    <property name="maxWait" value="10"></property>
</bean>

还有,系统DAO的默认实现也少不了

<bean id="systemDao" class="com.amos.main.db.SystemCommonDaoImpl">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>

加入以后,整个数据支持就完成了,其实,还差一部分工做,就是实体类了,由于暂时尚未对表设计进行校验,表的设计是否合理,还在测试阶段。迟点测试好了,再拿出来给你们分享吧。

相关文章
相关标签/搜索