忙忙碌碌的一个月,一边开发一边踩坑,一边也在学习,上周终于将自己的代码提交上去了,码完代码后,浑身轻松,当然,在紧张了一个月的工作之后,学习到了不少,抽空总结一下吧。
因为我们在项目发布会根据客户的不同,部署在不同的数据库环境中,代码中的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
完成!!!!!!!!!