您的位置:首页 > 其它

基于注解ssh的通用dao的crud

2016-07-12 23:18 204 查看
基于注解ssh的通用dao的crud

一.配置文件

web.xml配置文件
---------------------------------------------------------------------------------------------------------
<context-param>

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

<param-value>classpath:bean*.xml</param-value>

</context-param>

<!-- 配置struts2过滤器 -->

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

<!-- 配置请求过滤器,编码格式设为UTF-8-->

<filter>

<filter-name>springUtf8Encoding</filter-name>

<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

<init-param>

<param-name>encoding</param-name>

<param-value>UTF-8</param-value>

</init-param>

<!-- 强制ServeletResponse的编码格式和ServletRequest的编码格式一样 -->

<init-param>

<param-name>forceEncoding</param-name>

<param-value>true</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>springUtf8Encoding</filter-name>

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

</filter-mapping>

<!-- Spring为Hibernate4提供OpenSessionInview模式的过滤器 -->

<filter>

<filter-name>osiv</filter-name>

<filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>

</filter>

<filter-mapping>

<filter-name>osiv</filter-name>

<url-pattern>*.action</url-pattern>

<url-pattern>*.jsp</url-pattern>

</filter-mapping>

<!-- 防止内存泄露 -->

<listener>

<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>

</listener>

<listener>

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

</listener>
---------------------------------------------------------------------------------------------------------

jdbc.properties配置
jdbc.driverClassName=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3306/tour

jdbc.username=root

jdbc.password=1111

---------------------------------------------------------------------------------------------------------
log4j.properties配置略
ehcache.xml
---------------------------------------------------------------------------------------------------------
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>

<!-- 把主题配置成simple -->

<constant name="struts.ui.theme" value="simple" />

<!-- 是否缓存静态内容 -->

<constant name="struts.serve.static.browserCache" value="false"></constant>

<!-- 是否使用开发模式 -->

<constant name="struts.devMode" value="true"></constant>

<!-- 是否启用动态调用 -->

<constant name="struts.enable.DynamicMethodInvocation" value="false" />

<!-- 是否缓存静态内容 -->

<constant name="struts.configuration.xml.reload" value="false"></constant>
<!-- 把Struts2中bean对象的创建交给spring -->

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

<package name="myStruts2" namespace="/" extends="struts-default">

<action name="student_*" class="com.lm.controller.StudentAction" method="{1}">

<result name="list">/list.jsp</result>

<result name="update">/update.jsp</result>

<result name="input">/input.jsp</result>

</action>

</package>

</struts>

说明:基础的的crud
---------------------------------------------------------------------------------------------------------
spring 的配置文件
bean.xml
说明:基于ioc注解,事务是配置文件的,hibernate配置也在xml中,实体是基于jpa注解的

<?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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"

xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.1.xsd"> <context:component-scan base-package="com.lm"/>

<context:annotation-config></context:annotation-config>
<!-- spring文件加载器,加载指定文件到spring -->

<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- 配置c3p0数据源 -->

<bean id="dataSource" destroy-method="close" class="com.mchange.v2.c3p0.ComboPooledDataSource">

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

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

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

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

<property name="minPoolSize" value="10"/>

<property name="maxPoolSize" value="200"/>

</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">

<property name="dataSource" ref="dataSource" /><!-- 引用数据源 -->

<property name="packagesToScan">

<list>

<value>com.lm.entity</value><!-- 加载hibernate的jpa注解形式的实体类 -->

</list>

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

<prop key="hibernate.hbm2ddl.auto">update</prop>

<!--<prop key="hibernate.current_session_context_class">thread</prop>-->

</props>

</property>

</bean>

<!-- hibernate事务 管理-->

<bean id="transactionManager" class="org.springframework.orm.hibernate4.Hibernat
cd54
eTransactionManager">

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

</bean>
<!-- 配置事务 -->

<tx:advice id="txAdvice" transaction-manager="transactionManager">

<tx:attributes>

<tx:method name="save*" isolation="READ_COMMITTED" propagation="REQUIRED" read-only="false"/>

<tx:method name="get*" isolation="READ_COMMITTED" propagation="REQUIRED" read-only="true"/>

<tx:method name="load*" isolation="READ_COMMITTED" propagation="REQUIRED" read-only="false"/>

<tx:method name="update*" isolation="READ_COMMITTED" propagation="REQUIRED" read-only="false"/>

<tx:method name="delete*" isolation="READ_COMMITTED" propagation="REQUIRED" read-only="false"/>

<tx:method name="find*" isolation="READ_COMMITTED" propagation="REQUIRED" read-only="false"/>

<tx:method name="*" isolation="READ_COMMITTED" propagation="REQUIRED" read-only="false"/>

</tx:attributes>

</tx:advice>

<!-- 在aop中配置事务切入点 -->
<aop:config>

<!-- 配置切入点 -->

<aop:pointcut expression="execution( * com.lm.service.*.*(..))" id="allMethod"/>
<!-- 配置通知器 -->

<aop:advisor advice-ref="txAdvice" pointcut-ref="allMethod"/>

</aop:config>

</beans>

说明:

事务为什么一般配置在service ?
事务的实质就是要你操作数据库时从一而终,要么全部完成,要么回滚撤销所有操作,在dao层的方法对数据库的操作通常来说是简单的,没业务逻辑性的,所以对于这种加了一个事务也可以,但没必要;

但在service层,里面的方法通常是包含一些复杂逻辑的,一个方法可能就调用了dao的多个方法,所以就必须做到事务管理,要么service方法里面的dao方法全部执行,要么全部撤销。这样才能保证数据库数据的正确性。

---------------------------------------------------------------------------------------------------------

二.后台架构java文件
实体entity:
package com.lm.entity;
import java.io.Serializable;
import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.Id;

import javax.persistence.Table;
@Entity

@Table(name="stu_tab")

public class Student implements Serializable{
private static final long serialVersionUID = -3791589693634535265L;

@Id

@GeneratedValue

private int id;

@Column(name="name")

private String name;

@Column(name="age")

private int age;

public Student() {

// TODO Auto-generated constructor stub

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

@Override

public String toString() {

return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";

}

}

---------------------------------------------------------------------------------------------------------
dao层
BaseDao:

package com.lm.dao.comm;
import java.util.List;

public interface BaseDao<T>{

public void add(T entity);

public void del(int id);

public void update(T entity);

public T get(int id);

public T load(int id);

List<T> selectAll();

}

---------------------------------------------------------------------------------------------------------

BaseDaoImpl:
package com.lm.dao.comm.impl;
import java.lang.reflect.ParameterizedType;

import java.util.List;
import org.hibernate.Query;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.springframework.beans.factory.annotation.Autowired;
import com.lm.dao.comm.BaseDao;

public class BaseDaoImpl<T> implements BaseDao<T> {

@Autowired

private SessionFactory sessionFactory;

public Session getSession(){

return sessionFactory.getCurrentSession();

}

private Class<T> clazz;

public BaseDaoImpl() {

//通过反射机制获取子类传递过来的实体类的类型信息

ParameterizedType type=(ParameterizedType) this.getClass().getGenericSuperclass();

this.clazz=(Class<T>) type.getActualTypeArguments()[0];

}

@Override

public void add(T entity) {

// TODO Auto-generated method stub

getSession().save(entity);

}
@Override

public void del(int id) {

// TODO Auto-generated method stub

T t=get(id);

getSession().delete(t);

}
@Override

public void update(T entity) {

// TODO Auto-generated method stub

getSession().update(entity);

}
@Override

public T get(int id) {

// TODO Auto-generated method stub

return (T)getSession().get(clazz, id);

}
@Override

public T load(int id) {

// TODO Auto-generated method stub

T t=(T)getSession().load(clazz, id);

return t;

}
@Override

public List<T> selectAll() {

System.out.println("--"+this.clazz.getSimpleName());

String hql="from "+this.clazz.getSimpleName();

Query query=getSession().createQuery(hql);

List<T> list=(List<T>)query.list();

return list;

}
}

StudentDao :
package com.lm.dao;

import com.lm.dao.comm.BaseDao;

import com.lm.entity.Student;

public interface StudentDao extends BaseDao<Student> {

}

StudentDaoImpl:
package com.lm.dao.impl;
import org.hibernate.Session;

import org.springframework.stereotype.Repository;

import com.lm.dao.StudentDao;

import com.lm.dao.comm.impl.BaseDaoImpl;

import com.lm.entity.Student;
@Repository("studentDao")

public class StudentDaoImpl extends BaseDaoImpl<Student> implements StudentDao {

@Override

public Session getSession() {

// TODO Auto-generated method stub

return super.getSession();

}

}

---------------------------------------------------------------------------------------------------------
service层
StudentService:
package com.lm.service;
import java.util.List;
import com.lm.entity.Student;

public interface StudentService {

public Student get(int id);

public void save(Student stu);

public List<Student> findAll();

public void delete(int id);

public void update(Student stu);

}

StudentServiceImpl:
package com.lm.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import com.lm.dao.StudentDao;

import com.lm.entity.Student;

import com.lm.service.StudentService;

@Service("studentService")

public class StudentServiceImpl implements StudentService {

@Autowired

private StudentDao studentDao;

@Override

public Student get(int id) {

Student student = studentDao.get(id);

return student;

}
@Override

public void save(Student stu) {

studentDao.add(stu);
}
@Override

public List<Student> findAll() {

// TODO Auto-generated method stub

return studentDao.selectAll();

}
@Override

public void delete(int id) {

studentDao.del(id);
}
@Override

public void update(Student stu) {

studentDao.update(stu);
}
}

---------------------------------------------------------------------------------------------------------
Controller 控制层
StudentAction:
package com.lm.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;
import com.lm.entity.Student;

import com.lm.service.StudentService;

import com.opensymphony.xwork2.ActionContext;

import com.opensymphony.xwork2.ActionSupport;

import com.opensymphony.xwork2.ModelDriven;
@Controller("studentAction")

public class StudentAction extends ActionSupport implements ModelDriven<Student> {
private static final long serialVersionUID = 9325690977237111L;

public Student stu;

@Autowired

public StudentService studentService;

@Override

public Student getModel() {

if(stu==null)

{

stu=new Student();

}

return stu;

}

public String add(){

studentService.save(stu);

return list();

}
public String update(){

studentService.update(stu);

return list();

}

public String list(){

List<Student> list=(List<Student>)studentService.findAll();

ActionContext.getContext().put("stuList", list);

return "list";

}

public String delete(){

studentService.delete(stu.getId());

return list();

}

public String edit(){

Student stu1=studentService.get(stu.getId());

ActionContext.getContext().put("stu", stu1);

return "update";

}
}
---------------------------------------------------------------------------------------------------------
省略jsp页面
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: