Java菜鸟学习日记30

Bootstrap 响应式按钮
表现效果:手机上全宽,桌面上2列宽
原理:btn-block 会将按钮变成全宽,但桌面上 col-sm-2 生效,按钮被限制在2列宽中,手机上col-sm-2失效
在自己的项目中整合第三方插件或功能
  1. 找到所有的依赖项(css、js、jar、配置文件),并且注意依赖项顺序
  2. 将找到的依赖项添加到自己的项目中(注意放置的位置,让新增加的内容符合项目的文件结构规范)(注意如果本项目中已经引入了相同的依赖项,但版本不同时,要注意冲突情况,如果前段的版本冲突,可以都加入到项目中,在某些页面使用a版本,另外页面使用b版本。如果jar包版本冲突,先尝试使用新版本,不行的话,在考虑使用那个版本改动的代价最小)
  3. 如果有完整的示例或者项目中有可运行的代码,直接将代码尽量完整地复制到本项目中,能够运行起来后,在修改或删减代码(注意检查控制台有没有报错)
  4. 如果没有示例代码,则从文档中挑选简单代码实验,先让代码能够跑起来,然后在增加复杂度
  5. 能跑起来之后,在根据需求去调整,尽可能去实现需求锁要求的界面和功能效果,此时应该简单快速的浏览以下API文档,对整体API有一个印象
注意:优先寻找并使用第三方插件,而不是自己写
注意:网上同类型的第三方插件有可能很多,选择使用那一个的标准是:
  1. 能满足自己的需求
  2. 简单好用,文档写得好
  3. 用的人多,赞的人所
在网页加载完毕之后在执行一段代码
此功能带来的好处是:可以不受js加载顺序的影响,可以将代码放在页面的任何位置,而不出错
在JQuery中,通过下面的方法可以实现
  1. $(function(){
页面加载完毕后会执行代码
})
  1. $((document).ready(function())){
页面加载完毕后会执行代码
}
MySQL日期时间类型和函数
  • Timestamp:4:1970-01-01 00:00:01~2038
  • Date:3:1000-01-01~9999-12-31
  • Time:3:-838:00:00~838:59:59
  • DateTime:8:1000-01-01 00:00:00~9999
  • Year:1:1901~2155
非正常情况下,比如表示历史事件的日期时间无法直接使用内置的日期时间按类型
存储非正常时间方法
  1. 将年月日拆成3个整数存储
  2. 使用Date或DateTime另外在加一个字段表示公元前还是公元后,或者年份偏移量
日期时间函数
  • NOW():可以获取当前日期和时间,可以赋值给Date、Time、DateTime
  • Current_Timestamp():当前时间戳
  • Current_Date():获取当前日期部分
  • Current_Time():获取当前时间部分
日期时间可以使用+、- 运算符:只是简单的将小时、分钟、秒相加
还可以使用Convert进行类型转换(支持字符串、整数)
时间日期函数:
  • 日期加减:date_add()、date_sub()
  • 时间加减:time_add()、time_sub()
  • 两个日期之差:date_diff()
  • 两个时间之差:time_diff()
  • 字符串转日期:str_to_date()
  • 字符串转时间:str_to_time()
  • 计算天数:to_days()
  • 时间转秒数:time_to_sec()
  • 描述转时间:sec_to_time()
SpringMVC数据格式化
  • 数据格式化是数据绑定功能的重要构成部分,能够把用户输入的字符串转换成模型对象的属性值(属性不是字符串类型)
  • 格式化提供注解支持
    • @DateTimeFormat:用来格式化日期时间
      • 如:2017-08-15
    • @Number:用来格式化数字
      • 如:123,456,789
    • @Currency:用来格式化货币
      • 如:¥123.00
    • @Percent:用来格式化百分数
      • 如:99.00%
JSTL的var属性
  • JSTL的很多标签都支持var属性,var可以将标签中的计算结果编程一个变量(默认在pageScope中,可以通过scope指定放在那个作用域中),供标签外部使用
    • form:input:属性中不能在嵌套JSTL标签,但是还希望能够显示JSTL标签的计算结果,此时使用var就能解决问题
MySQL索引
  • 索引存在的意义是加速数据查找!
    • 加速的原理是数据使用了特定的算法(二分法、平衡二叉树、BTree)
  • 索引的类型
    • 普通索引:对数据没有限制,但是对于数据值很少的列建索引的意义不大,如性别或枚举值
      • 外键(通常普通索引),当创建外键时,会同时创建一个普通索引
    • 唯一性索引:要求数据必须保持唯一性,一个值只能出现一次,否则就报错。索引可以跨越多个列,如:2列、3列。。。用户名、邮箱、手机号、主键(特殊唯一索引)
    • 全文索引:用于加速长字符串的搜索(短字符串的like搜索数度也不快,对于长字符串使用like是无法接受的)
      • 数据库中的text类型都是长文本、varchar(200以上)
      • MySQL的全文索引默认只对英文支持比较好,对于中文,通常会使用某种分词技术。
      • MySQL的全文索引智游MyISAM引擎支持。
        • MyISAM引擎支持千万级数据存储,但不支持事务。
        • 常用的支持事务的引擎是InnoDB,但通常智能支持百万级数据。
  • 索引的命名规则:i_表名_列名1_列名2..
  • 索引方法
    • HASH:直接计算出值的存储位置,不需要搜索过程,速度最快
      • 适合少量数据
    • BTree:通过决策以二分法的方式快速收敛,搜索到结果。当数据量以指数级增长时,搜索时间只以线性方式增长。
      • 适合大量数据的索引
MyBatis的异常处理
  • MyBatis会在内部捕获SQLException,捕获之后会在日志中输出错误信息,然后创建一个DataAccessException抛出。
  • 所以在Dao和Service应该写throws DataAccessException,不能写SQLException(因为MyBatis已经捕获它,并将之转换成DataAccessException)
关于IP地址
  1. 获取离服务器最近的机器的IP地址:
    1. request.getRemoteAddr()
  2. 在客户机与服务器之间有代理服务器:
    1. request.getHeader("x-forwarded-for"):指定的就是客户机的真实IP
    2. request.getHeafer("Proxy-Client-IP"):也有可能是这个头指定的
  3. 如果使用localhost,那么用getRemoteAddr()得到的值是0:0:0:0:0:0:0:1
  4. 获取到的IP地址是点分十进制表示法的字符串值
    1. 对于IPv4数据库可以用一个int值来存储,而且MySQL提供了转换函数
      1. 点分十进制→int:inet_aton()
      2. int→点分十进制:inet_ntoa()
      3. 这两个函数名字来自于c语言函数(Linux系统的函数)
    2. 使用int存储IP搜索速度要比字符串快很多,添加索引之后,字符串的速度与int速度没法比

你可能感兴趣的:(学习日记)