2018年9月工作中遇到的问题

1、如果数据渲染到页面:

  1. 页面加载时执行$(function(){... ...})将该渲染的数据,加载到页面

2018年9月工作中遇到的问题_第1张图片

  1. 使用SpringMVC的ModelAndView

Controller层:

2018年9月工作中遇到的问题_第2张图片

页面使用el表达式:${key}显示到页面,

数据是List格式的,使用下图遍历。

2018年9月工作中遇到的问题_第3张图片

2、如何提交Form表单

2018年9月工作中遇到的问题_第4张图片

从提交的方式上可以分为:

2018年9月工作中遇到的问题_第5张图片

2018年9月工作中遇到的问题_第6张图片

从提交的内容上分为:

  1. 如果提交的数据是相互独立的,那么要注意提交的变量名要和接受数据的变量名一致。

2018年9月工作中遇到的问题_第7张图片

  1. 如果提交的数据是一个实体类对象,那么:

1、第一种情况:

①、页面上的参数name值要和实体类的参数名一致,②把表单序列化通过ajax请求把表单提交,后台使用实体类接收数据。

2018年9月工作中遇到的问题_第8张图片

  1. 直接提交表单:
    • Query Form插件:引入js文件
    • 、页面上的参数name值要和实体类的参数名一致
    • 、使用ajaxSubmit()提交表单    2018年9月工作中遇到的问题_第9张图片

备注:

提交的表单里含有List集合数据,前台应该如下所示:

2018年9月工作中遇到的问题_第10张图片

实体类应该如图:页面上:varStatus="status" 代表当前索引

2018年9月工作中遇到的问题_第11张图片

3、Oracle和MySQL的主要区别

Oracle:客户端和命令窗口,都是由用户决定内容-> conn user_name/password;

 

MySQL:客户端和命令窗口,都是由数据库决定内容-> use datebase;

 

都可以创建多数据库多用户,个人倾向于Oracle一个数据库中多个用户的形式,MySQL多个数据库多个用户形式(最好每个数据库对应一个用户)

 

Oracle是大型数据库而MySQL是中小型数据库,Oracle市场占有率达40%,MySQL只有20%左右,同时MySQL是开源的而Oracle价格非常高。

 

Oracle支持大并发,大访问量,是OLTP(On-Line Transaction Processing联机事务处理系统)最好的工具。

 

安装所用的空间差别也是很大的,MySQL安装完后才152M而Oracle有3G左右,且使用的时候Oracle占用特别大的内存空间和其他机器性能。

 

Oracle也与MySQL操作上的一些区别:

1、自动增长的数据类型处理:

MySQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值。Oracle没有自动增长的数据类型,需要建立一个自动增长的序列号,插入记录时要把序列号的下一个值赋于此字段。

2、单引号的处理:

MySQL里可以用双引号包起字符串,Oracle里只可以用单引号包起字符串。在插入和修改字符串前必须做单引号的替换:把所有出现的一个单引号替换成两个单引号。

3、翻页的SQL语句的处理

MySQL处理翻页的SQL语句比较简单,用LIMIT开始位置,记录个数;PHP里还可以用SEEK定位到结果集的位置。Oracle处理翻页的SQL语句就比较繁琐了。每个结果集只有一个ROWNUM字段标明它的位置,并且只能用ROWNUM<100,不能用ROWNUM>80。

4、空字符的处理

MySQL的非空字段也有空的内容,Oracle里定义了非空字段就不容许有空的内容。按MySQL的NOT NULL来定义Oracle表结构,导数据的时候会产生错误。因此导数据时要对空字符进行判断,如果为NULL或空字符,需要把它改成一个空格的字符串

5、字符串的模糊比较

MySQL里用字段名like%'字符串%',Oracle里也可以用字段名like%'字符串%'但这种方法不能使用索引,速度不快,用字符串比较函数instr(字段名,'字符串')>0会得到更精确的查找结果。

程序和函数里,操作数据库的工作完成后请注意结果集和指针的释放。

6、主键

MySQL一般使用自动增长类型,在创建表时只要指定表的主键为auto increment,插入记录时,不需要再指定该记录的主键值,MySQL将自动增长;Oracle没有自动增长类型,主键一般使用的序列,插入记录时将序列号的下一个值付给该字段即可;只是ORM框架是只要是native主键生成策略即可。

4、知识点:checkbox未选中不传递value

要求效果:选中值为1,不选中值为0

实现问题:选中后value为1,未选中不传递value

解决方法:

第一种:在后台修改controller层进行修改,如果该字段为空则赋值为0

       第二种:设置数据库对应的该字段默认值为0

 

5、隐藏input的三种方法和区别

以上两种方法可以实现不留痕迹的隐藏。

第三种方法可以实现占位隐藏(会留下空白而不显示)

6、什么是Hutool

Hutool是一个Java工具包,也就是一个工具箱,一个utils集合,它帮助我们简化每一行代码,减少每一个方法,让Java语言也可以简单粗暴。Hutool最初是作者项目中“util”包的一个整理,后来慢慢积累并加入更多非业务相关功能,并广泛学习其它开源项目精髓,经过自己整理修改,最终形成丰富的开源工具集。

功能

一个Java基础工具类,对文件、流、加密解密、转码、正则、线程、XML等JDK方法进行封装,组成各种Util工具类,同时提供以下组件:

  1. hutool-aop JDK动态代理封装,提供非IOC下的切面支持
  2. hutool-bloomFilter 布隆过滤,提供一些Hash算法的布隆过滤
  3. hutool-cache 缓存
  4. hutool-core 核心,包括Bean操作、日期、各种Util等
  5. hutool-cron 定时任务模块,提供类Crontab表达式的定时任务
  6. hutool-crypto 加密解密模块
  7. hutool-db JDBC封装后的数据操作,基于ActiveRecord思想
  8. hutool-dfa 基于DFA模型的多关键字查找
  9. hutool-extra 扩展模块,对第三方封装(模板引擎、邮件等)
  10. hutool-http 基于HttpUrlConnection的Http客户端封装
  11. hutool-log 自动识别日志实现的日志门面
  12. hutool-script 脚本执行封装,例如Javascript
  13. hutool-setting 功能更强大的Setting配置文件和Properties封装
  14. hutool-system 系统参数调用封装(JVM信息等)
  15. hutool-json JSON实现
  16. hutool-captcha 图片验证码实现
  17. WatchService的封装(文件变动监控)
  18. XXXUtil各种有用的工具类

设计哲学

Hutool的设计思想是尽量减少重复的定义,让项目中的util这个package尽量少,总的来说有如下的几个思想:

  1. 减少代码录入。
  2. 常用功能组合起来,实现一个功能只用一个方法。
  3. 简化Java API,原来需要几个类实现的功能我也只是用一个类甚至一个方法(想想为了个线程池我得new多少类……而且名字还不好记)
  4. 对于null的处理我没有可以回避,而是采取“你给我null我也给你返回null”这种思想,尽量不在工具类里抛空指针异常(这思想稍猥琐啊……直接把包袱扔给调用者了,好吧,谁让你给我null了)。
  5. 一些固定使用的算法收集到一起,不用每次问度娘了(例如Base64算法、MD5、Sha-1,还有Hash算法)
  6. 借鉴Python的很多小技巧(例如列表切片,列表支持负数index),让Java更加好用。
  7. 非常好用的ORM框架,同样借鉴Python的Django框架,以键值对的实体代替对象实体,大大降低数据库访问的难度(再也不用像Hibernate一样配置半天ORM Mapping了)。
  8. 极大简化了文件、日期的操作,尤其是相对路径和绝对路径问题做了非常好的封装,降低学习成本。

7、Vue简介

  1. Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的渐进式框架。
  2. Vue 只关注视图层, 采用自底向上增量开发的设计。
  3. Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。
  4. Vue 学习起来非常简单,本教程基于 Vue 2.1.8 版本测试。

 

8、Gradle 构建工具

spring 项目建议使用Gradle进行构建项目,相比maven来讲 Gradle更简洁,而且gradle更时候大型复杂项目的构建。gradle吸收了maven和ant的特点而来,不过目前maven仍然是Java界的主流,大家可以先了解了解。

9、标准表达式语法

它们分为四类:

  1. 变量表达式
  2. 选择或星号表达式
  3. 文字国际化表达式
  4. URL表达式

 

10、mysql bigint类型和datetime类型的转换

1、bigint类型转换为datetime类型

-- 假设 1164691264437 是 Java 里的“日期时间”:即:自1970-01-01 00:00:00以来的毫秒数

/*

getTime

public long getTime()Returns the number of milliseconds since January 1, 1970, 00:00:00 GMT represented by this Date object.



Returns:

the number of milliseconds since January 1, 1970, 00:00:00 GMT represented by this date.

*/

mysql>  select from_unixtime(1164691264437/1000);

+-----------------------------------+

| from_unixtime(1164691264437/1000) |

+-----------------------------------+

| 2006-11-28 13:21:04               |

+-----------------------------------+

2、datetime类型转换为bigint类型

-- 假设 "2011-05-31 23:59:59" 是 Java 里的“日期时间”:即:自1970-01-01 00:00:00以来的毫秒数


mysql> select UNIX_TIMESTAMP('2011-05-31 23:59:59');

+-----------------------------------+

| from_unixtime(1306857599/1000) |

+-----------------------------------+      |

 

3、MySQL DATEDIFF函数

计算两个DATE,DATETIME或TIMESTAMP值之间的天数。

 

DATEDIFF
(
date_expression_1
,
date_expression_2
);

DATEDIFF函数接受两个任何有效日期或日期时间值的参数。如果您传递DATETIMETIMESTAMP值,则DATEDIFF函数仅将日期部分用于计算,并忽略时间部分。

DATEDIFF函数在许多情况下很有用,例如,您可以计算产品需要发送给客户的间隔时间。

 

11、bootstrap table 单元格自适应

2018年9月工作中遇到的问题_第12张图片

12、Java 11

从开发者的角度来看,上面的特性中有几点需要特别关注。

JEP 323 实现了 Java 10 中引入的局部变量类型推断的扩展。类型推断是从其余源代码和键入规则中推导出的数据类型。这节省了开发者的工作时间,且不会使源代码过于复杂,而提高了可读性。

从 Java 10 开始,可以使用关键字 var 声明局部变量,如下所示:

2018年9月工作中遇到的问题_第13张图片

 

从 Java 11 开始,Java 运行时环境(JRE)将仅存在于服务器版本中,而不再存在于桌面中。但是,对于具有模块系统和 jlink 工具的桌面应用程序,开发者现在可以轻松创建或调整运行时环境。

你可能感兴趣的:(工作学习问题记录)