当前位置: 首页 > 工具软件 > Awake SQL > 使用案例 >

Awake使用说明

谭兴学
2023-12-01

 Awake1.0目前主要实现了通用查询功能功能,Awake框架是一个可扩展的开放的框架,只要是跟字段通用性方面的需求都可以通过awake来扩展,如果大家有什么好的想法和建议或者发现了bug可以给我发邮件jfheng@163.com,我将会及时对awake进行修改和扩展
下面以通用查询为例,介绍awake在spring下集成配置方法和使用方法。(在demo中包含下列源码,)
一.使用awake需要分别实现两个接口
1.创建一个AdviceFirstAwake类继承抽象类ADom4jQueryAwake,AdviceFirstAwake实现IAwake接口方法getAwakeName(),
/**
   * <p>Description: 获得自身Awake名字</p>
   * @return String
   * @todo Implement this syhy.awake.core.config.IAwake method
   */
public String getAwakeName() {
    return this.getClass().getName();
}
2.在你的action或servlet类中实现接口IQueryBaseAction方法,如果是struts1也可以直接继承StrutsQueryBaseAction,
通过awake容器来访问awake配置管理器 、hql解析器等模块,

/**得到awake容器*/
public IActionQueryAwakeContainer getAqac() {
    return aqac;
}
/**设置awake容器*/
public void setAqac(IActionQueryAwakeContainer aqac) {
    this.aqac = aqac;
}

二.创建awake字段属性配置文件
在AdviceFirstAwake类的同级包下创建一个同名的AdviceFirstAwake.xml文件(名字和路径可以不同,不过这是一个良好的开发习惯),建立xml可以参照awake.jar包中的例子adviceFirstAwake.xml文件,adviceFirstAwake.xml文件在根目录下,adviceFirstAwake.xml文件中有注解可以帮助您完整配置。
AdviceFirstAwake类和AdviceFirstAwake.xml是一一对应的关系,AdviceFirstAwake类有两个功能 一是保存xml配置信息,二是唯一标示这个这个配置信息,通过AdviceFirstAwake.class.getName()在awake管理者中找到这个awake对象。

三.Hibernate在spring中配置相信大家都清楚了,如果不太了解spring的朋友可以参考awake.jar中applicationContext.xml文件进行配置,在applicationContext.xml文件中引入了
<import resource="classpath:struts-springContext.xml"/>在struts-springContext.xml文件中引入了<import resource="classpath:modules-springContext.xml"/>在这里主要介绍一下modules-springContext.xml和struts-springContext.xml文件。

modules-springContext.xml文件配置
<!--awake配置信息提供者-->
<bean id="adviceFirstAwakeProvider" class="syhy.awake.core.config.impl.Dom4jFileAwakeProvider">
    <constructor-arg>
      <value>adviceFirstAwake.xml</value>
    </constructor-arg>
</bean>
<!--awake配置信息管理者-->
<bean id="awakeManager" class="syhy.awake.core.config.impl.Dom4jAwakeManager"/>
   <!--awake配置信息接收者-->
<bean id="adviceFirstAwake" class=" syhy.modules.moot.advice.awake.AdviceFirstAwake"/>
   <!--awake数据信息解析器-->
<bean id="mapParse" class="syhy.awake.core.parse.query.MapDom4jQueryAwakeParse">
    <constructor-arg>
      <value>awake个人免费版</value>
    </constructor-arg>
</bean>
<!--awake查询工厂,通过查询工厂创建查询实例-->
<bean id="queryFactory" class="syhy.awake.hqlanalyze.Impl.QueryFactory"/>
   <!--执行管理者的addAwake方法,通过adviceFirstAwakeProvider向adviceFirstAwake添加配置信息,
   管理者可以同时管理多个awake配置信息,-->
<bean id="addAdviceFirstAwake" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
    <property name="targetObject">
      <ref bean="awakeManager"/>
    </property>
    <property name="targetMethod">
      <value>addAwake</value>
    </property>
    <property name="arguments">
      <list>
        <ref bean="adviceFirstAwake"/>
        <ref bean="adviceFirstAwakeProvider"/>
      </list>
    </property>
</bean>

<!--Awake基于hibernate的数据查询分页读取模块-->
<bean id="awakePersistenceImpl" class="syhy.awake.modules.query.persistence.AwakePersistenceImpl">
    <constructor-arg>
      <ref bean="hibernateOperations"/><!--applicationContext.xml中配置的hibernate模板-->
    </constructor-arg>
</bean>
<bean id="pageQueryMgrImpl" class="syhy.awake.modules.query.bslogic.AwakePageQueryMgrImpl">
    <constructor-arg>
      <ref local="awakePersistenceImpl"/>
    </constructor-arg>
</bean>

<!--awake模块容器,包含解析器查询工厂等模块-->
<bean id="actionQueryAwakeContainer" class="syhy.awake.action.query.ActionQueryAwakeContainer">
    <property name="pageQueryMgrImpl">
      <ref bean="pageQueryMgrImpl"/>
    </property>
    <property name="queryFactory">
      <ref bean="queryFactory"/>
    </property>
    <property name="awakeManager">
      <ref bean="awakeManager"/>
    </property>
    <property name="parse">
      <ref bean="mapParse"/>
    </property>
</bean>

struts-springContext.xml文件配置

<!--向action注入awake容器-->
<bean id="strutsQueryBaseAction" class="syhy.awake.action.query.StrutsQueryBaseAction">
    <property name="aqac">
      <ref bean="actionQueryAwakeContainer"/>
    </property>
</bean>
<!--此配置与awake无关,由于struts1的action是线程不安全的,通过spring使action线程安全,bean name与struts-config.xml中的action对应-->
    <bean name="/jsp/demo/query/preQuery" class="syhy.strutsweb.commons.example.actions.SimpleAction" parent="strutsQueryBaseAction"/>
    <bean name="/jsp/demo/query/queryFormSubmit" class="syhy.strutsweb.commons.example.actions.SimpleAction" parent="strutsQueryBaseAction"/>

Awake集成完成了,简单吧这要归功于spring 哦!!!,
下面就是action开发了,想要查询什么显示什么还得您自己写,awake可不能全帮您干了。
集成完了awake,开发一个查询或统计也就用十分钟,当然hql您得先想好了。

四.在实现了接口IQueryBaseAction的action中创建控制层方法,调用awake Hql解析器等几大模块,得到想要展现的数据。下面是struts1中的实现。
/** 预查询,配置通用查询页面中的查询项,连接到通用查询页面 */
public ActionForward preQuery(ActionMapping mapping, ActionForm form,
                                HttpServletRequest request,
                                HttpServletResponse response) throws Exception {
//得到解析器
    IDom4jQueryAwakeParse parse = (IDom4jQueryAwakeParse)this.getAqac().getParse(
        AdviceFirstAwake.class.getName());
//得到通用查询页面中需要的数据,并存放到request中
QueryActionTools.queryPageConfig(request, Advice.class, parse);
    return mapping.findForward(mapping.getParameter());//转向通用查询页面
}
/**通用查询页面,查询提交,返回列表*/
public ActionForward queryFormSubmit(ActionMapping mapping, ActionForm form,HttpServletRequest request,
HttpServletResponse response) {
String forward = mapping.getParameter();
try {
PageBean pageBean = (PageBean)((DynaValidatorForm)form).get("pageBean");
String strHql="select advice from "+Advice.class.getName() as advice";//hql头部语句,where之前的部分
//得到查询工厂,通过AdviceFirstAwake.class.getName()为工厂配置了awake配置信息AdviceFirstAwake.xml
IQueryFactory queryFactory = this.getAqac().getQueryFactory(AdviceFirstAwake.class.getName());
//通过查询工厂创建一个包含hql头部语句的查询实例
IQueryEntityHql queryEntityHql = queryFactory.creatQueryEntityHql(strHql);
//为实例设置查询条件,首个查询条件查询关系为空字符(与或关系),条件字段,查询逻辑(<),条件值
queryEntityHql.addQueryProperty(IQueryProperty.CONNECTION_IS_NULL,"advice.datReceiveDate",IQueryProperty.QUERY_LOGIC_LESS,"2009-6-6");
//为查询实例批量设置查询条件,查询条件来自查询页面
queryEntityHql.addQueryPropertys(((QueryPropertyBeans)((DynaValidatorForm) form).get("queryPropertyBeans")).queryFormToAddendumQueryPropertys(queryFactory));
//查询总数的Hql头部语句
String hqlCountHead = "select count(distinct advice) from " + Advice.class.getName() +" as advice ";
//调用awake数据查询读取模块,读取数据,数据存储在pagebean中
pageBean = super.getAqac().getPageQueryMgrImpl().findDtos(pageBean,queryEntityHql, hqlCountHead);
//得到awake数据解析器
IDom4jQueryAwakeParse parse = (IDom4jQueryAwakeParse)super.getAqac().getParse(AdviceFirstAwake.class.getName());
//通过解析器转换数据转换为通用列表可识别的数据格式,并存储到request中
QueryActionTools.listParseMap(request,pageBean.getDataList(), parse,Advice.class);
//保存pageBean信息
((DynaValidatorForm)form).set("pageBean",pageBean);
request.setAttribute("pageForm", form);
}
catch (Exception e) {
e.printStackTrace();
request.setAttribute("error", "查询异常错误,请与管理员联系");
forward = "error";
}
return mapping.findForward(forward);
}
}
不要忘了在struts-config.xml中配置action和actionform哦!!!
<form-bean name="queryPropertyForm" type="org.apache.struts.validator.DynaValidatorForm">
     <form-property name="queryPropertyBeans"   type="syhy.awake.action.query.beans.QueryPropertyBeans"/>
     <form-property name="pageBean"   type="syhy.awake.modules.query.PageBean"/>
</form-bean>
PageBean的每页条数属性pagesize默认是100,在struts1配置form时遇到点问题,不能设置PageBean中的属性,set每页显示条数
有两种解决办法:
1. 在action中pageBean. setPageSize(50)。(不好,每个action都得设)
2. 继承PageBean,在构造函数中设置。(还可以)
不知道大家有什么更好的办法,如果有请与我联系哦
在struts2中就没有这个问题了,可以通过注入解决这个问题
差点忘了还有validator数据验证没配,demo中有例子

 类似资料: