OpenJWeb数据库API--非常简单实用的SSH数据库API接口

OpenJWeb快速开发平台

数据库API二次开发手册

 

一前言.... 2

二、基于Hibernate模式的数据库API. 2

2.1 JSP页面中需导入的类... 2

2.2 增加及修改记录的实现... 2

2.3 删除记录... 3

2.4 查询所有记录... 3

2.5 条件查询... 4

2.6 selecthql语句... 4

2.7 分页查询... 4

2.8查询单一记录... 4

2.9 获取一个唯一数字... 5

三、基于纯SqlAPI. 5

3.1 删除记录... 5

3.2 增加记录... 5

3.3 修改记录... 5

3.4 查询记录... 5

四、基于声明式事务编程.... 7

 


 

前言

OpenJWeb平台的数据库API非常简洁、快速、高效。当用户安装好OpenJWeb环境以后,即使未获取OpenJWeb产品的注册码,也可以使用OpenJWeb的数据库API开发增删改查代码。

OpenJWeb的数据库API同时支持基于Hibernate模式和纯Sql模式,采用Spring的声明式事务管理,开发者不需要编写连接数据库、断开数据库、commitrollback等代码,支持异常回滚。

二、基于Hibernate模式的数据库API

2.1 JSP页面中需导入的类

 

<%@ pageimport="org.openjweb.core.service.*"%>

<%@ pageimport="org.openjweb.core.entity.*"%>

<%@ page import="org.openjweb.core.util.*"%>

<%@ page import="java.util.*"%>

 

 

注:在Java类中改为

import org.openjweb.core.service.*;

import org.openjweb.core.entity.*;

import org.openjweb.core.util.*;

import java.util.*;

 

 

2.2 增加及修改记录的实现

 

//首先声明一个Spring Bean,Bean是数据库增删改查操作的关键组件

IDBSupportService service =(IDBSupportService)ServiceLocator.getBean("IDBSupportService3");// IDBSupportService3openjweb中已配置好的数据库Bean

//下面新增一个用户表记录(comm._user表,对应org.openjweb.core.entity.CommUser实体类)

CommUser userEntity = new CommUser();

userEntity.setPkId(service.getSerial().toString());//生成一个数字格式的唯一值

userEntity.setUserId(service.getSerial());//一个长整型的唯一主键

userEntity.setRowId(StringUtil.getUUID());//生成一个32位的UUID字符串

userEntity.setLoginId("testopenjweb");//设置一个登陆帐号

userEntity.setUsername("张三");//设置用户名称

userEntity.setPassword("123456");//设置用户口令

userEntity.setUserEmail("testopenjweb@126.com");//设置用户的邮箱

service.saveOrUpdate(userEntity);//将新的用户信息保存到数据库中

 

执行以上操作后,数据库表comm_user中会新增一条记录,下面还可以取出这条记录修改保存(saveOrUpdate方法是同时适用于新增、保存的,如果数据库中存在主键相同的记录,用saveOrUpdate会执行修改操作,否则会执行新增操作)。

下面可通过查询语句查出刚才的记录,并修改姓名后保存:

CommUserqueryEnt = null;

try

{

       queryEnt =(CommUser)service.findSingleValueByHql("from CommUser whereloginId='testopenjweb'"); //需确保只有一个查询结果

       queryEnt.setUsername("张三111");

       service.saveOrUpdate(queryEnt); //修改名字后,保存到数据库

}

catch(Exceptionex)

{

       System.out.println("未找到用户!");

}

2.3 删除记录

下面删除上面增加的记录:

service.deleteById("org.openjweb.core.entity.CommUser","loginId","testopenjweb");

参数说明:

(1)       第一个参数为OpenJWeb中的实体类名,在Hibernate的映射文件中,此实体类对应comm_user表。

(2)       第二个参数指实体类中的一个字段,在Hibernate 映射文件中,loginId字段对应数据库表字段login_id

(3)       第三个参数指login_id字段匹配的值,即删除login_id=’testopenjweb’的记录。

2.4 查询所有记录

一次查询所有记录的情况比较少见,OpenJWeb通过findAll查询所有记录(不含查询条件);

代码如下:

List userList =service.findAll("org.openjweb.core.entity.CommUser");

System.out.println(userList.size());

2.5 条件查询

List queryUserList =service.findByHqlQuery("from CommUser where username is not null");

System.out.println(queryUserList.size());

说明:条件查询以from开头,类名可不带全路径名。

findListByFieldValue方法可用此方法替代。

 

2.6 selecthql语句

//查询第一页,每页10

List colList =service.findColPage("select loginId from CommUser where password is notnull",1,10);

if(colList!=null&&colList.size()>0)

{

       for(inti=0;i<colList.size();i++)

       {

              Objectobj = colList.get(i);

              System.out.println(obj.toString());

               

       }

}

 

说明:目前仅支持select中带一个字段,此方法用于查询单列结果集。

 

2.7 分页查询

findPage方法用于分页查询。代码如下:List list =service.findPage("org.openjweb.core.entity.CommUser", " whereloginId is not null order by loginId desc", 1,10);

参数说明:

(1)   第一个参数为实体类名

(2)   第二个参数为查询条件,可带order by, where 前注意加一个空格

(3)   第三个参数指需要查询第几页

(4)   第四个参数设置每页的行数

 

2.8查询单一记录

查询单一记录可使用下面的语句:

String sDate =service.findSingleValueByHql("select max(createDt) fromCommUser").toString();

System.out.println(sDate);

查询结果可以是单一字符串结果、数字或者单一实体类。见下面的代码:

CommUser singleEnt =(CommUser)service.findSingleValueByHql("from CommUser whereloginId='admin'");

System.out.println(singleEnt.getUsername());

 

2.9 获取一个唯一数字

获取一个针对当前Web应用的唯一数字,代码如下:

Long serialNo = service.getSerial();

System.out.println(serialNo);

 

三、基于纯SqlAPI

基于纯SqlAPI接口封装了SpringgetJdbcTemplate()方法。

示例:

IDBSupportService service =(IDBSupportService)ServiceLocator.getBean("IDBSupportService3");

 

3.1 删除记录

service.getJdbcTemplate().execute("deletefrom comm_user where login_id='abao888'");

 

3.2 增加记录

  service.getJdbcTemplate().execute("insertinto comm_user values(....)"); //不写具体sql字段了

3.3 修改记录

  service.getJdbcTemplate().execute("updatecomm_user set …."); //不写具体sql字段了

3.4 查询记录

l  3.4.1 查询字符串

String s1 = service.getJdbcTemplate().queryForObject("selectusername from comm_user where login_id='admin'",String.class).toString();

System.out.println(s1);

注意如果查询结果为空会报异常,所以上面的代码注意加try catch语句

 

l  3.4.2 查询数字

Object obj =service.getJdbcTemplate().queryForObject("select sum(order_amt) fromb2c_order_head where login_id is not null",Double.class);

System.out.println(obj.toString());

 

l  3.4.3 查询列表-Map

 

List sqlList =service.getJdbcTemplate().queryForList("select login_id,username fromcomm_user");

if(sqlList!=null&&sqlList.size()>0)

{

       for(inti=0;i<sqlList.size();i++)

       {

              Mapmap = (Map)sqlList.get(i);

              StringloginId = (String)map.get("LOGIN_ID");

              System.out.println(loginId);

              Stringusername = (String)map.get("USERNAME");

       System.out.println(username);

             

       }

}

 

说明:map.get(“参数名”)中的参数对应select语句的字段名或别名,对于oracle一般为大写,非oracle数据库为小写,例如对于mysql,应写成map.get(“login_id”);

 

l  3.4.4 查询列表-Hashtable

 

如果需要用Hashtable处理结果集,可使用HashtableRowMapper()将结果集转换为Hashtable,见下面代码:

System.out.println("使用Hashtable:");

List sqlList1 =service.getJdbcTemplate().query("select login_id,username,password fromcomm_user",new HashtableRowMapper());

if(sqlList1!=null&&sqlList1.size()>0)

{

       for(int i=0;i<sqlList1.size();i++)

       {

              Hashtable hst =(Hashtable)sqlList1.get(i);

              String loginId = (String)hst.get("LOGIN_ID");

              System.out.println(loginId);

              String username =(String)hst.get("USERNAME");

        System.out.println(username);

              String password =(String)hst.get("PASSWORD");

              System.out.println(password);

             

       }

}

 

注意:

(1)   返回结果的空值处理

(2)   对于oracle,Hashtable中的列名是大写,其他数据库一般是小写。

l  3.4.5 使用OpenJWebCodeNameBean

 

如果返回的结果集是名值对,可使用OpenJWebCodeNameBeanRowMapper,见下面代码:

System.out.println("使用CodeNameBean:");

 

List dictList  = (ArrayList)service.getJdbcTemplate().query("selectlogin_id,username  fromcomm_user",new CodeNameBeanRowMapper());

if(dictList!=null&&dictList.size()>0)

{

       for(inti=0;i<dictList.size();i++)

       {

              Stringcode="";

            Stringname="";

           code =((CodeNameBean)dictList.get(i)).getCode().toString();

           name = ((CodeNameBean)dictList.get(i)).getName().toString();

              System.out.println(code+"---"+name);

             

       }

}

 

四、基于声明式事务编程

    OpenJWeb使用Spring的声明式事务,所以OpenJWeb的数据库API中没有连接数据库、断开数据库、commitrollback等代码。OpenJWeb中的业务逻辑组件都配置了事务拦截器,所以在业务逻辑接口的实现类中编写的代码自动支持数据库事务,如果执行出现异常,会自动回滚事务。

OpenJWeb配置业务逻辑组件的xmlD:\project\openjweb\src\java\core-service-demo.xml,编译代码后,此文件会复制到WEB-INF\classes目录。

以订单业务对象为例,下面是关于订单处理的业务逻辑组件配置:

 

    <beanid="IB2cOrderHeadService" parent="txProxyTemplate1">

        <propertyname="target">

            <bean class="com.openjweb.b2c.service.impl.B2cOrderHeadServiceImpl">

                <propertyname="dbService" value="IDBSupportService3"/>

            </bean>

        </property>

    </bean>

组件IB2cOrderHeadService配置了事务拦截器,即txProxyTemplate1,对应的业务逻辑接口为com.openjweb.b2c.service.IB2cOrderHeadService,实现类com.openjweb.b2c.service.impl.B2cOrderHeadServiceImpl

调用订单业务逻辑的过程:

//首先声明业务逻辑组件

IB2cOrderHeadService bizService =(IB2cOrderHeadService)ServiceLocator.getBean("IB2cOrderHeadService");

      

//构造订单主表记录MasterEnt,子表记录DetailEnts等,然后调用业务逻辑接口的saveOrder方法,因为IB2cOrderHeadService配置了事务拦截器,所以其实现类B2cOrderHeadServiceImpl.java类中的saveOrder支持事务处理,此方法实现订单主表、明细表插入和扣减会员的累计消费额变更,这些操作都在一个数据库事务中处理,如果saveOrder中出现异常,整个事务回滚。

 

bizService.saveOrder(masterEnt,detailEnts, currencyType, useType, isCheckBalance, request);

 

下面是B2cOrderHeadServiceImpl的代码,供开发参考:

package com.openjweb.b2c.service.impl;

 

import java.util.List;

 

import javax.servlet.http.HttpServletRequest;

 

import org.apache.log4j.Logger;

import org.openjweb.core.entity.CommUser;

import org.openjweb.core.entity.CommUserBalance;

import org.openjweb.core.service.IDBSupportService;

import org.openjweb.core.service.ServiceLocator;

importorg.springframework.security.context.SecurityContextHolder;

import org.openjweb.core.service.BaseMasterDetailService;

import org.openjweb.core.util.StringUtil;

 

import com.openjweb.b2c.entity.B2cOrderDetail;

import com.openjweb.b2c.entity.B2cOrderHead;

import com.openjweb.b2c.service.IB2cOrderHeadService;

 

publicclass B2cOrderHeadServiceImpl extends BaseMasterDetailService implementsIB2cOrderHeadService

{

    privatestaticfinal Logger logger = Logger.getLogger(B2cOrderHeadServiceImpl.class);

 

    publicvoid saveOrder(B2cOrderHeadmasterEnt, List<B2cOrderDetail> detailEnts, String currencyType,StringuseType,String isCheckBalance,HttpServletRequest request) throws Exception

    {

       logger.info("开始存储订单..........");

       IDBSupportService service = (IDBSupportService)ServiceLocator.getBean("IDBSupportService3");

       if(detailEnts!=null&&detailEnts.size()>0)

       {

           for(int i=0;i<detailEnts.size();i++)

           {

              B2cOrderDetail detailEnt = (B2cOrderDetail)detailEnts.get(i);

              service.saveOrUpdate(detailEnt);

           }

           masterEnt.setCreateDt(StringUtil.getCurrentDateTime());

           masterEnt.setUpdateDt(masterEnt.getUpdateDt());

           masterEnt.setCreateUid(masterEnt.getLoginId());

           masterEnt.setUpdateUid(masterEnt.getUpdateUid());

           masterEnt.setOrderDt(StringUtil.getCurrentDateTime());

           if(masterEnt.getReceiverName()==null||masterEnt.getReceiverName().trim().length()==0)

           {

              //materEnt.

           }

           service.saveOrUpdate(masterEnt);

           if("Y".equals(isCheckBalance))

           {

              //如果考虑网站资金余额

              CommUserBalance ent =(CommUserBalance)service.findSingleValueByHql("from CommUserBalance where loginId='"

                     +masterEnt.getLoginId()+"' and useType='"+useType+"' and currencyType='"+currencyType+"'");

 

                DoublebalanceAmt = ent.getBalanceAmt()==null?new Double(0):ent.getBalanceAmt();

               DoubleconsumeAmt = ent.getSumUseAmt()==null?new Double(0):ent.getSumUseAmt();

               //

              ent.setBalanceAmt(balanceAmt - masterEnt.getOrderAmt());//减少余额

              ent.setSumUseAmt(consumeAmt+masterEnt.getOrderAmt());//增加累计消费额

               service.saveOrUpdate(ent);

              

           }

          

       }

       logger.info("订单存储完毕................");

 

    }

}

 

 

OpenJWeb开发组

联系人:王先生 18600510596

QQ:29803446

Email:29803446@163.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值