Spring+SpringMVC+Hibernate整合+入门笔记
来源:互联网 发布:染色体核型分析软件 编辑:程序博客网 时间:2024/05/20 05:06
http://blog.csdn.net/baimusensen/article/details/16329835
新人自学SpringMVC,记录下学习心得,愿与众位分享。如有什么疏漏之处还望前辈们指教(求轻拍)
刚刚写了一篇日志,是写如何实现一个只有SpringMVC的项目的。现在这篇日志算是上一篇日志的续集,如果对SpringMVC一点也不了解的朋友请看我上一篇日志。上一篇日志链接——SpringMVC入门笔记
现在开始Spring+SpringMVC+Hibernate的整合
1.导入jar包
由于个人水平有限,没法像大神们一样精准的写出哪些jar包是干什么的,所以列出来的很多jar包可能是暂时用不到的。虽然臃肿点,不过导入这些jar包以后,项目是肯定能跑得起来的。
hibernate部分
然后是ojdbc6.jar
然后是Spring部分
Spring部分除此之外还有:
aspectj-1.6.10.jar、aspectjweaver-1.6.9.jar、org.springframework.web.servlet-3.1.3.RELEASE.jar
aspectj开头的jar包是能让Spring管理事务的jar包
2.修改web.xml
这里的web.xml与上一篇日志的没变化,不过也列在这里方便大家看
- <span style="font-size:14px;"><?xml version="1.0" encoding="UTF-8"?>
- <web-app version="2.5"
- xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
- http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
- <servlet>
- <servlet-name>spring3mvc</servlet-name>
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
- <!-- 如果不写这个init标签及其内容,那么SpringMVC的相关配置就要写在
- 与<servlet-name>中的内容一致的xml里 -->
- <init-param>
- <param-name>contextConfigLocation</param-name>
- <!-- 这里是配置文件的路径 -->
- <param-value>classpath*:/applicationContext.xml</param-value>
- </init-param>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>spring3mvc</servlet-name>
- <!-- url-pattern里的内容的意思代表:告诉程序什么样格式的url地址才能算是action,
- 并往action里走。对于我这里写的*.action的话,当我输入类似于findAll.action
- 这样的url时,才会让程序开始寻找相应的action -->
- <url-pattern>*.action</url-pattern>
- </servlet-mapping>
- <welcome-file-list>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
- </web-app>
- </span>
3.添加applicationContext.xml
- <span style="font-size:14px;"><?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"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xmlns:mvc="http://www.springframework.org/schema/mvc"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
- http://www.springframework.org/schema/aop
- http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-2.5.xsd
- http://www.springframework.org/schema/tx
- http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
- http://www.springframework.org/schema/mvc
- http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
- <!-- 扫描com这个包里的所有类,把里面配上相应注解的类全都放在容器中进行管理 -->
- <context:component-scan base-package="com"/>
- <!-- 添加注解驱动 -->
- <mvc:annotation-driven />
- <!-- 定义跳转的文件的前后缀 -->
- <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
- <!-- 这里的配置我的理解是自动给后面action的方法return的字符串加上前缀和后缀,变成一个
- 可用的url地址 -->
- <property name="prefix" value="/jsp/" />
- <property name="suffix" value=".jsp" />
- </bean>
- <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
- <property name="driverClassName">
- <!-- 这里要根据自己用的什么数据库而变,我用的是oracle -->
- <value>oracle.jdbc.driver.OracleDriver</value>
- </property>
- <property name="url">
- <value>jdbc:oracle:thin:@KEWPIE-HP:1521:KEWPIE</value>
- </property>
- <property name="username">
- <value>数据库用户名</value>
- </property>
- <property name="password">
- <value>密码</value>
- </property>
- </bean>
- <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
- <property name="dataSource">
- <!-- 连接数据源 -->
- <ref bean="dataSource"/>
- </property>
- <!--注解形式的配置,只写包路径就可以了-->
- <property name="packagesToScan">
- <list>
- <value>com.bean</value>
- </list>
- </property>
- <!-- 配置数据库方言 -->
- <property name="hibernateProperties">
- <props>
- <prop key="hibernate.dialect">
- org.hibernate.dialect.Oracle9Dialect
- </prop>
- <prop key="hibernate.show_sql">true</prop>
- <prop key="hibernate.format_sql">true</prop>
- </props>
- </property>
- </bean>
- <!-- 从这开始就是开启事务的配置了 -->
- <bean id="transactionManager"
- class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
- <property name="dataSource" ref="dataSource"/>
- </bean>
- <tx:advice id="txAdvice" transaction-manager="transactionManager">
- <tx:attributes>
- <tx:method name="*" propagation="REQUIRED"/>
- </tx:attributes>
- </tx:advice>
- <aop:config>
- <!-- 在这里,我将事务控制在service层,如果你想改,就改底下那个括号里的包名什么的吧 -->
- <aop:pointcut id="personDaoPC"
- expression = "execution(* com.service.impl.*.*(..))"/>
- <aop:advisor advice-ref="txAdvice" pointcut-ref="personDaoPC"/>
- </aop:config>
- <!-- 这个是我为了调试代码创建的一个dao -->
- <bean id="userDao" class="com.dao.impl.UserDaoImpl">
- <property name="sessionFactory" ref="sessionFactory"/>
- </bean>
- </beans>
- </span>
4.dao、service和action
dao和service接口的代码我就不贴出来了,就是简单地方法声明,其他什么也没有
dao的代码
- <span style="font-size:14px;">package com.dao.impl;
- import java.util.List;
- import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
- import com.bean.User;
- import com.dao.IUserDao;
- /**
- * 这里要注意,我继承了一个HibernateDaoSupport类,然后在Spring的配置文件中给这个类注入了一个
- * sessionFactory。这是为了能得到Hibernate的Session对象
- * @author 百木森森
- *
- */
- public class UserDaoImpl extends HibernateDaoSupport implements IUserDao {
- public List<User> findAll() {
- //这里的getSession()方法是继承自父类的方法
- return this.getSession().createQuery("from User").list();
- }
- public void modify(User user) {
- this.getSession().update(user);
- }
- }
- </span>
service的代码
- <span style="font-size:14px;">package com.service.impl;
- import java.util.List;
- import javax.annotation.Resource;
- import org.springframework.stereotype.Service;
- import com.bean.User;
- import com.dao.IUserDao;
- import com.service.IUserService;
- /**
- * service层我用的注解的方式配的,所以没写在Spring配置文件里
- * @author 百木森森
- *
- */
- @Service("userService")
- public class UserServiceImpl implements IUserService {
- @Resource
- private IUserDao userDao;
- public List<User> findAll() {
- return this.userDao.findAll();
- }
- public void modify(User user) {
- this.userDao.modify(user);
- }
- }
- </span>
- <span style="font-size:14px;">package com.action;
- import java.util.List;
- import javax.annotation.Resource;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.RequestMapping;
- import com.bean.User;
- import com.service.IUserService;
- /**
- * action层我也是用注解配的,这里面的注解@RequestMapping的具体作用见上一篇SpringMVC入门笔记
- * @author 百木森森
- *
- */
- @Controller
- @RequestMapping("testPath")
- public class TestAction {
- @Resource
- private IUserService userService;
- @RequestMapping("testMethod/testA")
- public String test(){
- System.out.println("进到了Action!");
- List<User> list=this.userService.findAll();
- for(User u:list){
- System.out.println(u.getId()+","+u.getNickName());
- }
- return "success";
- }
- }
- </span>
到此为止,启动项目以后,在地址栏中输入http://localhost:8080/springmvc11_14/testPath/testMethod/testA.action后可以成功跳转到success.jsp,而且也能成功的从数据库读取User集合。modify方法也试过了,可以成功修改数据,说明Spring自动管理事务没问题,能正常使用。
execution(* com.aptech.jb.epet.dao.hibimpl.*.*(..))
这样写应该就可以了 这是com.aptech.jb.epet.dao.hibimpl 包下所有的类的所有方法。。
第一个*代表所有的返回值类型
第二个*代表所有的类
第三个*代表类所有方法 最后一个..代表所有的参数。
下面给出一些常见切入点表达式的例子:
任意公共方法的执行:
execution(public * *(..))
任何一个以“set”开始的方法的执行:
execution(* set*(..))
AccountService
接口的任意方法的执行:execution(* com.xyz.service.AccountService.*(..))
定义在service包里的任意方法的执行:
execution(* com.xyz.service.*.*(..))
定义在service包或者子包里的任意类的任意方法的执行:
execution(* com.xyz.service..*.*(..))
http://www.cnblogs.com/wj-wangjun/archive/2009/10/21/1587624.html
Hibernate SQL方言 (hibernate.dialect)
数据库
hibernate方言
DB2org.hibernate.dialect.DB2DialectDB2 AS/400org.hibernate.dialect.DB2400DialectDB2 OS390org.hibernate.dialect.DB2390DialectPostgreSQLorg.hibernate.dialect.PostgreSQLDialectMySQLorg.hibernate.dialect.MySQLDialectMySQL with InnoDBorg.hibernate.dialect.MySQLInnoDBDialectMySQL with MyISAMorg.hibernate.dialect.MySQLMyISAMDialectOracle (any version)org.hibernate.dialect.OracleDialectOracle 9i/10gorg.hibernate.dialect.Oracle9DialectSybaseorg.hibernate.dialect.SybaseDialectSybase Anywhereorg.hibernate.dialect.SybaseAnywhereDialectMicrosoft SQL Serverorg.hibernate.dialect.SQLServerDialectSAP DBorg.hibernate.dialect.SAPDBDialectInformixorg.hibernate.dialect.InformixDialectHypersonicSQLorg.hibernate.dialect.HSQLDialectIngresorg.hibernate.dialect.IngresDialectProgressorg.hibernate.dialect.ProgressDialectMckoi SQLorg.hibernate.dialect.MckoiDialectInterbaseorg.hibernate.dialect.InterbaseDialectPointbaseorg.hibernate.dialect.PointbaseDialectFrontBaseorg.hibernate.dialect.FrontbaseDialectFirebirdorg.hibernate.dialect.FirebirdDialect<?xml version="1.0" encoding="GBK"?>
<!-- 指定Spring配置文件的Schema信息 -->
<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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
<!-- 定义数据源Bean,使用C3P0数据源实现 -->
<bean id="dataSource" destroy-method="close"
class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!-- 指定连接数据库的驱动 -->
<!-- 指定连接数据库的URL -->
<!-- 指定连接数据库的用户名 -->
<!-- 指定连接数据库的密码 -->
<!-- 指定连接数据库连接池的最大连接数 -->
<!-- 指定连接数据库连接池的最小连接数 -->
<!-- 指定连接数据库连接池的初始化连接数 -->
<!-- 指定连接数据库连接池的连接的最大空闲时间 -->
<!-- 连mysql
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl"
value="jdbc:mysql://localhost:3306/auction"/>
<property name="user" value="root"/>
<property name="password" value="32147"/>
<property name="maxPoolSize" value="40"/>
<property name="minPoolSize" value="1"/>
<property name="initialPoolSize" value="1"/>
<property name="maxIdleTime" value="20"/>
-->
<!--连MS-SQL-->
<property name="driverClassName"
value="net.sourceforge.jtds.jdbc.Driver"></property> <property
name="url"
value="jdbc:jtds:sqlserver://10.11.68.28:1433;DatabaseName=txDB"></property>
<property name="username" value="sa"></property>
<property name="password" value="Wang.Jun2009"></property>
<!-- 连 Oracle -->
<!--
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property>
<property name="url" value="jdbc:oracle:thin:@10.12.3.106:1521:orcl"></property>
<property name="username" value="pms"></property>
<property name="password" value="zerobugpms"></property>
<property name="maxActive" value="100"></property>
<property name="maxIdle" value="30"></property>
<property name="maxWait" value="500"></property>
<property name="defaultAutoCommit" value="true"></property>
-->
</bean>
<!-- 定义Hibernate的SessionFactory -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!-- 依赖注入数据源,注入上面定义的dataSource -->
<property name="dataSource" ref="dataSource"/>
<!-- mappingResouces属性用来列出全部映射文件 -->
<property name="mappingResources">
<list>
<!-- 以下用来列出Hibernate映射文件 -->
<value>org/crazyjava/auction/model/AuctionUser.hbm.xml</value>
<value>org/crazyjava/auction/model/Bid.hbm.xml</value>
<value>org/crazyjava/auction/model/Item.hbm.xml</value>
<value>org/crazyjava/auction/model/Kind.hbm.xml</value>
<value>org/crazyjava/auction/model/State.hbm.xml</value>
</list>
</property>
<!-- 定义Hibernate的SessionFactory的属性 -->
<property name="hibernateProperties">
<props>
<!-- 指定数据库方言 -->
<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
<!--
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLInnoDBDialect</prop>
-->
<!-- 是否根据需要每次自动创建数据库 -->
<prop key="hibernate.hbm2ddl.auto">update</prop>
<!-- 显示Hibernate持久化操作所生成的SQL -->
<prop key="hibernate.show_sql">true</prop>
<!-- 将SQL脚本进行格式化后再输出 -->
<prop key="hibernate.format_sql">true</prop>
</props>
</property>
</bean>
<!-- 配置Hibernate的局部事务管理器,使用HibernateTransactionManager类 -->
<!-- 该类实现PlatformTransactionManager接口,是针对Hibernate的特定实现-->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<!-- 配置HibernateTransactionManager时需要依注入SessionFactory的引用 -->
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!-- 配置事务切面Bean,指定事务管理器 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<!-- 用于配置详细的事务语义 -->
<tx:attributes>
<!-- 所有以'get'开头的方法是read-only的 -->
<tx:method name="get*" read-only="true"/>
<!-- 其他方法使用默认的事务设置 -->
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
<aop:config>
<!-- 配置一个切入点,匹配指定包下所有以Impl结尾的类执行的所有方法 -->
<aop:pointcut id="leeService"
expression="execution(* org.crazyjava.auction.service.impl.*Impl.*(..))"/>
<!-- 指定在leeService切入点应用txAdvice事务切面 -->
<aop:advisor advice-ref="txAdvice"
pointcut-ref="leeService"/>
</aop:config>
<!-- 定义JavaMailSenderImpl,它用于发送邮件 -->
<bean id="mailSender"
class="org.springframework.mail.javamail.JavaMailSenderImpl">
<!-- 指定发送邮件的SMTP服务器地址 -->
<property name="host" value="smtp.163.com"/>
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.timeout">25000</prop>
</props>
</property>
<!-- 指定登录邮箱的用户名、密码 -->
<property name="username" value="spring_test"/>
<property name="password" value="123abc"/>
</bean>
<!-- 定义SimpleMailMessage Bean,它代表了一份邮件 -->
<bean id="mailMessage"
class="org.springframework.mail.SimpleMailMessage">
<property name="from" value="spring_test@163.com"/>
<!-- 指定邮件标题 -->
<property name="subject" value="竞价通知"/>
</bean>
<!-- 配置业务逻辑组件 -->
<bean id="mgr"
class="org.crazyjava.auction.service.impl.AuctionManagerImpl">
<!-- 为业务逻辑组件注入所需的DAO组件 -->
<property name="userDao" ref="auctionUserDao"/>
<property name="bidDao" ref="bidDao"/>
<property name="itemDao" ref="itemDao"/>
<property name="kindDao" ref="kindDao"/>
<property name="stateDao" ref="stateDao"/>
<property name="mailSender" ref="mailSender"/>
<property name="message" ref="mailMessage"/>
</bean>
<!-- 配置一个TimerTask Bean -->
<bean id="checkWiner" class="org.crazyjava.auction.schedule.CheckWiner">
<!-- 依赖注入业务逻辑组件 -->
<property name="mgr" ref="mgr"/>
</bean>
<!-- 将TimerTask Bean:checkWiner包装成可周期性执行的任务调度Bean -->
<bean id="scheduledTask"
class="org.springframework.scheduling.timer.ScheduledTimerTask">
<!-- 指定调度频率和延迟 -->
<property name="delay" value="0"/>
<property name="period" value="86400000"/>
<property name="timerTask" ref="checkWiner"/>
</bean>
<!-- 启动实际调度 -->
<bean id="timerFactory"
class="org.springframework.scheduling.timer.TimerFactoryBean">
<!-- 下面列出所有需要调用的任务调度Bean -->
<property name="scheduledTimerTasks">
<list>
<ref bean="scheduledTask"/>
</list>
</property>
</bean>
</beans>
- Spring+SpringMVC+Hibernate整合+入门笔记
- Spring+SpringMVC+Hibernate整合+入门笔记
- 我的笔记 Spring+SpringMVC+hibernate整合
- SpringMVC+Spring+Hibernate整合
- SpringMVC整合Spring、Hibernate
- Spring-SpringMVC-Hibernate整合
- SpringMVC+Spring+Hibernate整合
- SpringMVC+Spring+hibernate整合
- springmvc-spring-hibernate整合
- Spring+SpringMVC+Hibernate整合
- spring+springMVC+hibernate整合
- SpringMVC+Hibernate+Spring整合
- spring+springmvc+hibernate整合
- spring spring+springMVC+hibernate整合
- Spring 学习笔记(七) SpringMVC与Hibernate的整合
- Spring+hibernate+springmvc 整合 (一)
- Spring-SpringMVC-Hibernate maven整合
- SpringMVC+Hibernate+Spring整合实例
- MSSQL示例(一)DDL
- Unity中Screen类
- java -classpath or -cp 的设置和解释
- 第17周项目6-学生成绩统计(2)
- android高仿今日头条 --新闻阅读器
- Spring+SpringMVC+Hibernate整合+入门笔记
- SQL Server BOM展开方法整理
- 漫谈如何学习操作系统原理
- cvCopy与cvCloneImage、cvCopyimage的区别
- Python文件路径具体操作方法经典讲解
- 关于Java常量定义的一点思考
- EE屌丝的数据结构笔记(三)
- android 启动第三方程序的代码
- wikioi 1502 这个月有几天