我们项目在公司的大战略下需要从oracle迁移到mysql,我们的项目使用的是ibatis,在ibatis层上需要的一些修改点如下:单元测试框架我们用的是jtester。
1. 插入主键生成 Oracle insert时主键id是使用sequence方式: <insert id="MS-BRANDMEMBER-INSERT" parameterClass="TA-brandMember"> <selectKey resultClass="long" keyProperty="id"> SELECT seq_industry_brand_member.nextval FROM DUAL </selectKey> insert into industry_brand_member (id, gmt_create, gmt_modified, member_id, bu, active, brand_id, cat_ids, auth_date_from, auth_date_to, auth_level, area, status, operator, original) values (#id#, sysdate, sysdate, #memberId#, #mallId#, #active#, #brandId#, #catIds#, #authDateFrom#, #authDateTo#, #authLevel#, #area#, #status#, #operator#, #original#) </insert> mysql需要修改为: <insert id="MS-BRANDMEMBER-INSERT" parameterClass="TA-brandMember"> insert into industry_brand_member (gmt_create, gmt_modified, member_id, mall_id, active, brand_id, cat_ids, auth_date_from, auth_date_to, auth_level, area, status, operator, original) values (now(), now(), #memberId#, #mallId#, #active#, #brandId#, #catIds#, #authDateFrom#, #authDateTo#, #authLevel#, #area#, #status#, #operator#, #original#) <selectKey resultClass="java.lang.Long" keyProperty="id"> SELECT LAST_INSERT_ID() AS ID </selectKey> </insert> 2. 分页 Oracle采用三层嵌套的分页方式,用的是偏移量的最小值和最大值获取分页内容: <select id="SELECT-BRANDIDLIST-BY-MALLID" resultClass="long" parameterClass="java.util.Map"> select brandId from(select brandId,rownum as no from(select distinct(brand_id) as brandId from industry_brand_member where <isNotNull property="mallId"> bu = #mallId:VARCHAR# AND </isNotNull> <isNotNull property="status"> status=#status:VARCHAR# AND </isNotNull> brand_id is not null order by brand_id asc)) <![CDATA[ where no>=#start# and no<#end# ]]> </select> Mysql分页采用limit,offset语法,使用偏移量和每页条数 <select id="SELECT-BRANDIDLIST-BY-MALLID" resultClass="long" parameterClass="java.util.Map"> select distinct(brand_id) as brandId from industry_brand_member where <isNotNull property="mallId"> mall_id = #mallId:VARCHAR# AND </isNotNull> <isNotNull property="status"> status=#status:VARCHAR# AND </isNotNull> brand_id is not null order by brand_id asc limit #start#,#pageSize# </select> 3. 日期函数 Oracle与mysql的日期API还是有很大差异的,对于日期的操作需要全部检查一遍。我们只用到下面三个日期的方法: Oracle Mysql 功能 to_char(last_offer_paytime,'yyyy/MM/dd') date_format(last_offer_paytime,'%Y/%m/%d') 日期转为字符串 to_date(#searchDate#, 'yyyy/MM/dd') str_to_date(#searchDate#, '%Y/%m/%d') 字符串转为日期 to_date(#searchDate#, 'yyyy/MM/dd') + 1 date_add(str_to_date(#searchDate#, '%Y/%m/%d'),interval 1 day) 日期相加 4. 质量保证 可能大部分sql都会做或多或少的修改,如何保证质量,我们这边对每个sql都做了单元测试,之前可能一些没做的也全部补起来了,辛苦袁飞,程达做了很充分的单元测试,极大的保证了迁移质量,甚至发现了原来隐藏的一些问题。对于迁移来说,单元测试是最好的质量保证方法。 使用jtester封装的DbFit来做DAO的单元测试 @Test @DbFit(when="wiki/sampleshow/BuyerDAO.insert.when.wiki", then="wiki/sampleshow/BuyerDAO.insert.then.wiki") public void TestInsertSampleShowBuyer() { SampleShowBuyer SampleShowBuyer = new SampleShowBuyer(); SampleShowBuyer.setMemberId("yanhandle"); SampleShowBuyer.setPhoneNumber("13512345678"); Long id = sampleShowBuyerDAO.insertSampleShowBuyer(SampleShowBuyer); want.object(id).notNull(); want.number(id).greaterThan(0l); } 单元测试的工作量占了去O工作量的2/3,平均每个表需要0.8人日,当然这个还要看sql的数量和复杂度。建议还是需要做单元测试来保证质量。 5. 数据类型的差异,建表通过idb就可以完成。不过brand有一个配置字段用到了Oracle的CLOB类型,mysql则需要使用text类型。
相关推荐
数据库迁移是IT领域中常见的任务,它涉及到将数据和应用程序从一个数据库系统迁移到另一个系统。本篇文章将探讨从SQL Server迁移到MySQL的过程,以及Oracle、SQL Server和MySQL之间的主要区别,这对于理解数据库管理...
本文主要探讨的是数据库迁移的过程以及Oracle、SQL Server、MySQL这三种常见数据库之间的差异。在进行数据库迁移时,通常涉及以下几个关键步骤: 1. **数据库建表脚本的修改**: - 数据类型转换:由于不同数据库的...
本文档将深入探讨如何在IBATIS框架下连接和管理多个数据库,以便于在不同环境中灵活切换或同时操作多个数据源。 IBATIS是一个流行的Java和.NET平台上的数据访问层解决方案,它允许开发者编写SQL语句并与对象模型...
比如,对于MySQL,可以使用`LIMIT`和`OFFSET`,而对于Oracle,可能需要使用`ROWNUM`。 3. **参数传递**:在Java代码中创建一个封装分页参数的Java对象,如Page对象,包含当前页数、每页记录数等信息。然后将这个...
在开发过程中,我们常常需要处理各种不同格式的 SQL 语句,例如,从 Oracle 数据库迁移到 MySQL 或是统一不同开发人员的 SQL 风格。这时,一个高效的 SQL 转换工具就显得尤为重要。项目组自行编写的 "[iBATIS]sql...
标题 "根据mybatis/ibatis sqlmapper文件解析生成数据库表" 暗示了我们将会探讨一个关于MyBatis或iBatis框架的工具,它能够解析SQL映射文件并根据这些文件自动生成数据库表。这个过程对于快速构建数据库模型,尤其是...
此外,iBATIS支持多种数据库,如MySQL、Oracle、SQL Server等,只需在配置文件中更改数据库连接信息,就能实现跨数据库平台的迁移。 《iBATIS-SqlMaps-2_cn.pdf》和《iBATIS-SqlMaps-2-Tutorial_cn.pdf》这两份文档...
- 结果映射用于将数据库返回的结果集映射到Java对象上。 - **3.4.1 扩展结果映射** - 可以通过继承现有结果映射来创建新的结果映射。 - **3.4.2 parameterMap属性** - 在结果映射中引用参数映射。 - **3.4.3 ...
2. **简化开发工作**:通过封装底层JDBC API的调用细节,Ibatis能够自动将数据库查询结果转换为Java Bean对象,从而极大地减少了开发者在处理数据库操作时所需编写的代码量。 3. **易学易用**:Ibatis的学习曲线较为...
9. **数据库存储**:在物理层,除了Oracle,还引入了OceanBase和MySQL等其他数据库,通过数据复制中心实现核心交易数据的分表分库和Failover。 10. **技术架构**:使用如IBatis和SpringDataSource等工具,构建逻辑...
- **改进**:为了解决数据库性能问题并为后续版本做准备,淘宝将数据库从MySQL迁移到Oracle,并引入了SQLRelay中间件来提高数据处理能力。 - **挑战**:虽然解决了数据库性能问题,但在开发效率和维护性方面仍然存在...
5. **数据导出导入**:工具提供数据导出和导入功能,可以将数据库中的数据导出为CSV或其他格式,或者将数据导入到数据库中,对于数据迁移或备份具有重要作用。 6. **自动生成代码**:基于选定的数据库表,...
MyBatis 使用简单的 XML 或注解进行配置和原始映射,能够将接口和 Java 的 POJOs 映射到数据库中的记录。 #### 2. MyBatis 入门与安装配置 - **安装与配置步骤**: - 创建数据库表。 - 导入必需的 Jar 包(包括 ...
MyBatis起源于Apache的iBatis项目,2010年后迁移到Google Code并更名。 3. **数据库**:MySQL、Oracle和SQL Server是最常见的关系型数据库。Oracle是大型企业级数据库,广泛用于复杂的企业级应用。 4. **服务器**...
- **数据库支持**:兼容多种数据库,包括Oracle、MySQL、PostgreSQL等,并提供数据库配置和优化指南。 - **国际化和本地化**:支持多语言环境,易于实现国际化和本地化应用。 - **自动化测试**:内置单元测试和集成...
GeiNuke 是一个基于 Java 开发的 CMS 系统,它以 HSQLDB 和 MySQL 为数据库,使用 iBatis 作为持久层框架,Spring 作为应用框架,Caucho Hessian 提高系统的可扩展性,Velocity 模板引擎处理 MVC 层的视图渲染。...
- **数据存储**:当前主要使用Oracle数据库存储数据,并计划迁移至MySQL,以提高性能和降低成本。 2. **应用二:消息通知引擎** - **功能需求**:每日处理千万级消息,高峰期达到每秒2000条消息。确保消息的可靠...
3. 服务器与数据库选择:建立网站时,服务器选择可能包括Apache Tomcat、Nginx等,数据库则可能涉及MySQL、PostgreSQL、Oracle等。选择取决于项目需求,如性能、稳定性、成本等因素。 4. SQL查询: a) 要求分数...
它的前身是 iBatis,后来从 Apache Software Foundation 迁移到了 Google Code,并更名为 MyBatis。MyBatis 主要有以下几个特点: - **动态 SQL**:MyBatis 支持动态 SQL 语句的编写,可以通过 XML 或注解的方式...