现在的位置: 首页 > 综合 > 正文

javaEE之JPA、EJB、JSF代码分析

2014年07月24日 ⁄ 综合 ⁄ 共 2508字 ⁄ 字号 评论关闭

按照本人前一篇《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更好的学习资料。

抱歉!评论已关闭.