这一篇博客将介绍前后台交互,ejb配置和数据查询,为实现用户登入做足准备。
首先我们来配置ejb。
1.在src目录下建立jboss-ejb-client.properties文件
内容为:
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
remote.connections=default
remote.connection.default.host=localhost
remote.connection.default.port = 4447
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
remote.connection.default.username=pal0415
remote.connection.default.password=Pal0000
2.在src目录下建立META-INF目录,META-INF里建立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="unit" transaction-type="JTA">
<jta-data-source>java:/OracleDS</jta-data-source>
<properties>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
</properties>
</persistence-unit>
</persistence>
相关说明:
注意java:/OracleDS与我们配置的数据源相同
hibernate.hbm2ddl.auto参数的作用主要用于:自动创建|更新|验证数据库表结构。如果不是此方面的需求建议set value="none"。
create:
每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。
create-drop :
每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。
update:
最 常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据 model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等 应用第一次运行起来后才会。
validate :
每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。
3.jboss-as-7.1.1.Final\bin\client里面的jboss-client.jar复制到lib里面
4.编写ejb
代码已经上传,代码有注释
其中包含ejb的调用
Manage.java,ManageBean.java,ManageBeanRemote三个是ejb类的编写
(1)首先我们建立实体映射:Manage类
package login;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="MANAGE")//对应表名
public class Manage implements Serializable{
private static final long serialVersionUID = 1L;
@Id @Column(name="ID",nullable=false)//列名---@id表示主键
public String id;
@Column(name="USERNAME",nullable=false)
public String username;
@Column(name="PASSWORD",nullable=false)
public String password;
@Column(name="NAME",nullable=true)
public String name;
//--------------省略了get和set方法
}
(2)编写ejb接口类:ManageBeanRemote类
package login;
import java.util.List;
import javax.ejb.Remote;
@Remote
public interface ManageBeanRemote {
//我们只用到一个方法,其他接口是提供学习
public void save (Manage temp);//增加
public void update (Manage temp);//更新
public void delete (Integer id);//根据id进行删除
public Manage getqualification(Integer id);//根据id获得对象
public List<Manage> getqualification();//返回所有
//登入用这个方法
public List<Manage> getqualificationParts(String username,String password);//根据username和 password返回
}
(3)实现接口类:ManageBean类
代码为:
package login;
import java.util.List;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
@Stateless
@Remote(ManageBeanRemote.class)
public class ManageBean implements ManageBeanRemote {
@PersistenceContext
EntityManager em;//实体管理对象
@Override
public void save(Manage temp) {
// 增加
em.persist(temp);
}
@Override
public void update(Manage temp) {
// 更新
em.merge(temp);
}
@Override
public void delete(Integer id) {
// 根据id删除
em.remove(em.getReference(Manage.class, id));
}
@Override
public Manage getqualification(Integer id) {
// 根据主键id获取Manage对象
return em.find(Manage.class, id);
}
@SuppressWarnings("unchecked")
@Override
public List<Manage> getqualification() {
// 获取所有对象---可进行查询,和sql有点相似
//return em.createQuery("select o from Manage o where STUDENTID='" + studentid + "'AND TESTID='" + testid + "' order by o.testid desc").getResultList();
return em.createQuery("select o from Manage o ").getResultList();
}
@SuppressWarnings("unchecked")
@Override
public List<Manage> getqualificationParts(String username,String password) {
// 获取所有对象---可进行查询,和sql有点相似
return em.createQuery("select o from Manage o where USERNAME='" + username + "'AND PASSWORD='" + password + "' ").getResultList();
}
}
经过上面步骤,我们就完成了对表manage的ejb配置和编写。