SSH整合(附上IbaseDao和分页查询)

来源:互联网 发布:国产纪录片 知乎 编辑:程序博客网 时间:2024/06/07 00:47

第一步:导入jar包

需要准备以下jar包

ssh:jar包链接:hibernate4.3版本,spring4.3版本,struts2.0版本 ------------------http://pan.baidu.com/s/1nvfo4el

tomcat8.0的jar包链接-------------------------http://pan.baidu.com/s/1o78cy9c


web.xml配置

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee         http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"         version="3.1">    <filter>        <filter-name>openSessionInView</filter-name>        <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>    </filter>    <filter-mapping>        <filter-name>openSessionInView</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>    <filter>        <filter-name>struts2</filter-name>        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>    </filter>    <filter-mapping>        <filter-name>struts2</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>    <context-param>        <param-name>contextConfigLocation</param-name>        <param-value>classpath:spring.xml</param-value>    </context-param>    <listener>        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>    </listener></web-app>



第二步:model层用hibernate;

1.建立hibernate.xml

<?xml version='1.0' encoding='utf-8'?><!DOCTYPE hibernate-configuration PUBLIC    "-//Hibernate/Hibernate Configuration DTD//EN"    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration>  <session-factory>    <property name="connection.url">jdbc:mysql://localhost:3306/test</property>    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>      <mapping class="com.iotek.entity.District"/>      <mapping resource="com/iotek/entity/District.hbm.xml"/>      <mapping class="com.iotek.entity.Street"/>      <mapping resource="com/iotek/entity/Street.hbm.xml"/>    <mapping class="com.iotek.entity.User"/>    <mapping resource="com/iotek/entity/User.hbm.xml"/>      <!-- <property name="connection.username"/> -->    <!-- <property name="connection.password"/> -->    <!-- DB schema will be updated if needed -->    <!-- <property name="hbm2ddl.auto">update</property> -->  </session-factory></hibernate-configuration>




2.User.hbm.xml


<?xml version='1.0' encoding='utf-8'?><!DOCTYPE hibernate-mapping PUBLIC    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping>    <class name="com.iotek.entity.User" table="user" schema="test">        <id name="userId">            <column name="userId" sql-type="int(11)"/>            <!--设置主键自增,千万不要忘-->            <generator class="identity"/>        </id>        <property name="userName">            <column name="userName" sql-type="varchar(40)" length="40"/>        </property>        <property name="userPwd">            <column name="userPwd" sql-type="varchar(40)" length="40"/>        </property>    </class></hibernate-mapping>


3.实体类

@Entitypublic class User {    private Integer userId;    private String userName;    private String userPwd;    @Id    @Column(name = "userId", nullable = false)    public Integer getUserId() {        return userId;    }    public void setUserId(Integer userId) {        this.userId = userId;    }    @Basic    @Column(name = "userName", nullable = false, length = 40)    public String getUserName() {        return userName;    }    public void setUserName(String userName) {        this.userName = userName;    }    @Basic    @Column(name = "userPwd", nullable = false, length = 40)    public String getUserPwd() {        return userPwd;    }    public void setUserPwd(String userPwd) {        this.userPwd = userPwd;    }    @Override    public boolean equals(Object o) {        if (this == o) return true;        if (o == null || getClass() != o.getClass()) return false;        User user = (User) o;        if (userId != null ? !userId.equals(user.userId) : user.userId != null) return false;        if (userName != null ? !userName.equals(user.userName) : user.userName != null) return false;        if (userPwd != null ? !userPwd.equals(user.userPwd) : user.userPwd != null) return false;        return true;    }    @Override    public int hashCode() {        int result = userId != null ? userId.hashCode() : 0;        result = 31 * result + (userName != null ? userName.hashCode() : 0);        result = 31 * result + (userPwd != null ? userPwd.hashCode() : 0);        return result;    }}



第三步.Dao,Service,用spring来管理

spring配置


<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xmlns:context="http://www.springframework.org/schema/context"        xmlns:tx="http://www.springframework.org/schema/tx"       xmlns:aop="http://www.springframework.org/schema/aop"       xmlns:mvc="http://www.springframework.org/schema/mvc"       xsi:schemaLocation="       http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans.xsd         http://www.springframework.org/schema/context         http://www.springframework.org/schema/context/spring-context.xsd         http://www.springframework.org/schema/tx         http://www.springframework.org/schema/tx/spring-tx.xsd        http://www.springframework.org/schema/mvc        http://www.springframework.org/schema/mvc/spring-mvc.xsd        http://www.springframework.org/schema/aop         http://www.springframework.org/schema/aop/spring-aop.xsd">       <context:component-scan base-package="com.iotek"/>       <!--创建数据源,可以使用c3p0-->       <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">              <property name="driverClass" value="com.mysql.jdbc.Driver"/>              <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test"/>              <property name="user" value="root"/>              <property name="password" value="12345"/>              <property name="initialPoolSize" value="3"/>              <property name="maxPoolSize" value="100"/>              <property name="maxStatements" value="1000"/>              <property name="acquireIncrement" value="5"/>       </bean>       <!--创建sessionFactory-->       <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">              <property name="dataSource" ref="dataSource"/>              <property name="hibernateProperties">                     <props>                            <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>                            <prop key="hibernate.show_sql">true</prop>                            <prop key="hibernate.format_sql">true</prop>                     </props>              </property>              <property name="mappingDirectoryLocations">                     <list>                            <value>classpath:com/iotek/entity/</value>                     </list>              </property>       </bean>       <!--配置HibernateTemplate-->       <bean id="ht" class="org.springframework.orm.hibernate4.HibernateTemplate">              <property name="sessionFactory" ref="sessionFactory"/>       </bean>       <!--事务管理配置-->       <bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">              <property name="sessionFactory" ref="sessionFactory"/>              <property name="dataSource" ref="dataSource"/>       </bean>       <!--<tx:annotation-driven transaction-manager="txManager"/>-->       <!--指定程序中方法的事务管理方式-->       <tx:advice id="txAdvice" transaction-manager="txManager">              <tx:attributes>                     <tx:method name="get*" read-only="true"/>                     <tx:method name="*" read-only="false"/>              </tx:attributes>       </tx:advice>       <!--程序中哪些方法是需要事务管理的-->       <aop:config>              <aop:pointcut id="pt" expression="execution(* com.iotek.service.*.*(..))"/>              <aop:advisor advice-ref="txAdvice" pointcut-ref="pt"/>       </aop:config></beans>


顶级接口,IBaseDao

public interface IBaseDAO<T> {    public List<T> getAll(String hql);    public List<T> getAll(Class<T> clazz);    public T getEntityById(Class<T> clazz, Serializable id);    public List<T> getEntityByParams(String hql, Object... params);    public T getUniqueEntityByParam(final String hql, final Object... params);    public void save(T obj);    public void update(T t);    public void delete(String hql, Serializable id);    public PageBean<T> getPageBean(final int currentPage, final int pageSize,                                   final String hql, final Object... params);}
顶级公共接口实现类

/*创建顶级接口*/public class BaseDAOImpl<T> implements IBaseDAO<T> {    @Resource(name="ht")    private HibernateTemplate ht;    public void setHt(HibernateTemplate ht) {        this.ht = ht;    }   /*通过外面传入hql语句查询所有*/    @Override    public List<T> getAll(String hql) {        return (List<T>)ht.find(hql);    }    /*通过传入类class文件查询所有*/    @Override    public List<T> getAll(Class<T> clazz) {        String hql = "from "+clazz.getSimpleName();        return (List<T>) ht.find(hql);    }    /*通过id来查*/    @Override    public T getEntityById(Class<T> clazz,Serializable id) {        return  ht.get(clazz,id);    }    /*通过hql语句和传入参数查询*/    @Override    public List<T> getEntityByParams(String hql, Object... params) {        return  (List<T>)ht.find(hql,params);    }    /*增加*/    @Override    public void save(T obj) {        ht.save(obj);    }    /*更改*/    @Override    public void update(T obj) {        ht.update(obj);    }    /*删除,通过ht未定义的语句,需要回调方法*/    @Override    public void delete(final String hql,final Serializable id) {        ht.execute(new HibernateCallback<T>() {            @Override            public T doInHibernate(Session session) throws HibernateException{                Query query = session.createQuery(hql);                query.setParameter(0,id);                query.executeUpdate();                return null;            }        });    }    /*分页查询*/    @Override    public PageBean<T> getPageBean(int currentPage, int pageSize, String hql, Object... params) {        final PageBean<T> pageBean = new PageBean<T>();        pageBean.setCurrentPage(currentPage);        pageBean.setPageSize(pageSize);        ht.execute(new HibernateCallback<List<T>>() {            @Override            public List<T> doInHibernate(Session session) throws HibernateException{                Query query = session.createQuery(hql);                if(params!=null){                    for(int i=0;i<params.length;i++){                        query.setParameter(i,params[i]);                    }                }                ScrollableResults scroll = query.scroll();                scroll.last();                int totalCount = scroll.getRowNumber()+1;                pageBean.calcTotalPage(totalCount);                query.setFirstResult(pageBean.getBeginIndex());                query.setMaxResults(pageSize);                List<T> entityList = query.list();                pageBean.setDataList(entityList);                return entityList;            }        });        return pageBean;    }    /*返回一条语句进行查询*/    @Override    public T getUniqueEntityByParam(final String hql, final Object... params) {        T obj = ht.execute(new HibernateCallback<T>() {            @Override            public T doInHibernate(Session session) throws HibernateException{                Query query = session.createQuery(hql);                for(int i=0;i<params.length;i++){                    query.setParameter(i,params[i]);                }                return (T)query.uniqueResult();            }        });        return obj;    }}

dao层子接口(写上子接口私有方法)

public interface IUserDAO extends IBaseDAO {    public User getUserByNameAndPwd(User user);    public PageBean getPageBean(int currentPage, int PageSize);    public List<User> getAllByHql();    public List<User> getAllByClass();}

daoImpl实现类方法

@Repository("userDAO")public class UserDAOImpl extends BaseDAOImpl implements IUserDAO {    @Resource(name="ht")    private HibernateTemplate ht;    public HibernateTemplate getHt() {        return ht;    }    public void setHt(HibernateTemplate ht) {        this.ht = ht;    }    @Override    public User getUserByNameAndPwd(User user) {        String hql = "from User user where user.userName=? and user.userPwd=?";        List<User> userList = (List<User>) ht.find(hql,user.getUserName(),user.getUserPwd());        return userList.size()>0?userList.get(0):null;    }    @Override    public PageBean<User> getPageBean(int currentPage, int pageSize) {        return super.getPageBean(currentPage,pageSize,"from User");    }    @Override    public List<User> getAllByHql() {        return super.getAll("from User");    }    @Override    public List<User> getAllByClass() {        return super.getAll(User.class);    }}


.service层

public interface IUserService {    /*登录业务*/    public boolean isLogin(User user);    /*分页查询*/    public PageBean getPageBean(int currentPage, int pageSize);    /*查询所有的业务*/    public List<User> getAllByHql();    public List<User> getAllByClass();}

serviceImpl层

@Service("userService")public class UserServiceImpl implements IUserService {    @Resource(name="userDAO")    private IUserDAO userDAO;    public IUserDAO getUserDAO() {        return userDAO;    }    public void setUserDAO(IUserDAO userDAO) {        this.userDAO = userDAO;    }    @Override    public boolean isLogin(User user) {        return userDAO.getUserByNameAndPwd(user) == null ? false : true;    }    @Override    public PageBean getPageBean(int currentPage, int pageSize) {        return userDAO.getPageBean(currentPage,pageSize);    }    @Override    public List<User> getAllByHql() {        return userDAO.getAllByHql();    }    @Override    public List<User> getAllByClass() {        return userDAO.getAllByClass();    }}


第四步:controller层

struts.xml配置

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"        "http://struts.apache.org/dtds/struts-2.3.dtd"><struts>    <package name="default" namespace="/" extends="struts-default">        <!--和Spring集成后,Action类的实例化由Spring完成,所以这个class属性就是要写Bean的id-->        <action name="*Test" class="TestAction" method="{1}">            <result name="{1}">/{1}.jsp</result>        </action>        <action name="*User" class="UserAction" method="{1}">            <result name="{1}_success">/hello.jsp</result>            <result name="{1}_faile">/index.jsp</result>            <result name="user_page">/userPage.jsp</result>            <result name="query_all">/query_all.jsp</result>        </action>        <action name="*District" class="DistrictAction" method="{1}">            <result name="detail">/district_detail.jsp</result>        </action>    </package></struts>



controller层

@Controller("UserAction")public class UserAction {    private User user;    private int currentPage;    private int pageSize;    @Resource(name="userService")    private IUserService userService;    public User getUser() {        return user;    }    public int getCurrentPage() {        return currentPage;    }    public void setCurrentPage(int currentPage) {        this.currentPage = currentPage;    }    public int getPageSize() {        return pageSize;    }    public void setPageSize(int pageSize) {        this.pageSize = pageSize;    }    public void setUser(User user) {        this.user = user;    }    public IUserService getUserService() {        return userService;    }    public void setUserService(IUserService userService) {        this.userService = userService;    }    public String login(){        boolean flag = userService.isLogin(user);        if(flag == true){            return "login_success";        }        else{            return "login_faile";        }    }    public String page(){        PageBean<User> userPageBean = userService.getPageBean(currentPage,pageSize);        ActionContext.getContext().getSession().put("userPageBean",userPageBean);        return "user_page";    }    public String allSql(){        List<User> userList=userService.getAllByHql();        HttpServletRequest request= ServletActionContext.getRequest();        HttpSession session=request.getSession();        session.setAttribute("userList",userList);        return "query_all";    }    public String allClass(){        List<User> userList=userService.getAllByClass();       ActionContext.getContext().getSession().put("userList",userList);        return "query_all";    }    }

第五步.View层(jsp页面)

userPage

<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib prefix="s" uri="/struts-tags" %><%    String path = request.getContextPath();    String basePath = request.getScheme() + "://" + request.getServerName() + ":"            + request.getServerPort() + path + "/";%><html><head>    <base href="<%=basePath%>">    <title></title></head><body><s:iterator value="#session.userPageBean.dataList" id="user">    <s:property value="#user.id"/> &nbsp;&nbsp;&nbsp;&nbsp;    <s:property value="#user.userName"/><br/></s:iterator><a href="pageUser.action?currentPage=${sessionScope.userPageBean.prePage}">上一页</a>&nbsp;<s:textfield name="currentPage" value=""/>${sessionScope.userPageBean.currentPage} / ${sessionScope.userPageBean.totalPage}&nbsp;<a href="pageUser.action?currentPage=${sessionScope.userPageBean.nextPage}">下一页</a></body></html>

query_all.jsp


<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib prefix="s" uri="/struts-tags" %><html><head>    <title>Title</title></head><body><s:iterator value="#session.userList" id="user">    <s:property value="#user.userName"></s:property></s:iterator></body></html>








1 0
原创粉丝点击