UDN-企业互联网技术人气社区

板块导航

浏览  : 1631
回复  : 0

[移动平台] UAP Mobile数据持久化哪些事【上篇:标准版MAServe】

[复制链接]
piu~piu~臭的头像 楼主
拿到UAP Mobile做演示案例或者尝试学习,都想建个库表,移动端连接个后台数据库,piu~piu~臭做了个简单的演示demo,供参考~~
本贴针对标准版MAServer balabal~
针对版本:UAPMobile_2.7.20150918
标准MAServer,或者称为 Light MAServer,是一个精简版的MAServer,没有使用UAP作为底层开发平台,目前仅仅是嵌入到UAP Mobile Studio中,功能较为简单。
(一)内置hsqldb
标准版MAServer内置了hsqldb数据库,在UAP培训部出的案例maserverDemo【案例参考活动贴中网盘:http://udn.yyuap.com/thread-61519-1-1.html】 就是直接使用的Mobile Srudio内置的hsqldb数据库:
maserverDemo案例.png

那么问题来了:
1.     hsqldb内置在哪里?
答曰:【UAPMobile_2.7.20150918\MOB\ump_server\hsqldb】
hsqldb内置位置.png
2.     启动了哪个数据库?
这个问题还需要看一下启动标准版MAServer时控制台给出的提示
标准MA启动提示.png

控制台提示,成功启动了alias=test的数据库,并且占用9001的端口
确实,平台在启动标准MA Server的时候,就默认启动了test数据库,而且DBFactroy.getConnection()接口默认就是使用test数据库。
3.     默认配置test数据库,配置的地方在哪里?
这个问题还要追溯到标准MA启动时的【调试配置】
标准MA调试配置.png

反编译~debug~会看到默认的配置是在\UAPMobile_2.7.20150918\MOB\ump_server\hotwebs\umserver\WEB-INF\web.xml文件中配置好的,截取一段web.xml的内容:
  
<!-- 设置上下文变量 -->
  
      <context-param>
  
             <param-name>hsql.dbPath</param-name>
  
             <param-value>/WEB-INF/hsqldb/data</param-value>
  
      </context-param>
  
  
      <context-param>
  
             <param-name>hsql.dbName</param-name>
  
             <param-value>test</param-value>
  
      </context-param>
  
  
      <context-param>
  
             <param-name>hsql.port</param-name>
  
             <param-value>9001</param-value>
  
       </context-param>
  
(二)其他类型数据库
  平台内置了hsqldb,是否支持其他类型的数据库呢?回答是:支持
  目前支持:Mysql、oracle、postgresql【本案例以postgresql为例】
那么问题又来了,怎么使用呢?
1.     配置文件:dbConfig.properties
\UAPMobile_2.7.20150918\MOB\ump_server\config
  
jdbcUrl=jdbc:postgresql://localhost:5432/standarDB
  
user=postgres
  
password=123456
  
driverClass=org.postgresql.Driver
  
maxPoolSize=100
  
minPoolSize=10
  
initialPoolSize=10
  
maxIdleTime=1800
  
acquireIncrement=3
  
2.     VO必须继承SuperVO
  
package com.yyuap.standard.vo;
  
import com.yonyou.um.plugins.persist.SuperVO;
  
import com.yonyou.um.plugins.persist.TableName;
  
  
@TableName(tableName = "userenterprise", primaryKey = "id")
  
public class UserVO extends SuperVO<UserVO> {
  
   private static final long serialVersionUID =  6151251954804424983L;
  
   private int id;
  
   private String stuid;
  
   private String name;
  
   private String sex;
  
   private int age;
  
   private float score;
  
   public int getId() {
  
      return id;
  
   }
  
   public void setId(int id) {
  
      this.id = id;
  
   }
  
   public String getStuid() {
  
      return stuid;
  
   }
  
   public void setStuid(String stuid) {
  
      this.stuid = stuid;
  
   }
  
   public String getName() {
  
      return name;
  
   }
  
   public void setName(String name) {
  
      this.name = name;
  
   }
  
   public String getSex() {
  
      return sex;
  
   }
  
  
   public void setSex(String sex) {
  
      this.sex = sex;
  
   }
  
   public int getAge() {
  
      return age;
  
   }
  
   public void setAge(int age) {
  
      this.age = age;
  
   }
  
   public float getScore() {
  
      return score;
  
   }
  
   public void setScore(float score) {
  
      this.score = score;
  
   }
  
}
  
3.     CRUD接口
  
/**
  
     * 查询
  
     */
  
    public  List<UserVO> findUser(String condition) {
  
       //  TODO 自动生成的方法存根
  
       String  strwhere = "";
  
       List<UserVO>  users = null;
  
       UserVO  user = new UserVO();
  
       if  (condition != null && !"".equals(condition))  {
  
           strwhere  = "select * from userenterprise where name like  '%"
  
                  +  condition + "%' or stuID like '%" + condition + "%'";
  
  
       }  else {
  
           strwhere  = "select * from userenterprise ";
  
       }
  
       users  = (List<UserVO>) user.find(strwhere);
  
  
       return  users.size() == 0 ? null : users;
  
    }
  
  
    /**
  
     * 删除
  
     */
  
    public boolean  deleteUser(UserVO user) {
  
       Boolean  flag = user.delete();
  
       return  flag;
  
  
    }
  
  
    /**
  
     * 插入
  
     */
  
    public boolean  insertUser(UserVO user) {
  
       Boolean  flag = user.save();
  
       return  flag;
  
    }
  
  
    /**
  
     * 更新
  
     */
  
    public boolean  updateUser(UserVO user) {
  
       Boolean  flag = user.update();
  
       return  flag;
  
    }
  
注意
1.       VO属性set value的时候,比如id字段,使用setId是不能将值set到VO的,需要
  
        UserVO user = new  UserVO();
  
       user.set("stuid",  stuID);
  
       user.set("name",  name);
  
       user.set("sex",  sex);
  
       user.set("age",  age);
  
       user.set("score",  score);
  
2.       使用SuperVO的删除、更新API的时候,会发现总是报空指针的错误,其实是SuperVO.delete() 和SuperVO.update()会走Db.java下update(PersistConfigconfig, Connection conn, String sql, Object... paras)方法,但是Db的init方法没有执行,导致pro为null【开发部那边再修正】,所以使用SuperVO的方式,目前版本需要手工执行一下Db.init()
  
public class Db  {
  
   
  
    private static  DbPro pro = null;
  
   
  
    static void  init() {
  
       pro = DbPro.use();
  
    }   
  
  
static int  update(PersistConfig config, Connection conn, String sql, Object... paras) throws  SQLException {
  
       return pro.update(config,  conn, sql, paras);
  
    }
  
}
  
(三)不使用SuperVO做持久化
      平台也是支持的,详细参见UDN贴:
http://udn.yyuap.com/thread-8922-1-1.html
(四)其他
·关于标准MA的具体开发可以参考附件案例~【案例附件是postgresql的建库、建表脚本以及dbConfig.properties文件】
·标准MA的其他功能:日志、filter功能,引用开发部给的资料
1.       日志:使用的是log4j技术来实现,配置文件的位置为\config\log4j.properties文件,配置文件的内容与普通的log4j配置信息相同,主要使用的记录方式如下:
ILogger logger = UMLogger.getLogger("umserver");
支持的有debug、all、info、error、warn级别,日志文件为umsever.log
2.       异常处理机制,这里的异常处理通用的类为render类。
已经封装到了umcontroller中,具体使用的时候直接使用renderJson方法即可。并利用责任链模式来处理异常信息,目前的异常处理类只有一个com.yonyou.um.web.exception.DefaultExceptionResolver。
3.       filter的实现机制
   目前filter机制支持在执行服务之前和结果响应之前进行过滤处理,具体的配置文件为,配置文件放在MOB\ump_server\configure\appid编码\mafilter.xml
<?xmlversion="1.0" encoding="UTF-8"?>
<mafilter>
   <request-filter>
      <filter id="filter3"class="com.yonyou.uap.um.filter.ServiceFirst Filter" />
      <filter id="filter4"class="com.yonyou.uap.um.filter.ServiceSecon dFilter" />
   </request-filter>
   <response-filter>
     <filterid="filter5"class="com.yonyou.uap.um.filter.ServiceFirstFil ter"/>
    <filterid="filter6"class="com.yonyou.uap.um.filter.ServiceSecondFi lter"/>
   </response-filter>
</mafilter>

其中request-filter表示的是在执行之前进行校验,参数为HttpServletRequest和传入的请求数据JSONObject。
response-filter表示的是在结果返回之后进行过滤处理,参数为httpservletResponse和返回的结果值Object。


标准版支持的数据库类型.png

StandardMADemo.rar

654.54 KB, 下载次数: 5

相关帖子

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部