需要的jar :
spring 需要的jar 12
spring-webmvc-3.2.2.RELEASE.jar
spring-web-3.2.2.RELEASE.jar
spring-tx-3.2.2.RELEASE.jar
spring-test-3.2.2.RELEASE.jar
spring-orm-3.2.2.RELEASE.jar
spring-jdbc-3.2.2.RELEASE.jar
spring-expression-3.2.2.RELEASE.jar
spring-core-3.2.2.RELEASE.jar
spring-context-3.2.2.RELEASE.jar
spring-beans-3.2.2.RELEASE.jar
spring-aspects-3.2.2.RELEASE.jar
spring-aop-3.2.2.RELEASE.jar
jar作用:http://www.linuxidc.com/Linux/2012-12/76682p3.htm
spring-依赖的jar 3
commons-logging-1.0.4.jar
aopalliance-1.0.jar
aspectjweaver.jar
log4j-1.2.16.jar
测试需要 1
com.springsource.org.junit-4.7.0.jar
hibernate:required 里面 8
hibernate-core-4.2.1.Final.jar
hibernate-commons-annotations-4.0.1.Final.jar
javassist-3.15.0-GA.jar
jboss-logging-3.1.0.GA.jar
jboss-transaction-api_1.1_spec-1.0.1.Final.jar
antlr-2.7.7.jar
dom4j-1.6.1.jar
hibernate-jpa-2.0-api-1.0.1.Final.jar
所有jar 的作用参考:http://www.linuxidc.com/Linux/2012-12/76682p2.htm
hibernate 缓存需要:4
ehcache-core-2.4.3.jar
slf4j-api-1.6.1.jar
slf4j-log4j12-1.6.1.jar
hibernate-ehcache-4.1.0.Final.jar
数据库: 1个
mysql-connector-java-5.1.10.jar
关于连接池,和其他页面内容,后续再用,先搭个环境:
建立一个和 src同级的文件resources.将一些配置文件放进去
system_db.properties:数据库相关配置:
connection.driver_class=com.mysql.jdbc.Driver
connection.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
connection.username=root
connection.password=root
#这里是用的开涛老师的参数,先预留的,暂时不理解就没用
hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
hibernate.hbm2ddl.auto=none
hibernate.show_sql=false
hibernate.format_sql=true
hibernate.query.substitutions=true 1, false 0
hibernate.default_batch_fetch_size=16
hibernate.max_fetch_depth=2
hibernate.bytecode.use_reflection_optimizer=true
hibernate.cache.use_second_level_cache=true
hibernate.cache.use_query_cache=true
hibernate.cache.region.factory_class=org.hibernate.cache.EhCacheRegionFactory
net.sf.ehcache.configurationResourceName=/ehcache_hibernate.xml
hibernate.cache.use_structured_entries=true
hibernate.generate_statistics=true
spring-system-config.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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-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
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
">
<!-- 启动注解扫描 -->
<context:component-scan base-package="com"/>
<!-- 加载资源文件 -->
<context:property-placeholder location="classpath:system_db.properties"/>
<!-- 这是原始的方式加载
<bean id=""
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:system_db.properties" />
</bean>
-->
<!-- 数据库映射 -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${connection.driver_class}"/>
<property name="url" value="${connection.url}"/>
<property name="username" value="${connection.username}"/>
<property name="password" value="${connection.password}"/>
</bean>
<!-- hibernate 需要的信息 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" >
<property name="dataSource" ref="dataSource"/>
<!-- 扫描映射文件,实体类 -->
<property name="packagesToScan">
<list>
<!-- 这里,是否可以匹配所有com开头,entity 结尾 下所有的实体!? -->
<value>com..entity</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
<prop key="hibernate.format_sql">true</prop>
<!-- 其他相关信息
<prop key="hibernate.query.substitutions">${hibernate.query.substitutions}</prop>
<prop key="hibernate.default_batch_fetch_size">${hibernate.default_batch_fetch_size}</prop>
<prop key="hibernate.max_fetch_depth">${hibernate.max_fetch_depth}</prop>
<prop key="hibernate.generate_statistics">${hibernate.generate_statistics}</prop>
<prop key="hibernate.bytecode.use_reflection_optimizer">${hibernate.bytecode.use_reflection_optimizer}</prop>
<prop key="hibernate.cache.use_second_level_cache">${hibernate.cache.use_second_level_cache}</prop>
<prop key="hibernate.cache.use_query_cache">${hibernate.cache.use_query_cache}</prop>
<prop key="hibernate.cache.region.factory_class">${hibernate.cache.region.factory_class}</prop>
<prop key="hibernate.cache.use_structured_entries">${hibernate.cache.use_structured_entries}</prop>
-->
<!--
<prop key="net.sf.ehcache.configurationResourceName">${net.sf.ehcache.configurationResourceName}</prop>
-->
</props>
</property>
</bean>
<aop:aspectj-autoproxy expose-proxy="true"/>
<!-- 事务管理器,这里可以设置多个 -->
<tx:annotation-driven transaction-manager="H4TxManager"/>
<!-- 给事务注入sessionFactory属性 -->
<bean id="H4TxManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 事务属性配置 -->
<tx:advice id="txAdvice" transaction-manager="H4TxManager">
<tx:attributes>
<!-- 方法对应的传播属性 -->
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="create*" propagation="REQUIRED" />
<tx:method name="insert*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="merge*" propagation="REQUIRED" />
<tx:method name="del*" propagation="REQUIRED" />
<tx:method name="remove*" propagation="REQUIRED" />
<tx:method name="put*" propagation="REQUIRED" />
<tx:method name="use*" propagation="REQUIRED"/>
<!-- 这里用了开涛 老师的 -->
<tx:method name="get*" propagation="REQUIRED" read-only="true" />
<tx:method name="count*" propagation="REQUIRED" read-only="true" />
<tx:method name="find*" propagation="REQUIRED" read-only="true" />
<tx:method name="list*" propagation="REQUIRED" read-only="true" />
<tx:method name="*" read-only="true" />
</tx:attributes>
</tx:advice>
<!-- 事务控制位置,一般在业务层service -->
<aop:config>
<aop:pointcut id="txPointcut" expression="execution(* com..service..*.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
</aop:config>
</beans>
spring-bean-config.xml :一些需要扩展的bean:
<?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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-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
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
">
<!-- 关于返回页面的 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
web.xml 配置:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>springmvc_hibernate</display-name>
<!-- spring 配置 -->
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-*-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
下面是创建的包,全部以com.(action,service,dao,common,test) 命名
实体bean:com.entity.User
package com.entity;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "t_user")
public class User {
// 这里在test 库,建立表t_user,字段都很简单,方便测试
// 主键自动增长
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private String username;
private String password;
// 省略set/get
}
com.conmmon.BaseDao
public class BaseDao {
@Autowired
private SessionFactory sessionFactory;
public Session getCurrentSession(){
return sessionFactory.getCurrentSession();
}
}
com.dao.IUserDao 和 UserDaoImpl
public interface IUserDao {
/**
* 查看条数
* @return
*/
public int lookUser();
/**
* 删除表数据
* @return
*/
public int deleteUser(int id);
/**
* 添加数据
* @param user
*/
public void saveUser(User user);
}
package com.dao;
import java.util.List;
import org.hibernate.Query;
import org.springframework.stereotype.Repository;
import com.common.BaseDao;
import com.entity.User;
@Repository
public class UserDaoImpl extends BaseDao implements IUserDao{
/**
* 查询个数
*/
public int lookUser(){
//Query query = getCurrentSession().createSQLQuery("SELECT COUNT(*) FROM t_user");
Query query = getCurrentSession().createQuery("FROM User");
List<?> l = query.list();
return l.size();
}
/**
* 删除表数据
* @return
*/
public int deleteUser(int id){
Query query = getCurrentSession().createSQLQuery("DELETE FROM t_user where id = "+id);
return query.executeUpdate();
}
/**
* 添加数据
* @param user
*/
public void saveUser(User user){
getCurrentSession().save(user);
}
}
com.service.IUserService 和UserServiceImpl
package com.service;
import com.entity.User;
public interface IUserService {
public int lookUser();
public int deleteUser(int id);
public void saveUser(User user);
}
package com.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.dao.IUserDao;
import com.entity.User;
@Service
public class UserServiceImpl implements IUserService {
@Autowired
private IUserDao userdao;
public int lookUser() {
return userdao.lookUser();
}
/**
* 删除表数据
* @return
*/
public int deleteUser(int id){
return userdao.deleteUser(id);
}
/**
* 添加数据
* @param user
*/
public void saveUser(User user){
userdao.saveUser(user);
}
}
com.action.UserAction
package com.action;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.entity.User;
import com.service.IUserService;
@Controller
public class UserAction {
@Autowired
private IUserService userService;
@RequestMapping("/")
public String getUser(){
// 返回查询的数量
System.out.println("old:"+userService.lookUser());
// 保存一个新的对象
userService.saveUser(new User());
System.out.println("new:"+userService.lookUser());
return "index";
}
}
默认返回根目录下的index.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Welcome</title>
</head>
<body>
Hello World!
</body>
</html>
也可以自己测试:
package com.test;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.transaction.TransactionConfiguration;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import static junit.framework.Assert.assertEquals;
import com.entity.User;
import com.service.IUserService;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:spring-system-config.xml"})
@Transactional
@TransactionConfiguration(transactionManager="H4TxManager",defaultRollback=false)
public class AppTest {
@Autowired
private IUserService userService;
@Test
public void testService() {
Assert.notNull(userService);
}
@Test
public void addUser(){
int num = userService.lookUser();
userService.saveUser(newUser());
assertEquals(userService.lookUser(), num+1);
}
public User newUser(){
User u = new User();
u.setUsername("test");
u.setPassword("pwd");
return u;
}
}
例子很简单,方便像我这类新手学习。可以自己进行慢慢扩展!