学学ZK - 从 derby 读记录 ZK + JPA

1. 参考文献和引用声明
本文主要参考:
Tutorial: Reading from the DB with Netbeans and ZK (Part 2)
http://javadude.wordpress.com/2009/03/24/tutorial-reading-from-the-db-with-netbeans-and-zk-part-2/

我使用了该文的代码,结合另一数据库的数据,稍加修改。原代码版权归原作者所有。

2. 数据库及 persistence.xml
我仍沿用 USERS[url]http://kingsz1.iteye.com/admin/blogs/356416[/url] 数据库。这是 persistence.xml 的内容:


<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="ZKJPA3PU" transaction-type="RESOURCE_LOCAL">
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
<class>entity.Users</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="openjpa.ConnectionPassword" value="admin"/>
<property name="openjpa.ConnectionDriverName" value="org.apache.derby.jdbc.ClientDriver"/>
<property name="openjpa.ConnectionUserName" value="admin"/>
<property name="openjpa.ConnectionURL" value="jdbc:derby://localhost:1527/USERS"/>
</properties>
</persistence-unit>
</persistence>




3. 实体类及其控制
实体类 Users.java ,从数据库生成,没有修改过。


package entity;

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;

/**
*
* @author admin
*/
@Entity
@Table(name = "USERS")
@NamedQueries({@NamedQuery(name = "Users.findAll", query = "SELECT u FROM Users u"), @NamedQuery(name = "Users.findById", query = "SELECT u FROM Users u WHERE u.id = :id"), @NamedQuery(name = "Users.findByName", query = "SELECT u FROM Users u WHERE u.name = :name"), @NamedQuery(name = "Users.findByLoginid", query = "SELECT u FROM Users u WHERE u.loginid = :loginid"), @NamedQuery(name = "Users.findByPassword", query = "SELECT u FROM Users u WHERE u.password = :password"), @NamedQuery(name = "Users.findByAge", query = "SELECT u FROM Users u WHERE u.age = :age")})
public class Users implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "ID")
private Integer id;
@Basic(optional = false)
@Column(name = "NAME")
private String name;
@Basic(optional = false)
@Column(name = "LOGINID")
private String loginid;
@Basic(optional = false)
@Column(name = "PASSWORD")
private String password;
@Basic(optional = false)
@Column(name = "AGE")
private int age;

public Users() {
}

public Users(Integer id) {
this.id = id;
}

public Users(Integer id, String name, String loginid, String password, int age) {
this.id = id;
this.name = name;
this.loginid = loginid;
this.password = password;
this.age = age;
}

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getLoginid() {
return loginid;
}

public void setLoginid(String loginid) {
this.loginid = loginid;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}

@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Users)) {
return false;
}
Users other = (Users) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}

@Override
public String toString() {
return "entity.Users[id=" + id + "]";
}

}



实体类的控制类 Controller.java ,从数据库取数,放入 List



package test;

import entity.Users;

import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.zkoss.zul.Window;

public class Controller extends Window {

List users = new ArrayList();
Users selected = new Users();

public Controller() {
EntityManagerFactory emf;
emf = Persistence.createEntityManagerFactory("ZKJPA3PU");
EntityManager em = emf.createEntityManager();
javax.persistence.Query q = em.createQuery("select u from Users as u");
users = q.getResultList();
em.close();
}

public List getUsers() {
return users;
}

public Users getSelected() {
return selected;
}

public void setSelected(Users selected) {
this.selected = selected;
}
}



4. ZK 文件 index.zul



<?xml version="1.0" encoding="UTF-8" ?>
<?page id="indexZUL" title="Sample ZK with JPA + Derby" cacheable="false"
language="xul/html" zscriptLanguage="Java" contentType="text/html;charset=UTF-8"?>
<?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit"?>

<zk xmlns="http://www.zkoss.org/2005/zul"
xmlns:h="http://www.w3.org/1999/xhtml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.zkoss.org/2005/zul http://www.zkoss.org/2005/zul/zul.xsd">

<window id="win" title="Sample ZK with JPA + Derby " border="normal" width="97%" height="95%"
mode="overlapped" position="center" use="test.Controller">

<listbox id="lb" model="@{win.users}" selectedItem="@{win.selected}" mold="paging" pageSize="4">
<listhead sizable="true">
<listheader label="Name 姓名" width="150px"/>
<listheader label="LoginID 登录名" width="250px"/>
<listheader label="Password 密码" width="150px"/>
<listheader label="Age 年龄" width="50px"/>
</listhead>
<listitem self="@{each=users}">
<listcell label="@{users.name}"/>
<listcell label="@{users.loginid}"/>
<listcell label="@{users.password}"/>
<listcell label="@{users.age}"/>
</listitem>
</listbox>

<separator bar="true"/>

<hbox>
<groupbox id="gb" mold="3d" width="100%">
<caption label="Selected User"/>
Name: <textbox id="name" cols="30" value="@{win.selected.name}" />
LoginID: <textbox id="loginid" cols="20" value="@{win.selected.loginid}" />
Password: <textbox id="password" cols="20" value="@{win.selected.password}" />
Age: <textbox id="age" cols="6" value="@{win.selected.age}" />
</groupbox>
</hbox>

</window>
</zk>



5. 试运行。
可分页显示数据库记录,每页4个记录,当然太少了,要改就该这里:
 pageSize="4" 


点击某个记录,在下面的 textbox 显示各字段内容。

如果加入更多的控制,就可以添加、修改、删除记录了。继续读书,继续模仿。

:-
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
项目:使用 JavaScript 编写的杀死幽灵游戏(附源代码) 杀死鬼魂游戏是使用 Vanilla JavaScript、CSS 和 HTML 画布开发的简单项目。这款游戏很有趣。玩家必须触摸/杀死游荡的鬼魂才能得分。您必须将鼠标悬停在鬼魂上 - 尽量得分。鬼魂在眨眼间不断从一个地方移动到另一个地方。您必须在 1 分钟内尽可能多地杀死鬼魂。 游戏制作 这个游戏项目只是用 HTML 画布、CSS 和 JavaScript 编写的。说到这个游戏的特点,用户必须触摸/杀死游荡的幽灵才能得分。游戏会根据你杀死的幽灵数量来记录你的总分。你必须将鼠标悬停在幽灵上——尽量得分。你必须在 1 分钟内尽可能多地杀死幽灵。游戏还会显示最高排名分数,如果你成功击败它,该分数会在游戏结束屏幕上更新。 该游戏包含大量的 javascript 以确保游戏正常运行。 如何运行该项目? 要运行此游戏,您不需要任何类型的本地服务器,但需要浏览器。我们建议您使用现代浏览器,如 Google Chrome 和 Mozilla Firefox。要玩游戏,首先,单击 index.html 文件在浏览器中打开游戏。 演示: 该项目为国外大神项目,可以作为毕业设计的项目,也可以作为大作业项目,不用担心代码重复,设计重复等,如果需要对项目进行修改,需要具备一定基础知识。 注意:如果装有360等杀毒软件,可能会出现误报的情况,源码本身并无病毒,使用源码时可以关闭360,或者添加信任。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值