按照本人前一篇《javaEE之JPA、EJB、JSF架构工程》的介绍建立好几个必要的工程文件。下面是重要代码分析:
1、JPA代码篇:
(1)单张表的实体创建,不涉及到多表连接。
@Entity//实体bean @Table(name="user")//对应表名为user public class User implements Serializable { private static final long serialVersionUID = 1L; @Id//id为主键 private int id;
(2)多表连接
2、EJB代码篇:
(1)无状态会话bean,UserInfo.java
package test; import javax.ejb.Stateless; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; /** * Session Bean implementation class UserInfo */ @Stateless public class UserInfo implements UserInfoRemote { @PersistenceContext(unitName="testJPA") EntityManager em; /** * Default constructor. */ public UserInfo() { // TODO Auto-generated constructor stub } @Override public User getUserById(int id) { // TODO Auto-generated method stub User user=em.find(User.class, id); return user; } @Override public void insertUser(User user) { // TODO Auto-generated method stub em.merge(user); em.flush(); } }
em调用find方法时,注意,参数只能是实体bean对应表的主键,不然无法实现查找功能。
@PersistenceContext(unitName="testJPA") EntityManager em;//这行代码一定要注意修改,不然会找不到实体bean而出错。
在执行完数据库的增删改操作后记得要将表刷新,实现同步。
(2)远程接口,UserInfoRemote.java
package test; import javax.ejb.Remote; @Remote public interface UserInfoRemote { public User getUserById(int id); public void insertUser(User user); }
远程接口没什么说的,定义好后可以利用集成开发环境自动生成相应的会话bean,保证参数的一致。
3、JSF代码篇:
(1)一个简单的登录页面
<%@taglib uri="http://java.sun.com/jsf/core" prefix="f" %> <%@taglib uri="http://java.sun.com/jsf/html" prefix="h" %> <%@page contentType="text/html;charset=utf-8"%> <html> <head> <title>第一个JSF程序</title> </head> <body> <f:view> <h:form> 请输入你的用户名:<h:inputText value="#{user.id}"/><br> 请输入你的密码:<h:inputSecret value="#{user.password }"></h:inputSecret> <p> <h:commandButton value="登录" action="#{user.check}"/> <h:commandButton value="重置" type="reset"/> </h:form> </f:view> </body> </html>
这里面有两点要注意:第一点,value="#{user.id}"对应的是back bean中的一个属性,一定要在back bean中有set和get方法;第二,动作事件,action="#{user.check}"对应的是backbean当中的一个方法,返回值一定要是string类型。
(2)faces-config.xml这个东西太复杂了,暂时还没完全搞懂,先不做展开。
4、java代码篇:
数据库字段类型为date,在java文件中存在两种date类型:java.sql.Date 和 java.util.Date。
(1)比如说我要从数据库中取出date类型值,然后打印成string
user.getBirthday().toString();
(2)存string类型的时间值到数据库中的date类型字段
java.util.Date temp=null;
java.sql.Date birDate=null;
try {
temp = new SimpleDateFormat("yyyy-MM-dd").parse(birthday);
birDate=new java.sql.Date(temp.getTime());
} catch (ParseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
user.setBirthday(birDate);
这个存的时间类型为:yyyy-mm-dd,如果要存到数据库中尉datetime类型就有点复杂了。
Date today = new Date(System.currentTimeMillis());//获取系统当前时间
由于本人用的教材是Java EE 5 完全学习手册,清华大学出版社,2009年4月第一版,本书涉及面很广,但是对每个点讲得不是很细,比如说faces-config.xml导航规则就两页带过,本人觉得用起来还是那么不顺手,希望大牛们能推荐javaEE更好的学习资料。