oracle 定制版,Mybatis Generator Oracle 定制版详细

源码位置在GitHub上pnoker/mybatisGenerator,Oracle分支,其中详细讲解了如何部署maven工程和如何进行项目代码修改以,https://github.com/pnoker/mybatisGenerator/tree/Oracle

mybatis gererator 针对 Oracle 定制,实现分页,ID自增,返回ID等功能。

主要针对Oracle数据库定制,添加功能列表如下:分页

自增

返回自增ID

添加分页功能

1 修改Mapping文件(文件位置:srcmainjavaorgmybatisgeneratorcodegenmybatis3xmlmapperelements)SelectByExampleWithBLOBsElementGenerator.java

SelectByExampleWithoutBLOBsElementGenerator.java

1.1 添加内容以SelectByExampleWithBLOBsElementGenerator.java文件为例,SelectByExampleWithoutBLOBsElementGenerator.java文件的修改相同:

#48行,请参考具体文件内容

XmlElement ifElement = new XmlElement("if");

ifElement.addAttribute(new Attribute("test", "start != 0 or limit != 0"));

ifElement.addElement(new TextElement("select * from ( select * from ( select ROWNUM as RN , A.* from ("));

#85行,请参考具体文件内容

ifElement = new XmlElement("if");

ifElement.addAttribute(new Attribute("test", "start != 0 or limit != 0"));

ifElement.addElement(new TextElement(") A ) B where B.RN <= #{limit} ) C where C.RN > #{start}"));

answer.addElement(ifElement);

1.2 生成Mapping.xml文件中select语句为:

select * from ( select * from ( select ROWNUM as RN , A.* from (

select

distinct

'true' as QUERYID,

from EMP_ALERM

order by ${orderByClause}

) A ) B where B.RN <= #{limit} ) C where C.RN > #{start}

2 修改model文件(文件位置:srcmainjavaorgmybatisgeneratorcodegenmybatis3model)ExampleGenerator.java

2.1 添加构造方法public XxxExample(int start, int limit)

#73行,请参考具体文件内容

method = new Method();

method.setVisibility(JavaVisibility.PUBLIC);

method.setConstructor(true);

method.setName(type.getShortName());

method.addParameter(new Parameter(FullyQualifiedJavaType

.getIntInstance(), "start"));

method.addParameter(new Parameter(FullyQualifiedJavaType

.getIntInstance(), "limit"));

method.addBodyLine("this.start = start;n" +

" this.limit = limit;n" +

" oredCriteria = new ArrayList();");

commentGenerator.addGeneralMethodComment(method, introspectedTable);

topLevelClass.addMethod(method);

2.2 添加参数:protected int start; 和 protected int limit;

#140行,请参考具体文件内容

field = new Field();

field.setVisibility(JavaVisibility.PROTECTED);

field.setType(FullyQualifiedJavaType.getIntInstance());

field.setName("start");

commentGenerator.addFieldComment(field, introspectedTable);

topLevelClass.addField(field);

field = new Field();

field.setVisibility(JavaVisibility.PROTECTED);

field.setType(FullyQualifiedJavaType.getIntInstance());

field.setName("limit");

commentGenerator.addFieldComment(field, introspectedTable);

topLevelClass.addField(field);

2.3 生成Model文件中内容为,和上面的select语句中的start、limit关联上了:

...

protected int start;

protected int limit;

protected List oredCriteria;

public AlgoExample() {

oredCriteria = new ArrayList();

}

public AlgoExample(int start, int limit) {

this.start = start;

this.limit = limit;

oredCriteria = new ArrayList();

}

...

添加自增功能

Oracle数据库同SQL Server 、MySQL等数据库不一样,不能直接设置某个字段为自增的,需要手动创建序列(Sequence)和触发器(Trigger),实现列的自增

由于是使用Mybatis操作Oracle数据库,所以在进行建表的时候只需要建立序列(Sequence)就行,触发器(Trigger)不用创建,触发器的创建将整合到Mybatis Mapping文件中去,详情如下:

1 修改generatorConfig.xml文件(文件位置:为Mybatis Generator的配置文件)

说明:Oracle中对大小写不敏感,小写一律会自动变成大写字母的generatorConfig.xml

enableUpdateByExample="true" enableDeleteByExample="true"

enableSelectByExample="true" selectByExampleQueryId="true">

[注] ALGO_SEQ_ID为表EMP_ALGO的序列(Sequence)名称,务必保持一致建表 - > EMP_ALGO

CREATE TABLE EMP_ALGO

(

id NUMBER(11) NOT NULL,

name VARCHAR2(32),

path VARCHAR2(64),

param CLOB,

description VARCHAR2(64),

at_time TIMESTAMP(6)

)

TABLESPACE EMP

PCTFREE 10

INITRANS 1

MAXTRANS 255

STORAGE

(

INITIAL 64K

MINEXTENTS 1

MAXEXTENTS UNLIMITED

);

ALTER TABLE EMP_ALGO

ADD CONSTRAINT EMP_ALGO_PK PRIMARY KEY (ID)

USING INDEX

TABLESPACE EMP

PCTFREE 10

INITRANS 2

MAXTRANS 255

STORAGE

(

INITIAL 64K

MINEXTENTS 1

MAXEXTENTS UNLIMITED

);创建序列(Sequence) - > ALGO_SEQ_ID

CREATE SEQUENCE ALGO_SEQ_ID

MINVALUE 1

MAXVALUE 9999999999999999999999999999

START WITH 1

INCREMENT BY 1

CACHE 20;

2 生成Mapping.xml文件中insert和nsertSelective(此处省)语句为:

SELECT ALGO_SEQ_ID.nextval AS id FROM DUAL

insert into EMP_ALGO (ID, NAME, PATH,

DESCRIPTION, AT_TIME, PARAM

)

values (#{id,jdbcType=DECIMAL}, #{name,jdbcType=VARCHAR}, #{path,jdbcType=VARCHAR},

#{description,jdbcType=VARCHAR}, #{atTime,jdbcType=TIMESTAMP}, #{param,jdbcType=CLOB}

)

获取自增后返回的ID

Algo algo = new Algo();

...

//不用setId(xxx),插表操作后会自动返回ID

algo.setName("xxx");

algo.setAtTime(new Date());

...

algoService.insertSelective(algo);

//获取返回的ID,直接getID()即可

logger.info("自增后ID为:" + algo.getId());

重要

推荐工具:git、idea

1.如何导入该工程

Clone该工程到项目文件夹下

git clone https://github.com/pnoker/mybatisGenerator.git

idea导入maven

File -> New -> Project From Existing Sources -> 选择mybatisGenerator

选择自动导入依赖的jar

2.如何生成mybatis-generator-core-oracle.jar和mybatis-generator-core-oracle-sources.jar

在IDE上修改完代码后,在项目根目录下命令行执行:mvn inseall,当出错时使用:mvn clean进行清空, mvn inseall之后,会在target文件下生成两个jar包:mybatis-generator-core-oracle-1.3.6.jar,需要使用的jar

mybatis-generator-core-oracle-1.3.6-sources.jar,源码

3.如何生成Dao、Model、Mapping

java -jar src/main/webapp/WEB-INF/lib/mybatis-generator-core-oracle-1.3.6.jar -configfile generatorConfig.xml -overwrite

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值