mysql 和oracle 在函数使用上的不同《一》

忙忙碌碌的一个月,一边开发一边踩坑,一边也在学习,上周终于将自己的代码提交上去了,码完代码后,浑身轻松,当然,在紧张了一个月的工作之后,学习到了不少,抽空总结一下吧。

因为我们在项目发布会根据客户的不同,部署在不同的数据库环境中,代码中的xml 需要映射映射两种数据库,在编写的时候我们需要根据不同的数据库实现,修改我们的sql 语句,兼容oracle和mysql。

首先,我们先讲下最基础的区别:

1》oracle 默认端口 :1521 默认用户 :system

    mysql    默认端口:3306 默认用户 :root

2》在不同的数据库中建表,使用的数据类型也是不同的,

oracle:number(数值型),varchar2,varchar,char (字符型),date 日期型 等

mysql:int,float,double等数值型,varchar,char字符型,date,datetime,time,year,timestamp等日期型,时间类型可以根据时间需要进行设置

 注意,在字符型使用中,两者也是有不同的;

其中char(2)这样定义,这个单位在oracle中2代表两个字节mysql中代表两个字符

其中varchar在mysql中 必须给长度例如varchar(10) 不然插入的时候出错。我在使用的过程中为了降低数据类型错误,通常使用的是varchar型,字段长度也会定义一样的长度。

3》插入数据的时候,两者是有区别的,

oracle :数据只能一条一条的插入,

mysql:可以进行批量的插入数据 insert into table (字段1,字段2) values (value1,value2),(value3,value4);

4》删除表的时候是不同的

oracle: delate from myuser ; ---from 可有可无

mysql: delete from myuser; ---必须有from

为了一致性,我在写的时候,都加了“from”。

5》在时间处理上也存在不同

在开发过程中需要对时间进行更新和插入,取系统时间,时间的赋值通常直接使用函数方法now(),但oracle和mysql 上是存在不同的,

oracle :使用sysdate,如:select sysdate from dual 获取当前时间

mysql :使用now()  如:select NOW()

为了方便,能使用一个sql 实现两种数据库的使用,我决定将时间这是放在代码里实现,new  Date() ,在逻辑层对时间进行处理,

6》两者在分页上也是有很大的区别,

代码编写的过程中,肯定少不了要进行查询,当然最常用的就是分页查询,根据页码(startPage),页数(pageSize)进行分页,

Oracle:

如 starPage =1,size =10。最终查到一页10行的数据

select *
  from (select rownum rn, a.*
          from (select * from  table_name c order by c.contract_code_sge) a
         where rownum <=10 ) --/ / 结束行,y = startPage * pageSize
 where rn > 0;
--/ / 起始行,x =(startPage - 1) * pageSize

这是查询第二页的逻辑,可以看到序号产生了变化

mysql:使用limit 

如select * from  table_name limit 3, 1     ;其中 

// 3 = (startPage-1)*pageSize, 1 = pageSize

但随着代码的进步,分页功能可以使用依赖包完成,这大大减少我们的代码编写,pagehelper 大家熟悉吗?

添加依赖

<dependency>
			<groupId>com.github.pagehelper</groupId>
			<artifactId>pagehelper-spring-boot-starter</artifactId>
			<exclusions>
				<exclusion>
					<groupId>ch.qos.logback</groupId>
					<artifactId>logback-classic</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
 PageHelper.startPage(request.getPageIndex(), request.getRequestNum());
            List<Dto> pageResult = query();//查询的mapper 方法。
            PageInfo<Dto> PageInfo = new PageInfo<>(pageResult);
        Long    count =PageInfo.getTotal();//统计所有的数量

当然还有重要的一步啊:

在application.propertion中添加

pagehelper.helperDialect=mysql(或oracle)

####pagehelper分页插件配置
pagehelper.helperDialect=mysql(或oracle)
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.params=count=countSql

完成!!!!!!!!!

整理的有些粗糙,如有不对的地方可以在评论区指出,我及时修改优化。

猜你喜欢

转载自blog.csdn.net/lengyue1314/article/details/118397722