ssh,


1. Springstruts2的整合

1.1. 导入struts2的基础jar

 

1.2. 新建Struts的配置文件

1.3. 配置struts2的核心控制器

 <!-- struts2核心控制器 -->

  <filter>

  <filter-name>StrutsPrepareAndExecuteFilter</filter-name>

  <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

  </filter>

  <filter-mapping>

  <filter-name>StrutsPrepareAndExecuteFilter</filter-name>

  <url-pattern>/*</url-pattern>

  </filter-mapping>

 

1.4. 导入spring的基础包

 

 

1.5. 新建spring的配置文件

1.6. web.xml中配置ContextLoaderListener

作用:加载spring容器

 <!-- 配置spring容器  -->

  <listener>

   <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

  </listener>

  

  <!--  spring的配置文件  -->

  <context-param>

    <param-name>contextConfigLocation</param-name>

    <param-value>classpath:applicationContext.xml</param-value>

  </context-param>

 

1.7. 导入springstruts2的整合包

struts2-spring-plugin-2.3.24.jar

 

1.8. struts.xml中配置由spring管理action

<!--  配置由spring管理action  --> 

<constant name="struts.objectFactory" value="spring"></constant>

 

 

 

 

2. Springhibernate整合

2.1. 导入hibernatejar

 

 

2.2. 导入Spring整合hibernate的包

spring-jdbc-4.2.6.RELEASE.jar

spring-orm-4.2.6.RELEASE.jar

spring-tx-4.2.6.RELEASE.jar

spring-aop-4.2.6.RELEASE.jar

 

2.3. applicationContext.xml中配置数据源

<!-- 引入properties文件 -->

<context:property-placeholder location="classpath:database.properties"/>

<!-- 配置c3p0数据源 -->

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">

<!-- 最基本:连接数据库的四大要素 -->

<property name="driverClass"  value="${jdbc.driver}"></property>

<property name="jdbcUrl" value="${jdbc.url}"></property>

<property name="user" value="${jdbc.username}"></property>

<property name="password" value="${jdbc.password}"></property>

</bean>

 

 

2.4. applicationContext.xml中配置会话工厂bean

配置hibernate参数:

    数据源

方言

映射文件

<!-- 配置会话工厂 -->

<bean id="sessionFactory"

class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

<!-- 引入数据源 -->

<property name="dataSource" ref="dataSource"></property>

<!-- 配置hibernate相关的属性 -->

<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>

<value>classpath:cn/bdqn/entity/hbm/User.hbm.xml</value>

</list>

</property>

</bean>

 

2.5. hibernateTemplateAPI

 

 

2.6. 编写测试Dao

public class UserDao extends HibernateDaoSupport{

  

public void findUser(){

 User user = this.getHibernateTemplate().get(User.class, 1);

 System.out.println("用户:"+user);

}

}

 

 

2.7. spring配置文件中配置dao

<!--spring管理bean -->

<bean id="userDao" class="cn.bdqn.dao.UserDao">

<property name="sessionFactory" ref="sessionFactory"></property>

</bean>

 

 

3. 配置spring管理事务

3.1. 配置事务管理器

 

<!-- 配置事务管理器  -->

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">

     <!-- 注入会话工厂 -->

     <property name="sessionFactory" ref="sessionFactory"></property>

</bean>

3.2. 开启注解管理事务

<!-- 注解管理事务 -->

<tx:annotation-driven transaction-manager="transactionManager"/>

3.3. 测试事务是否有效

 Spring整合junit4

导入jar

spring-test-4.2.6.RELEASE.jar

 

测试代码

/**

 * Spring整合junit4

 * @author Administrator

 */

//使用spring整合junit4的运行器

@RunWith(SpringJUnit4ClassRunner.class)

//加载配置文件

@ContextConfiguration(locations="classpath:applicationContext.xml")

public class UserServiceTest {

@Autowired

private UserService userService;

//更新用户

@Test

public void testUpdateUser(){

userService.updateUser();

}

 

 

Service处理:

@Transactional

public void updateUser(){

User user = new User();

user.setUserId(1);

user.setUserName("zhangsan");

user.setUserPwd("123456");

userDao.updateUser(user);

int i = 1/0;

User user02 = new User();

user02.setUserId(2);

user02.setUserName("lisi");

user02.setUserPwd("123456");

userDao.updateUser(user02);

}

}

 

4. 注解配置ssh

4.1. Spring整合struts2

导入struts2的注解包

struts2-convention-plugin-2.3.16.3.jar

 

配置action的注解

 

配置spring管理

配置文件:

<!-- 扫描包  -->

    <context:component-scan base-package="cn.bdqn.action,cn.bdqn.service"></context:component-scan>

 

对应的需要spring管理的类:

   Action:

 

   Service:

 

 

 

5. Spring整合hibernate

5.1.  会话工厂配置

<!-- 配置会话工厂 -->

<bean id="sessionFactory"

class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">

<!-- 数据源 -->

<property name="dataSource" ref="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="packagesToScan" value="cn.bdqn.entity"></property>

</bean>

 

注意事项:会话工厂的bean为:

org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean

 

5.2. hibernateTemplate配置

<!-- 配置HibernateTemplate -->

<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">

  <!-- 注入sessionFactory -->

  <property name="sessionFactory" ref="sessionFactory"></property>

</bean>

 

5.3. Dao层代码

@Repository

public class UserDao {

@Resource

private HibernateTemplate hibernateTemplate;

public void findUser(){

//查询用户数据(ID=1

User user = hibernateTemplate.get(User.class, 1);

System.out.println("用户:"+user);

}

public void updateUser(User user){

hibernateTemplate.update(user);

System.out.println("更新用户数据");

}

 

}

 

6. 分页语句条件

 

 

 

<!--表格内容代码-->

<tbody>

<s:iterator value="pageUtil.list">

<tr id="row_1">

<td><s:property value="userId" /></td>

<td name="name"><s:property value="userName" /></td>

<td><a href="#"> <i class="fa fa-pencil-square-o"

title="编辑" aria-hidden="true"></i>

</a> <a href="#"> <i class="fa fa-trash" title="删除"

aria-hidden="true"></i>

</a></td>

</tr>

</s:iterator>

</tbody>

</table>

<!-- 分页器 start -->

<div class="pageStyle">

<span><b> <s:property value="pageUtil.totalCount" />

</b>  <s:property value="pageUtil.pageIndex" />/ <s:property

value="pageUtil.totalPageCount" />  

</span>

<ul class="pagination">

<li><a href="javascript:gotoPage(<s:property value='1'/>)">首页</a></li>

<li><a

href="javascript:gotoPage(<s:property value='pageUtil.prePageIndex'/>)">上页</a></li>

<s:bean name="org.apache.struts2.util.Counter" var="counter">

<s:param name="first" value="1" />

<s:param name="last" value="pageUtil.totalPageCount" />

<s:iterator>

<li

<s:if test="pageUtil.pageIndex==#counter.current-1">

   class="active"

   </s:if>><a

href="javascript:gotoPage(<s:property value='#counter.current-1'/>)">

<s:property value="#counter.current-1" />

</a></li>

</s:iterator>

</s:bean>

<li><a

href="javascript:gotoPage(<s:property value='pageUtil.nextPageIndex'/>)">下页</a></li>

<li><a

href="javascript:gotoPage(<s:property value='pageUtil.totalPageCount'/>)">尾页</a></li>

</ul>

</div>

<!-- 分页器 end -->

</div>

</body>

<script>

   function gotoPage(pageNum){

   var pageIndex =  document.getElementById("pageIndex");

   pageIndex.value = pageNum;

   //js提交表单

   document.getElementById("searchForm").submit();

   }

 

</script>

@Resource

private UserService userService;

private Integer pageIndex;

private Integer pageSize;

//搜索数据

private String username;

private PageUtil<User> pageUtil;

public PageUtil<User> getPageUtil() {

return pageUtil;

}

 

public void setPageIndex(Integer pageIndex) {

this.pageIndex = pageIndex;

}

public void setPageSize(Integer pageSize) {

this.pageSize = pageSize;

}

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

@Action(value = "login", results = { @Result(name = ActionSupport.SUCCESS, location = "/successPage.jsp") })

public String login() {

System.out.println("UserAction-----------login");

userService.updateUser();

return ActionSupport.SUCCESS;

}

@Action(value = "indexSupper", results = { @Result(name = ActionSupport.SUCCESS, location = "/index-supper.jsp") })

public String indexSupper() {

if(username==null){

username = "";

}

         //统计总条数

  int totalCount = userService.countUser(username);

  if(pageIndex==null){

  pageIndex = 1;

  }

   pageUtil = new PageUtil<User>(totalCount,pageIndex);

  List<User> userList = userService.findUserListByPage(username,pageUtil.getDatabaseOffset(),pageUtil.getPageSize());

  pageUtil.setList(userList);  

return ActionSupport.SUCCESS;

}

 

 

 

 

 

6.1. Dao

public int countUser(String username) {

int count = hibernateTemplate.execute(new HibernateCallback<Integer>() {

 

@Override

public Integer doInHibernate(Session session) throws HibernateException, SQLException {

Query query = session.createQuery("select count(userId) from User where userName like concat('%',?,'%')");

query.setString(0, username);

Integer count = ((Long)query.uniqueResult()).intValue();

return count;

}

});

return count;

}

 

public List<User> findUserListByPage(String username, int databaseOffset, int pageSize) {

List<User> userList = hibernateTemplate.execute(new HibernateCallback<List<User>>(){

 

@Override

public List<User> doInHibernate(Session session) throws HibernateException, SQLException {

 Criteria criteria = session.createCriteria(User.class);

 criteria.add(Restrictions.like("userName", "%"+username+"%"));//模糊查询

 criteria.setFirstResult(databaseOffset);

 criteria.setMaxResults(pageSize);

return criteria.list();

}});

return userList;

}

 

 

 

 

 

public class PageUtil<T> {

//默认每页显示的数量为5

private final static int DEFAULT_PAGESIZE =  5;

private int   totalCount;

private int   totalPageCount;

private int   pageIndex;

private int   pageSize;

private List<T>  list;

private int prePageIndex;

private int nextPageIndex;

public PageUtil(int totalCount, int pageIndex) {

this.totalCount = totalCount;

this.pageIndex = pageIndex;

this.pageSize = DEFAULT_PAGESIZE;

}

public PageUtil(int totalCount, int pageIndex, int pageSize) {

this(totalCount,pageIndex);

this.totalCount = totalCount;

this.pageIndex = pageIndex;

this.pageSize = pageSize;

}

public int getTotalCount() {

return totalCount;

}

public void setTotalCount(int totalCount) {

this.totalCount = totalCount;

}

public int getTotalPageCount() {

//计算

return totalCount%pageSize==0?(totalCount/pageSize):(totalCount/pageSize+1);

}

public void setTotalPageCount(int totalPageCount) {

this.totalPageCount = totalPageCount;

}

public int getPageIndex() {

return pageIndex;

}

public void setPageIndex(int pageIndex) {

this.pageIndex = pageIndex;

}

public int getPageSize() {

return pageSize;

}

public void setPageSize(int pageSize) {

this.pageSize = pageSize;

}

public int getPrePageIndex() {

if(pageIndex<=1){

return 1;

}else{

return  pageIndex-1;

}

}

public void setPrePageIndex(int prePageIndex) {

this.prePageIndex = prePageIndex;

}

public int getNextPageIndex() {

if(pageIndex>=getTotalPageCount()){

return pageIndex;

}else{

return  pageIndex+1;

}

}

public void setNextPageIndex(int nextPageIndex) {

this.nextPageIndex = nextPageIndex;

}

 

public List<T> getList() {

return list;

}

public void setList(List<T> list) {

this.list = list;

}

//数据库的下标

public int getDatabaseOffset(){

return (pageIndex-1)*pageSize;

}


相关内容

    暂无相关文章