Mybatis 调用 Oracle 过程整理

本贴最后更新于 2039 天前,其中的信息可能已经斗转星移

目标

  1. 通过 mybatis 获取最大业务号码
  2. 采用 oracle 数据库,通过序列方式
  3. 传入自定义序列参数,如有已有序列,则使用序列;如无则创建序列

创建过程

CREATE OR REPLACE PROCEDURE CREATEMAXNO (NOTYPE IN VARCHAR2, NOLIMIT IN VARCHAR2, SEQ OUT VARCHAR2) Authid Current_User AS GetNoSql varchar(200); BEGIN dbms_output.put_line('输入:'||NOTYPE||','||NOLIMIT); GetNoSql := 'select SEQ_'||NOTYPE||'_'||NOLIMIT||'.nextval from dual'; execute immediate GetNoSql into SEQ; EXCEPTION WHEN OTHERS THEN execute immediate 'create sequence SEQ_'||NOTYPE||'_'||NOLIMIT||' minvalue 1 maxvalue 99999999999999999999 start with 1 increment by 1 nocache'; execute immediate GetNoSql into SEQ; END;
  1. dbms_output.put_line(),控制台输出
  2. execute immediate GetNoSql into SEQ,动态修改 sql 语句,并将结果输出到 SEQ 中
  3. 当前序列不存在时,进入 EXCEPTION,然后创建序列,再查询序列

Java 代码

实体类

public class MaxNo extends DataEntity<MaxNo> { private static final long serialVersionUID = 1L; private String noType; private String noLimit; private String maxNo; public MaxNo() { } public MaxNo(String noType, String noLimit) { this.noType = noType; this.noLimit = noLimit; } public String getNoType() { return noType; } public void setNoType(String noType) { this.noType = noType; } public String getNoLimit() { return noLimit; } public void setNoLimit(String noLimit) { this.noLimit = noLimit; } public String getMaxNo() { return maxNo; } public void setMaxNo(String maxNo) { this.maxNo = maxNo; } }

mybatisDAO

@MyBatisDao public interface MaxNoDao extends CrudDao<MaxNo> { void createMaxNo(MaxNo tMaxNo); } --- <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="xxx.dao.MaxNoDao"> <select id="createMaxNo" parameterType="xxx.entity.MaxNo" statementType="CALLABLE"> {call createmaxno(#{noType,mode=IN},#{noLimit,mode=IN},#{maxNo,mode=OUT,jdbcType=CHAR}) </select> </mapper>
  1. 无返回对象,序列将会被赋值在 MaxNo.manNo 上
  2. 输出值需要配置数据类型,jdbcType=CHAR

使用

/** * 通过表+function实现 * * @param cNoType * @param cNoLength * @return */ public String CreateMaxNo(String cNoType, int cNoLength) { if ((cNoType == null) || (cNoType.trim().length() <= 0) || (cNoLength <= 0)) { logger.error("NoType长度错误或NoLength错误"); return null; } cNoType = cNoType.toUpperCase(); BigInteger tMaxNo ; try { MaxNo maxNo = new MaxNo(cNoType,"SN"); maxNoDao.createMaxNo(maxNo); tMaxNo = new BigInteger(maxNo.getMaxNo()); } catch (Exception Ex) { logger.error(Ex); return null; } return PubFun.LCh(tMaxNo.toString(), "0", cNoLength); }
  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    173 引用 • 414 回帖 • 367 关注
  • Oracle

    Oracle(甲骨文)公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989 年正式进入中国市场。2013 年,甲骨文已超越 IBM,成为继 Microsoft 后全球第二大软件公司。

    107 引用 • 127 回帖 • 338 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...