2018年9月工作中遇到的问题
1、如果数据渲染到页面:
- 页面加载时执行$(function(){... ...})将该渲染的数据,加载到页面
- 使用SpringMVC的ModelAndView
Controller层:
页面使用el表达式:${key}显示到页面,
数据是List格式的,使用下图<c:forEach></ c:forEach>遍历。
2、如何提交Form表单
从提交的方式上可以分为:
从提交的内容上分为:
- 如果提交的数据是相互独立的,那么要注意提交的变量名要和接受数据的变量名一致。
- 如果提交的数据是一个实体类对象,那么:
1、第一种情况:
①、页面上的参数name值要和实体类的参数名一致,②把表单序列化通过ajax请求把表单提交,后台使用实体类接收数据。
- 直接提交表单:
- 、Query Form插件:引入js文件
- 、页面上的参数name值要和实体类的参数名一致
- 、使用ajaxSubmit()提交表单
备注:
提交的表单里含有List集合数据,前台应该如下所示:
实体类应该如图:页面上:varStatus="status" 代表当前索引
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的三种方法和区别
<input type="hidden" />
<input type="text" style="display:none" />
以上两种方法可以实现不留痕迹的隐藏。
<input type="text" style="visibility: hidden;" />
第三种方法可以实现占位隐藏(会留下空白而不显示)
6、什么是Hutool
Hutool是一个Java工具包,也就是一个工具箱,一个utils集合,它帮助我们简化每一行代码,减少每一个方法,让Java语言也可以简单粗暴。Hutool最初是作者项目中“util”包的一个整理,后来慢慢积累并加入更多非业务相关功能,并广泛学习其它开源项目精髓,经过自己整理修改,最终形成丰富的开源工具集。
功能
一个Java基础工具类,对文件、流、加密解密、转码、正则、线程、XML等JDK方法进行封装,组成各种Util工具类,同时提供以下组件:
- hutool-aop JDK动态代理封装,提供非IOC下的切面支持
- hutool-bloomFilter 布隆过滤,提供一些Hash算法的布隆过滤
- hutool-cache 缓存
- hutool-core 核心,包括Bean操作、日期、各种Util等
- hutool-cron 定时任务模块,提供类Crontab表达式的定时任务
- hutool-crypto 加密解密模块
- hutool-db JDBC封装后的数据操作,基于ActiveRecord思想
- hutool-dfa 基于DFA模型的多关键字查找
- hutool-extra 扩展模块,对第三方封装(模板引擎、邮件等)
- hutool-http 基于HttpUrlConnection的Http客户端封装
- hutool-log 自动识别日志实现的日志门面
- hutool-script 脚本执行封装,例如Javascript
- hutool-setting 功能更强大的Setting配置文件和Properties封装
- hutool-system 系统参数调用封装(JVM信息等)
- hutool-json JSON实现
- hutool-captcha 图片验证码实现
- WatchService的封装(文件变动监控)
- XXXUtil各种有用的工具类
设计哲学
Hutool的设计思想是尽量减少重复的定义,让项目中的util这个package尽量少,总的来说有如下的几个思想:
- 减少代码录入。
- 常用功能组合起来,实现一个功能只用一个方法。
- 简化Java API,原来需要几个类实现的功能我也只是用一个类甚至一个方法(想想为了个线程池我得new多少类……而且名字还不好记)
- 对于null的处理我没有可以回避,而是采取“你给我null我也给你返回null”这种思想,尽量不在工具类里抛空指针异常(这思想稍猥琐啊……直接把包袱扔给调用者了,好吧,谁让你给我null了)。
- 一些固定使用的算法收集到一起,不用每次问度娘了(例如Base64算法、MD5、Sha-1,还有Hash算法)
- 借鉴Python的很多小技巧(例如列表切片,列表支持负数index),让Java更加好用。
- 非常好用的ORM框架,同样借鉴Python的Django框架,以键值对的实体代替对象实体,大大降低数据库访问的难度(再也不用像Hibernate一样配置半天ORM Mapping了)。
- 极大简化了文件、日期的操作,尤其是相对路径和绝对路径问题做了非常好的封装,降低学习成本。
7、Vue简介
- Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的渐进式框架。
- Vue 只关注视图层, 采用自底向上增量开发的设计。
- Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。
- Vue 学习起来非常简单,本教程基于 Vue 2.1.8 版本测试。
8、Gradle 构建工具
spring 项目建议使用Gradle进行构建项目,相比maven来讲 Gradle更简洁,而且gradle更时候大型复杂项目的构建。gradle吸收了maven和ant的特点而来,不过目前maven仍然是Java界的主流,大家可以先了解了解。
9、标准表达式语法
它们分为四类:
- 变量表达式
- 选择或星号表达式
- 文字国际化表达式
- 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
函数接受两个任何有效日期或日期时间值的参数。如果您传递DATETIME
或TIMESTAMP
值,则DATEDIFF
函数仅将日期部分用于计算,并忽略时间部分。
DATEDIFF
函数在许多情况下很有用,例如,您可以计算产品需要发送给客户的间隔时间。
11、bootstrap table 单元格自适应
12、Java 11
从开发者的角度来看,上面的特性中有几点需要特别关注。
JEP 323 实现了 Java 10 中引入的局部变量类型推断的扩展。类型推断是从其余源代码和键入规则中推导出的数据类型。这节省了开发者的工作时间,且不会使源代码过于复杂,而提高了可读性。
从 Java 10 开始,可以使用关键字 var 声明局部变量,如下所示:
从 Java 11 开始,Java 运行时环境(JRE)将仅存在于服务器版本中,而不再存在于桌面中。但是,对于具有模块系统和 jlink 工具的桌面应用程序,开发者现在可以轻松创建或调整运行时环境。
文章来源: blog.csdn.net,作者:LookForDream_,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/LookForDream_/article/details/84398934
- 点赞
- 收藏
- 关注作者
评论(0)