java web从零单排第二十一期《Hibernate》主键的生成方式,用户增加与显示用户列表
1.新建register.jsp
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html> <body>
<form action="save.action">
username:<input type="text" name="username"><br>
password:<input type="text" name="password"><br>
<input type="submit" value="submit">
</form>
</body>
</html>
2.新建listAll.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%> <%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head> <!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<script type="text/javascript"> function del()
{
if(confirm("are you sure"))
{
return true;
}
return false;
}
</script>
</head> <body>
<table width="80%" align="center" border="1">
<tr>
<th>username</th> <th>password</th> <th>delete</th> </tr> <s:iterator value="#request.list" id="user">
<tr>
<td><s:a href="getUser.action?username=%{#user.username}"> <s:property
value="user.username" /></s:a></td> <td><s:a href="getUser.action?username=%{#user.username}"></s:a> <s:property
value="user.password" /></td> <td><s:a href="deleteUser.action?username=%{#user.username}"
onclick="return del()">delete</s:a></td>
</tr> </s:iterator> </table>
</body>
</html>
3.运行后查看控制台会有错误信息显示:
出现了增加用户出现异常,这段代码在UserAction.java中:
说明session.save()没有执行成功,插入数据不成功有几种可能呢,无非是字段类型有错误,主键出现问题,那么我们来看看一看我们的主键就会发现问题:
不知道同学们对前两节的内容有没有什么质疑?那就是主键,我们之前设定主键的生成方式为increment也就是自增方式,什么是increment方式?
对 long , short 或 int 的数据列生成自动增长主键。increment主键生成方式的特点是与底层数据库无关性,大部分数据库如 Mysql,MSSQL 和ORACLE等都支持increament生成方式。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的 时候将此值加1作为主键。increment方式的不足之处是当多个线程并发对数据库表进行写操作时,可能出现相同的主键值,发生主键重复的冲突,因此多线程并发操作时,不应该使用此方法。
显然我们的主键username不应该适应此种方式,而应该用assigned:
主键由外部程序负责生成,无需Hibernate参与。----如果要由程序代码来指定主键,就采有这种.
还有其他几种主键的生成方式:
identity:
如果数据列的类型是 long, short 或 int ,可使用主键生成器生成自动增长Hibernate主键。与底层数据库有关,要求数据库支持identify,如MySQL中是auto_increment,SQL Server中是Identify.支持的数据库有MySQL,SQL Server,DB2,Sybase和HypersonicSQL.(好像不支持oracle) 无需Hibernate和用户的干涉,使用较为方便,但不便于在不同的数据库之间移植程序。identity的优点是不会发生 increment方式的并发错做问题。数据库涉及到的表要设置自动增长。
sequence:
在ORACLE等数据库中使用sequence生成主键。sequence的特点是于数据库的相关性,seqhio要求底层能支持sequence,列如Oracle。
hilo:
通过hi/lo 算法生成主键,需要一个表来保存额外的主键信息。这样生成的标识符只在特定的数据库是唯一的,在使用JTA(Java分布式事务) 获得链接或用户自定义提供的链接中,不要使用这种生成器。hilo方式需要维护表信息,因此对数据的影响的要率会造成一定影响。
seqhio:
与hilo 类似,通过hi/lo 算法实现的主键生成机制,只是主键历史状态保存在Sequence中,适用于支持Sequence的数据库,如Oracle。如果数据列的类型是 long, short 或 int可使用该主键生成器。
native:
由Hibernate根据不同的数据库方言,自行判断采用identity、hilo、sequence其中一种作为Hibernate主键生成方式,native的 优点是与底层性无关,便于不同数据库之间的移植,由Hibernate根据不同数据库选择主键的生成方式。在oracle中需要创建叫 Hibernate_sequence名字的sequence,如果设置了Hibernate.hbm2ddl.auto属性,不需要手动建立序列,前提 是数据库帐号必须有Create Sequence这种高级权限。mysql等数据库则不用建立sequence。
uuid.hex:
采用基于128位的算法生成唯一值,并编制成32位长度的唯一字符串作为主键值,uuid.hex的优点是支持大部分数据库,缺点就是要占用较大的存储空间。对于并发Insert要求较高的系统,推荐采用uuid.hex 作为主键生成机制。
uuid.string:
使用UUID算法,UUID被编码为一个16个字符长的任意ASCII字符组成的字符串。不能在PostgreSQL数据库中使用。uuid.string同uuid.hex类似,需要占很大的存储空间。
好,我们改变一下主键的生成方式吧:
执行register.jsp,点击提交按钮,运行结果:
添加一些数据后后有如下显示:
我们庆祝一下吧,说明我们插入数据成功了:
查看数据库会发现数据库中的确增加数据了。
java web从零单排第二十一期《Hibernate》主键的生成方式,用户增加与显示用户列表的更多相关文章
- java web从零单排第二十二期《hibernate》代码分析之查看,删除用户信息
前两期的内容不知道大家理解的怎么样,我并没有详细的去解释代码的意思,如果你已经自己都钻研明白了,那最好过,但还是一知半解的话,接下来我会仔细分析代码. 1.register.jsp:这部分代码只是简单 ...
- java web从零单排第十六期《struts2》控制标签(2)
1.s:subset标签概述: s:subset标签功能是从一个集合中取出部分元素合并成一个新的集合,新生成的这个集合是原来集合的子集.属性和意义如下: 属性名 是否必需 默认值 类型 说明介绍 co ...
- java web从零单排第十七期《struts2》数据标签库(1)
1.s:action标签: 此标签的作用是在JSP页面中访问action类的数据,执行某些操作,并返回相应的数据.其属性及意义如下: 属性名 是否必需 默认值 类型 说明介绍 executeResul ...
- Java Web整合开发王者归来(JSP + Servlet + Struts + Hibernate + Spring) - 读书笔记
第1章 状态码表示响应类型: 保留 表示请求成功地接收 完成请求客户需进一步细化请求 客户错误 服务器错误 Web服务器: Apache服务器,特长是处理静态页面,效率非常高. Tomcat提供对JS ...
- JAVA Web day02--- Android小白的第二天学习笔记
CSS(美工部分知识,了解) 1. CSS概述 1.1.CSS是什么? * CSS 指层叠样式表 样式表:存储样式的地方 层叠:一层一层叠加 高大富有帅气人 1.2.CSS有什么作用? *CSS就是用 ...
- PHP从零单排(十八)图像处理
1.打开现有的图像 <?php header("Content-type:image/jpeg"); $img=imagecreatefromjpeg("cc.jp ...
- ODAC(V9.5.15) 学习笔记(十九)主键值自动生成
ODAC支持通过Oracle的序列来自动生成表的主键功能.这个过程允许在客户端自动完成,不需要过多代码.这个对一些要求自动增长字段做主键的场合非常有用.其实现步骤为: 1.数据库必须先建立生成主键的序 ...
- Java Hibernate 主键生成10大策略
本文将介绍Hibernate中主键生成的几种策略方案,有需要的朋友可以参考一下. 1.自动增长identity 适用于MySQL.DB2.MS SQL Server,采用数据库生成的主键,用于为lon ...
- java框架篇---hibernate主键生成策略
Hibernate主键生成策略 1.自动增长identity 适用于MySQL.DB2.MS SQL Server,采用数据库生成的主键,用于为long.short.int类型生成唯一标识 使用SQL ...
随机推荐
- js得到分页栏
自己写的,感觉返回html代码蠢蠢的,但是新手并不知道怎么写更好的,感觉这样子也蛮简单.记录下来,以后来越改越好. //获得分页栏.注意indexSize为奇数,这样也比较好看 //totalNum: ...
- Web性能优化方案
第一章 打开网站慢现状分析 在公司访问部署在IDC机房的VIP网站时会感觉很慢.是什么原因造成的?为了缩短页面的响应时间,改进我们的用户体验,我们需要知道用户的时间花在等待什么东西上. 可以跟踪一下我 ...
- Introduction to Json
什么是Json 是Javascript·对象的一种表示,属于轻量级数据,它比XMl小,快,易解析 作用: 用于存储和交换(转换)信息的语言,还可以将各种数据类型放在json中并进行数据传输 整理的章节 ...
- KBMMW SampleService/SampleClient方式传输数据集
马上周末了,趁着下午这会儿回顾一下这几天对旧项目的升级过程,一些重要但不常用的东西记录下来是很有必要的.其中一个项目中对KBMMW的远程数据通讯方式做了改进,利用SampleService/Sampl ...
- commons-logging和slf4j都是日志的接口
过上面的图,可以简单的理清关系! commons-logging和slf4j都是日志的接口,供用户使用,而没有提供实现! log4j,logback等等才是日志的真正实现. 当我们调用接口时,接口的工 ...
- Windows SDK笔记(经典--一定要看)
Windows SDK笔记(一):Windows程序基本结构 一.概述 Windows程序具有相对固定的结构,对编写者而言,不需要书写整个过程,大部分过程由系统完成.程序中只要按一定的格式填写系统留给 ...
- C# 调用迅雷 7 迅雷下载开放引擎
最近有个项目需要用winform调用迅雷下载.上网百度后发现迅雷自带的com组件从迅雷5之后就废掉了,除了能添加任务,其余功能全不能用.后来又发现了迅雷下载开放引擎这么个东西 http://thund ...
- struts2的总体回想(ACTION、拦截器、值栈、OGNL表达式、ModelDriven方案等)
ValueStack:struts2的一个存放数据的数据结构(核心) ValueStack大致能够理解为:由Map和对象栈组成 ValueStack作用范围:一个请求,用它来取代request的作用域 ...
- 我写的一个 Qt 显示图片的控件
Qt 中没有专门显示图片的控件.通常我们会使用QLabel来显示图片.可是QLabel 显示图片的能力还是有点弱.比方不支持图像的缩放一类的功能.使用起来不是非常方便. 因此我就自己写了个简单的类. ...
- VIM: 解决vi/vim中粘贴时行首出现很多缩进和空格的问题
解决vi/vim中粘贴时行首出现很多缩进和空格的问题 http://www.jbxue.com/LINUXjishu/12232.html 由于在secureCRT中会将原来的文本原封不动的按照字符串 ...