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"/> <s:property value="#user.userName"/><br/></s:iterator><a href="pageUser.action?currentPage=${sessionScope.userPageBean.prePage}">上一页</a> <s:textfield name="currentPage" value=""/>${sessionScope.userPageBean.currentPage} / ${sessionScope.userPageBean.totalPage}页 <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
- SSH整合(附上IbaseDao和分页查询)
- IDEA 下写出第一个 SSH 整合框架练手项目(三.部门和员工的分页查询)
- ssh分页查询和显示
- 主题:ssh整合分页
- SSH实现的分页查询和分页实现
- SSH分页(Hibernate分页查询)
- ssh实现查询分页
- ssh实现分页查询
- ssh分页+模糊查询
- SSH-------分页查询
- ssh整合分页struts2+hibernate
- SSH整合之分页技巧
- SSH整合之分页实现
- (J2EE)Struts+Spring+MyBatis整合实现分页分页查询
- SSH:Hibernate框架(Hibernate实现分页和综合查询详解)
- 使用Easy-UI 和SSH JPA 按条件查询分页
- SSH整合后,HQL查询必须知道的内容,HibernateTemplate中实现分页
- ssh中的分页查询商品
- 算法(未完)
- Ubuntu 64位系统中将c++文件编译成链接库(.so文件)
- R_数据正态分布检验
- session的创建时机
- python : turtle 画正多边形
- SSH整合(附上IbaseDao和分页查询)
- ZOJ3703 Happy Programming Contest
- [编程题]循环单词
- 坑记:FFmpeg用movie+overlay做图片水印
- Servlet基础
- Spring总结
- GIT能做什么、它和SVN在深层次上究竟有什么不同
- 表达式求值
- HDU5533 Dancing Stars on Me(计算几何)