SSH框架,AjaxJson显示数据,项目框架搭建;注意action跳转不要叹号,springMVC和springAnnotation要修改spring配置文件
SSH已经学完一周多了,一直忙着研究服务端,今天抽空总结下,用配置文件写的,一般情况spring应该使用annotation
加入支持的顺序是先Spring-》Hibernate-》struts。Spring中加入的支持包与Spring + JDBC开发时完全相同。
摘自liky框架结构,这样的结构一般小型项目足够了
加入hibernate
生成映射后,在web.xml中还需要加入监听配置。
> |
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/spring/applicationContext-*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
application-hibernate.xml
<?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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="oracle.jdbc.OracleDriver">
</property>
<property name="url"
value="jdbc:oracle:thin:@localhost:1521:orcl">
</property>
<property name="username" value="zl"></property>
<property name="password" value="123"></property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.Oracle9Dialect
</prop>
<prop key="hibernate.show_sql">
true
</prop>
<!-- 项目上线时要删掉,不让别人看见sql语句 -->
<prop key="hibernate.format_sql">
true
</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>hibernate/Province.hbm.xml</value>
<value>hibernate/City.hbm.xml</value></list>
</property></bean>
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
</beans>
daoImpl,别忘了配置
package com.kane.dao.Impl;
import java.util.List;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.kane.dao.IProvince;
import com.kane.pojo.Province;
public class ProvinceImpl extends HibernateDaoSupport implements IProvince{
public void docreate(Province v) throws Exception {
super.getHibernateTemplate().save(v);
}
public void doremove(Integer id) throws Exception {
super.getHibernateTemplate().delete(findById(id));
}
public List<Province> findAll() throws Exception {
return super.getHibernateTemplate().loadAll(Province.class);
}
public Province findById(Integer id) throws Exception {
return super.getHibernateTemplate().get(Province.class, id);
}
public List<Province> findByPage(int pageNo, int pageSize, String column,
String keyword) throws Exception {
// Spring没有封装HQL版本的分页查询方法.
// 1、使用Criteria来完成分页查询
DetachedCriteria criteria=DetachedCriteria.forClass(Province.class);
//加入模糊查询条件
criteria.add(Restrictions.like(column, "%"+keyword+"%"));
List<Province> all=super.getHibernateTemplate().findByCriteria(criteria,
(pageNo-1)*pageSize,pageSize);
// 2、使用Spring的扩展接口,通过匿名内部类的形式来扩展Spring原有的方法
// List all = super.getHibernateTemplate().executeFind(
// new HibernateCallback() {
// public Object doInHibernate(Session session)
// throws HibernateException, SQLException {
// // 这里就是封装好的Hibernate中的操作。
// // 内部类要使用外部类的属性,必须为属性加入final关键字
// String hql = "FROM News AS n WHERE n." + column + " LIKE ?";
// Query query = session.createQuery(hql);
// query.setString(0, "%"+keyword+"%");
// query.setFirstResult((pageNo - 1) * pageSize);
// query.setMaxResults(pageSize);
//
// return query.list();
// }
// });
return all;
}
public int getCount(String column, String keyword) throws Exception {
String hql="SELECT COUNT(P) FROM Province AS P WHERE P."+column+" LIKE ?";
List allList=super.getHibernateTemplate().find(hql, "%"+keyword+"%");
return ((Long) allList.get(0)).intValue();//默认返回long型,这里用到
}
public void update(Province v) throws Exception {
super.getHibernateTemplate().update(v);
}
}
serviceImpl
package com.kane.service.Impl;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.kane.dao.IProvince;
import com.kane.pojo.Province;
import com.kane.service.IProvinceService;
/**
* 由AOP解决预处理和断开连接的工作
* @author lenovo
*
*/
public class ProvinceServiceImpl implements IProvinceService{
private IProvince provinceImpl;
public IProvince getProvinceImpl() {
return provinceImpl;
}
public void setProvinceImpl(IProvince provinceImpl) {
this.provinceImpl = provinceImpl;
}
public Map<String, Object> list(int pageNo, int pageSize, String keyword,
String column) throws Exception {
Map<String,Object> map=new HashMap<String, Object>();
map.put("allProvince", provinceImpl.findByPage(pageNo, pageSize, column, keyword));
map.put("allCount", provinceImpl.getCount(column, keyword));
return map;
}
public List<Province> findAll() throws Exception {
return provinceImpl.findAll();
}
}
struts.xml配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<include file="struts/struts-root.xml"></include>
<include file="struts/struts-front.xml"></include>
<include file="struts/struts-back.xml"></include>
<package name="my_project_default" extends="struts-default" abstract="true">
<global-results>
<result name="forward">/forward.jsp</result>
<result name="input">/error.jsp</result>
</global-results>
</package>
</struts>
这里用strut-root配置读取action
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="root" namespace="/" extends="my_project_default">
<action name="province_*" class="provinceAction" method="{1}"><!-- _可以换成其他 -->
<result name="index">/index.jsp
</result>
</action>
</package>
</struts>
注意出现懒汉加载
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.kane.pojo.City" table="CITY" schema="ZL">
<id name="cid" type="java.lang.Integer">
<column name="CID" precision="8" scale="0" />
<generator class="increment" />
</id>
<many-to-one name="province" lazy="false"
class="com.kane.pojo.Province" fetch="select">
<column name="PID" precision="8" scale="0" />
</many-to-one>
<property name="cname" type="java.lang.String">
<column name="CNAME" length="30" />
</property>
</class>
</hibernate-mapping>
这里做个测试,具体页面显示值将采用Ajax提交json数据,****不允许传太多图片,内容在另一篇博客
action代码
package com.kane.action;
import java.util.List;
import com.kane.pojo.Province;
import com.kane.service.IProvinceService;
import com.opensymphony.xwork2.ActionSupport;
public class ProvinceAction extends ActionSupport{
private IProvinceService provinceServiceImpl;
public IProvinceService getProvinceServiceImpl() {
return provinceServiceImpl;
}
public void setProvinceServiceImpl(IProvinceService provinceServiceImpl) {
this.provinceServiceImpl = provinceServiceImpl;
}
public String indexPre() throws Exception {
List<Province> list=provinceServiceImpl.findAll();
System.out.println(list.get(0).getCities());
return "index";
}
}