java学习日志1

1.flush清理缓存,执行SQL,但还没提交事务,还是可以回滚的。flush在commit也会执行的。
2.数据库的隔离级别。
未提交读 未提交也能读
已提交读 只有提交了才能读
可重复读 重复读取的数据一样
序列化读 基本没并发性
3.主键生成策略:
uuid:hibernate生成 save未执行语句
native: 数据库生成 save已执行语句
assigned: 手动分配
4.hibernate基本映射
实体类->表 <class>
普通属性->表字段 <property> 批不包括自定义类、集合和数组等
注意:如果实体类和实体类中的属性和SQL中的关键字重复,必须采用table或column重新命名
实体类的设计原则:
* 实现一个默认的(即无参数的)构造方法(constructor)
* 提供一个标识属性(identifier property)(可选)
* 使用非final的类(可选)lazy代理的情况下,无法继承这个类生成子类,会报错。
* 可持久化字段声明访问器(accessors)
5.session.evict(实体对象);将对象从session中逐出,即从session的EntiryEntries属性中逐出。缓存session临时集合里面还有。这样无法成功提交的。可先flush
6.hibernate 会先执行insert的所有语句,再执行update语句,再delete..可以显示调用flush解决。
7.乐观锁和悲观锁(其实就是解决并发的问题)
* oracle不支持未提交读,默认已提交读
* mysql默认可重复读
悲观锁:通常依赖于数据库机制,在整个过程中装数据锁定,其他任何用户都不能读取或修改。适合于短事务。(load时选锁模式,其实就是for update锁住)
乐观锁:hibernate optimistic-lock="true",版本号控制,数据表里加一个版本号字段,当内存中数据的版本号小于数据库里的版本号时,报错。
8.struts1
* action 对应每一次请求 返回actionForward
* actionForm 把表单上的数据都收集到一个类里
* actionForward 跳转
9.ip获取
<%
String ip=request.getHeader("x-forwarded-for");
if(ip==null||ip.length()==0||"unknown".equalsIgnoreCase(ip)){
ip=request.getHeader("Proxy-Client-IP");
}
if(ip==null||ip.length()==0||"unknown".equalsIgnoreCase(ip)){
ip=request.getHeader("WL-Proxy-Client-IP");
}
if(ip==null||ip.length()==0||"unknown".equalsIgnoreCase(ip)){
ip=request.getRemoteAddr();
}
%>
10.javascript加载
$(document).ready(function(){});
11.mysql的utf-8一个字符是占用3个字节长度的
12.数据库密文加密新想法,先设一个值,取MD5,+密码,再MD5,这样,别人很难解出来了。

原文地址:https://www.cnblogs.com/svvs/p/3031468.html