在用hibernate3+struts2+spring做东西
很简单,数据库里就一张表,就俩元素:姓名和密码
完了实现个登录功能就行了其他都配置好了 就applicationContext.xml不会配置了
hibernate什么的都弄好了 测试过了
就一个class Client
然后一个ClientDAO和ClientDAOImpl然后写了个class LoginAction 这里面有两个数据Client和ClientDAO 方法execute()就是根据Client和ClientDAO比较名字和密码是否都一致 登录成功就跳到success.jsp 否则跳到fail.jsp 这些也都写好了就是这个applicationContext.xml不会配置了 注入什么的搞乱了 而且从网上找,发现里面还有个sessionFactory什么的 不太明白 求高人指点啊~~~下面附上LoginAction的代码:
public class LoginAction extends ActionSupport{
private Client client;
private ClientDAO dao;
private String msg;
//所有的get和set都有 节省空间就不贴了 @Override
public void validate() {
if(this.client.getNom() == null) {
this.addFieldError("username", "username can't be empty!!!");
}
super.validate();
} @Override
public String execute() throws Exception {
ActionContext context = ActionContext.getContext();
if(dao.FindClientForLogin(this.client.getNom(), this.client.getPwd())) {
msg = "login succeeded";
context.put("message", msg);
return this.SUCCESS;
}
msg = "login failed";
context.put("message", msg);
return this.ERROR;
}
}applicationContextstruts2spring注入
很简单,数据库里就一张表,就俩元素:姓名和密码
完了实现个登录功能就行了其他都配置好了 就applicationContext.xml不会配置了
hibernate什么的都弄好了 测试过了
就一个class Client
然后一个ClientDAO和ClientDAOImpl然后写了个class LoginAction 这里面有两个数据Client和ClientDAO 方法execute()就是根据Client和ClientDAO比较名字和密码是否都一致 登录成功就跳到success.jsp 否则跳到fail.jsp 这些也都写好了就是这个applicationContext.xml不会配置了 注入什么的搞乱了 而且从网上找,发现里面还有个sessionFactory什么的 不太明白 求高人指点啊~~~下面附上LoginAction的代码:
public class LoginAction extends ActionSupport{
private Client client;
private ClientDAO dao;
private String msg;
//所有的get和set都有 节省空间就不贴了 @Override
public void validate() {
if(this.client.getNom() == null) {
this.addFieldError("username", "username can't be empty!!!");
}
super.validate();
} @Override
public String execute() throws Exception {
ActionContext context = ActionContext.getContext();
if(dao.FindClientForLogin(this.client.getNom(), this.client.getPwd())) {
msg = "login succeeded";
context.put("message", msg);
return this.SUCCESS;
}
msg = "login failed";
context.put("message", msg);
return this.ERROR;
}
}applicationContextstruts2spring注入
<property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
</bean> <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
在applicationcontext中加入这段就行了,sessionFactory封装了connection,这个对象又被hibernateTemplate引用,hibernateTemplate可以对数据库进行增删改查等操作。然后你就可以实现你的dao层了。
具体使用在每个dao实现类里加入
protected HibernateTemplate hibernateTemplate;
并提供getter、setter方法 然后你就可以spring的方式来写代码了。比如
public void addForum(Forum forum) {
hibernateTemplate.save(forum);
}
懂了吗?就这么简单!
我在写dao的时候,并没有用hibernatetemplate,可能我用了古老的方法,这也是导致我看不懂网上的applicationContext.xml的原因吧
我是这样实现dao层的://这个class负责创建session和关闭session
public class DBHibernate {
private SessionFactory sessionFactory = (new Configuration().configure()).buildSessionFactory();
public Session connect() {
return this.sessionFactory.openSession();
}
public void close() {
this.sessionFactory.close();
}
}//interface---dao
public interface ClientDAO {
Client FindClientByNom(String nom);
boolean FindClientForLogin(String nom, String pwd); List<Client> ListAll();
void AddClient(Client client);
}//上面的interface的实现 同时继承第一个class
public class ClientDAOImpl extends DBHibernate implements ClientDAO {
@Override
public void AddClient(Client client) {
Session session = connect();
Transaction trans = session.beginTransaction();
session.save(client);
trans.commit();
session.close();
} @Override
public Client FindClientByNom(String nom) {
Session session = connect();
Transaction trans = session.beginTransaction();
String sql = "SELECT * FROM client WHERE nom = '" + nom + "'";
@SuppressWarnings("unchecked")
List<Client> list = session.createSQLQuery(sql).addEntity(Client.class).list();
trans.commit();
session.close();
if(list.isEmpty()) {
return null;
}
return list.get(0);
}
@Override
public boolean FindClientForLogin(String nom, String pwd) {
Session session = connect();
Transaction trans = session.beginTransaction();
String sql = "SELECT * FROM client WHERE nom = '" + nom + "'" + "AND pwd = '" + pwd + "'";
@SuppressWarnings("unchecked")
List<Client> list = session.createSQLQuery(sql).addEntity(Client.class).list();
trans.commit();
session.close();
if(list.isEmpty()) {
return false;
}
return true;
} @Override
public List<Client> ListAll() {
Session session = connect();
Transaction trans = session.beginTransaction();
String sql = "SELECT * FROM client";
@SuppressWarnings("unchecked")
List<Client> list = (session.createSQLQuery(sql).addEntity(Client.class).list());
trans.commit();
session.close();
return list;
}
public static void main(String[] args) {
ClientDAO dao = new ClientDAOImpl();
Client client = new Client("user2", "123");
dao.AddClient(client);
List<Client> list = dao.ListAll();
//Client c = dao.FindClientByNom("admin");
//System.out.println(c);
Iterator<Client> it = list.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
}
}
如果我这样写,该如何写applicationContext.cml呢?(结合上我最一开始的LoginAction代码 这是我全部的java代码了 除了俩jsp没贴过来)
那应该怎么写就会用到spring呢?