贫道放假第二天了,是时候写一个简单的入门了,ssh三大框架啊的简单整合。
做一个简单的用户登录。创建好一个web工程后,添加为Spring工程添加hibernate工程是会将hibernate.cfg.xml集成到applicationContext中既然是用户登录首先需要一个实体类。
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<span style="white-space:pre"> </span><!--连接数据库-->
<property name="driverClassName" value="com.mysql.jdbc.Driver">
</property>
<property name="url" value="jdbc:mysql://localhost:3306/demo"></property>
<property name="username" value="root"></property>
<property name="password" value="123456"></property>
</bean>
<span style="white-space:pre"> </span><!-- 配置会话工厂 <span style="font-family: Arial, Helvetica, sans-serif;">LocalSessionFactoryBean 不能使用注解</span><span style="font-family: Arial, Helvetica, sans-serif;"> --></span>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<span style="white-space:pre"> </span><!--将<span style="font-family: Arial, Helvetica, sans-serif;">dataSource注入到sessionFactory中</span>-->
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<prop key="hibernate.show_sql">
true
</prop>
<prop key="hibernate.format_sql">
true
</prop>
</props>
</property>
<property name="mappingResources">
<list>
<span style="white-space:pre"> </span><!--hibernate中的maping映射位置-->
<value>com/entity/User.hbm.xml</value>
</list>
</property>
</bean>
建立实体类User.java
package com.entity;
/**
* User entity. @author MyEclipse Persistence Tools
*/
public class User implements java.io.Serializable {
// Fields
/**
*
*/
private static final long serialVersionUID = 4585221013478533506L;
private Integer id;
private String username;
private String password;
// Constructors
/** default constructor */
public User() {
}
/** full constructor */
public User(String username, String password) {
this.username = username;
this.password = password;
}
// Property accessors
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return this.username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return this.password;
}
public void setPassword(String password) {
this.password = password;
}
}
与数据库建立关系映射User.hbm.xml
<hibernate-mapping>
<class name="com.entity.User" table="user" catalog="demo">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="identity" />
</id>
<property name="username" type="java.lang.String">
<column name="username" length="20" />
</property>
<property name="password" type="java.lang.String">
<column name="password" length="20" />
</property>
</class>
</hibernate-mapping>
此时,要进行数据CRUD方法建立dao层操作,BaseDao曾为通用操作,为了降低代码的冗余,抽取出来,可以改为两个参数一个传递类类型一个传递对象,BaseDao需要继承HibernateDaoSupport,这个类中提供了链接数据库中所需要的sessionFactory,同时Spring将hibernate中大量的公有操作制作成为了代码模板就是获取session等语句。使用者只用将要使用的方法补全其余的将有Spring来进行管理,所以applicationContext中的数据库方言要配置正确,一个sessionFactory对应于一个数据库实例。
public class BaseDao extends HibernateDaoSupport{
<span style="white-space:pre"> </span>//public void addObject(Class<?> clazz,Object o)
public void addObject(Object o){
getHibernateTemplate().save(o.getClass().getSimpleName().toString(),o);
}
public void delectObject(Object o){
getHibernateTemplate().delete(o.getClass().getSimpleName().toString(),o);
}
public void updateObject(Object o){
getHibernateTemplate().update(o.getClass().getSimpleName().toString(), o);
}
@SuppressWarnings("rawtypes")
public List selectObject(String hql){
return getHibernateTemplate().find(hql);
}
}
这时公有操作就写完了。这时用UserDao来继承BaseDao
package com.dao;
import java.util.List;
import com.entity.User;
public class UserDaoImpl extends BaseDao{
public UserDaoImpl(){
//用于观察启动时,被Spring加载进入IOC容器中
System.out.println("UserDaoImpl______________________________________");
}
public boolean queryById(User u){
boolean flags = false;
String hql="from User where username='"+u.getUsername()+"' and password='"+u.getPassword()+"'";
@SuppressWarnings("unchecked")
List<User> list = selectObject(hql);
if(list.size()>0)
flags = true;
return flags;
}
}
这是dao层完毕,需要组成业务逻辑,但是简单登录,没有其他要求,就简单调用一下就好。
public class UserService {
private UserDaoImpl userDao;
public UserService(){
System.out.println("UserService____________________________________");
}
public boolean register(User u) {
return userDao.queryById(u);
}
public UserDaoImpl getUserDao() {
return userDao;
}
public void setUserDao(UserDaoImpl userDao) {
this.userDao = userDao;
}
}
这时需要注入一个UserDaoImpl,才能操作,new操作是在内存的堆上分配内存存储,但是用了spring依赖注入,便不需要进行new,有框架进行管理。
需要用action控制页面了。
public class UserAction {
private UserService userService;
private User user;
public UserAction(){
System.out.println("UserAction is running ------------------");
}
public String register() {
boolean flags = userService.register(user);
if (flags)
return "success";
return "false";
}
public UserService getUserService() {
return userService;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
配置一下spring和struts。applicationContext中后来的配置文件
<bean id="user" class="com.entity.User"></bean>
<bean id="userDao" class="com.dao.UserDaoImpl">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<bean id="userService" class="com.service.UserService">
<property name="userDao" ref="userDao"></property>
</bean>
<span style="white-space:pre"> </span><!--<span style="font-family: Arial, Helvetica, sans-serif;">scope="prototype"默认情况下是单例模式,设置后可以为每一次请求创建一个action</span><span style="font-family: Arial, Helvetica, sans-serif;">--></span><span style="font-family: Arial, Helvetica, sans-serif;">
</span> <bean id="userAction" class="com.action.UserAction" scope="prototype">
<property name="userService" ref="userService"></property>
<property name="user" ref="user" ></property>
</bean>
配置struts也要集成到Spring中去,一旦不是有spring生成管理则会报空指针异常。
<constant name="struts.action.extension" value="do,action"/>
<package name="user" namespace="/" extends="struts-default">
<!-- name: 与JSP中的form表单中的action属性一致即可 class:要使用spring中的id来映射否则会报空指针 method:此类中的哪一个方法 -->
<action name="user_*" class="userAction" method="{1}">
<result name="success">success.jsp</result>
<result name="false">index.jsp</result>
</action>
</package>
</<span style="font-family: Arial, Helvetica, sans-serif;">constant</span><span style="font-family: Arial, Helvetica, sans-serif;">></span>
需要导入struts2-spring-plugin.jar。index.jsp
<div align="center">
<form action="user_register.do" method="get">
姓名: <input type="text" name="user.username"/><br />
密码: <input type="password" name="user.password"/><br />
<input type="submit" value="ok"/>
</form>
</div>
这样ssh就简单的集成完了