使用Spring的@Autowired 实现DAO, Service, Controller三层的注入(转)
简述:
结合Spring和Hibernate进行开发
使用@Autowired实现依赖注入, 实现一个学生注册的功能,做一个技术原型
从DAO(Repository) -> Service -> Controller
目录结构:
使用Maven做本地包管理,
pom.xml
- <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>WebProject</groupId>
- <artifactId>StudentManagementWeb</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <packaging>war</packaging>
- <name>StudentManagementWeb</name>
- <url>http://maven.apache.org</url>
- <properties>
- <org.springframework.version>3.0.2.RELEASE</org.springframework.version>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- </properties>
- <dependencies>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>3.8.1</version>
- <scope>test</scope>
- </dependency>
- <!-- Project Requirements -->
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>servlet-api</artifactId>
- <version>2.5</version>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-log4j12</artifactId>
- <version>1.4.2</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-beans</artifactId>
- <version>${org.springframework.version}</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-jdbc</artifactId>
- <version>${org.springframework.version}</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-web</artifactId>
- <version>${org.springframework.version}</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-webmvc</artifactId>
- <version>${org.springframework.version}</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-orm</artifactId>
- <version>${org.springframework.version}</version>
- </dependency>
- <dependency>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-entitymanager</artifactId>
- <version>3.4.0.GA</version>
- </dependency>
- <dependency>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-envers</artifactId>
- <version>3.5.6-Final</version>
- </dependency>
- <dependency>
- <groupId>taglibs</groupId>
- <artifactId>standard</artifactId>
- <version>1.1.2</version>
- </dependency>
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>jstl</artifactId>
- <version>1.1.2</version>
- </dependency>
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- <version>5.1.10</version>
- </dependency>
- <dependency>
- <groupId>commons-dbcp</groupId>
- <artifactId>commons-dbcp</artifactId>
- <version>20030825.184428</version>
- </dependency>
- <dependency>
- <groupId>commons-pool</groupId>
- <artifactId>commons-pool</artifactId>
- <version>20030825.183949</version>
- </dependency>
- <dependency>
- <groupId>cglib</groupId>
- <artifactId>cglib</artifactId>
- <version>2.2.2</version>
- </dependency>
- <dependency>
- <groupId>org.aspectj</groupId>
- <artifactId>aspectjweaver</artifactId>
- <version>1.6.12</version>
- </dependency>
- </dependencies>
- </project>
各文件如下:
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>StudentManagementWeb</display-name>
- <welcome-file-list>
- <welcome-file>StudentRegistration.jsp</welcome-file>
- </welcome-file-list>
- <resource-ref>
- <description>DB Connection</description>
- <res-ref-name>jdbc/smw</res-ref-name>
- <res-type>javax.sql.DataSource</res-type>
- <res-auth>Container</res-auth>
- </resource-ref>
- <context-param>
- <param-name>log4jConfigLocation</param-name>
- <param-value>/WEB-INF/log4j.properties</param-value>
- </context-param>
- <!-- Define LOG4J Listener -->
- <listener>
- <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
- </listener>
- <servlet>
- <!-- define the name of Servlet -->
- <servlet-name>dispatcherServlet</servlet-name>
- <!-- Servlet implementation class -->
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
- <!-- initialize the context -->
- <init-param>
- <param-name>contextConfigLocation</param-name>
- <!-- load configuration -->
- <param-value>/WEB-INF/applicationContext.xml</param-value>
- </init-param>
- <!-- set loading priority -->
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>dispatcherServlet</servlet-name>
- <url-pattern>*.do</url-pattern>
- </servlet-mapping>
- </web-app>
applicationContext.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: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-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/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
- <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
- <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
- <property name="configLocation">
- <value>classpath:hibernate.cfg.xml</value>
- </property>
- </bean>
- <!-- make spring look up annotation -->
- <context:annotation-config/>
- <context:component-scan base-package="smw.*"/>
- <!-- configure the transaction management -->
- <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
- <property name="sessionFactory">
- <ref bean="sessionFactory" />
- </property>
- </bean>
- <tx:annotation-driven transaction-manager="txManager" />
- </beans>
hibernate.cfg.xml
- <?xml version='1.0' encoding='UTF-8'?>
- <!DOCTYPE hibernate-configuration PUBLIC
- "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
- <hibernate-configuration>
- <session-factory>
- <property name="connection.datasource">java:comp/env/jdbc/smw</property>
- <property name="dialect">
- org.hibernate.dialect.MySQLDialect
- </property>
- <property name="show_sql">true</property><!-- show sql statement -->
- <!-- mapping files -->
- <mapping resource="smw/model/Student.hbm.xml"/>
- </session-factory>
- </hibernate-configuration>
由于使用了Tomcat的数据源,所以还需要在Tomcat的Context.xml中添加数据库连接配置
context.xml(Tomcat server中文件,eclispe中在workspace中的server project中)
context.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- --><!-- The contents of this file will be loaded for each web application --><Context>
- <!-- Default set of monitored resources -->
- <WatchedResource>WEB-INF/web.xml</WatchedResource>
- <!-- Uncomment this to disable session persistence across Tomcat restarts -->
- <!--
- <Manager pathname="" />
- -->
- <!-- Uncomment this to enable Comet connection tacking (provides events
- on session expiration as well as webapp lifecycle) -->
- <!--
- <Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />
- -->
- <Resource name="jdbc/smw" auth="Container" type="javax.sql.DataSource"
- maxActive="100" maxIdle="30" maxWait="10000"
- username="root" password="sql" driverClassName="com.mysql.jdbc.Driver"
- url="jdbc:mysql://localhost:3306/smw"/>
- </Context>
Student.java
- package smw.model;
- public class Student {
- private int sid;
- private String name;
- private String password;
- private String college;
- public int getSid() {
- return sid;
- }
- public void setSid(int sid) {
- this.sid = sid;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- public String getCollege() {
- return college;
- }
- public void setCollege(String college) {
- this.college = college;
- }
- }
Student.hbm.xml (学生表的映射)
- <?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">
- <hibernate-mapping>
- <class name="smw.model.Student" table="tb_student" catalog="smw">
- <id name="sid" column="sid" type="int">
- <generator class="increment"/>
- </id>
- <property name="name" type="java.lang.String">
- <column name="name" not-null="true" length="20">
- <comment>student's name</comment>
- </column>
- </property>
- <property name="password" type="java.lang.String">
- <column name="password" not-null="false" length="10">
- <comment>student's password</comment>
- </column>
- </property>
- <property name="college" type="java.lang.String">
- <column name="college" not-null="false" length="20">
- <comment>student's college</comment>
- </column>
- </property>
- </class>
- </hibernate-mapping>
IStudentDAO.java
- package smw.dao;
- import smw.model.Student;
- public interface IStudentDAO {
- /**
- * Save Student into database
- * @param student
- */
- public void saveStudent(Student student);
- }
StudentDAOImpl.java
- package smw.dao.impl;
- import javax.annotation.Resource;
- import org.hibernate.SessionFactory;
- import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
- import org.springframework.stereotype.Repository;
- import org.springframework.transaction.annotation.Transactional;
- import smw.dao.IStudentDAO;
- import smw.model.Student;
- @SuppressWarnings("restriction")
- @Repository("studentDAO")
- @Transactional
- public class StudentDAOImpl extends HibernateDaoSupport implements IStudentDAO{
- @Resource(name="sessionFactory")
- public void setSuperSessionFactory(SessionFactory sessionFactory){
- super.setSessionFactory(sessionFactory);
- }
- public void saveStudent(Student student){
- getHibernateTemplate().save(student);
- }
- }
IStudentManagementService.java
- package smw.service;
- import smw.model.Student;
- public interface IStudentManagementService {
- public void addStudent(Student student);
- }
StudentManagementServiceImpl.java
- package smw.service.impl;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Propagation;
- import org.springframework.transaction.annotation.Transactional;
- import smw.dao.IStudentDAO;
- import smw.model.Student;
- import smw.service.IStudentManagementService;
- @Service
- public class StudentManagementServiceImpl implements IStudentManagementService {
- @Autowired
- private IStudentDAO studentDAO;
- @Transactional(propagation=Propagation.REQUIRED)
- public void addStudent(Student student) {
- studentDAO.saveStudent(student);
- }
- }
StudentAction.java
- package smw.action;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.servlet.ModelAndView;
- import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
- import smw.model.Student;
- import smw.service.IStudentManagementService;
- @Controller
- @RequestMapping("StudentAction.do")
- public class StudentAction extends MultiActionController{
- @Autowired
- private IStudentManagementService studentManagementService;
- @RequestMapping(params = "method=HandleStudentRegistrationFormSubmit")
- protected ModelAndView HandleStudentRegistrationFormSubmit(HttpServletRequest request
- , HttpServletResponse response) {
- Student student = new Student();
- String name = request.getParameter("name");
- String password = request.getParameter("password");
- String college = request.getParameter("college");
- student.setName(name);
- student.setPassword(password);
- student.setCollege(college);
- studentManagementService.addStudent(student);
- return new ModelAndView("StudentRegistered.jsp");
- }
- }
StudentRegistration.jsp
- <%@ page language="java" contentType="text/html; charset=GBK"
- 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>User Registration</title>
- </head>
- <body>
- <h1 align="center">Student Registration Page</h1>
- <form method="post" action="StudentAction.do?method=HandleStudentRegistrationFormSubmit" class="form">
- <table width="280" border="0" align="center">
- <tr>
- <td width="87" align="center" valign="middle" >
- <div align="right">name:</div>
- </td>
- <td width="183">
- <label>
- <input name="name" type="text" id="name" maxlength="10" />
- </label>
- <td>
- </tr>
- <tr>
- <td height="37" align="center" valign="middle">
- <div align="right">password: </div>
- </td>
- <td>
- <label>
- <input name="password" type="password" id="password" maxlength="20" />
- </label>
- </td>
- </tr>
- <tr>
- <td height="37" align="center" valign="middle">
- <div align="right">college: </div>
- </td>
- <td>
- <label>
- <input name="college" type="text" id="college" maxlength="20" />
- </label>
- </td>
- </tr>
- <tr>
- <td align="center" valign="middle">
- <input type="submit" name="Submit" value="submit" />
- </td>
- <td>
- <input name="reset" type="reset" id="reset" value="reset" />
- </td>
- </tr>
- </table>
- </form>
- </body>
- </html>
StudentRegistered.jsp
- <%@ page language="java" contentType="text/html; charset=GBK"
- 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=GBK">
- <title>User Registered</title>
- </head>
- <body>
- <center>
- <span class="STYLE2">Student Registered</span>
- </center>
- <br>
- <table align="center" border="1">
- <tr>
- <td height="100"><span class="STYLE2">user name:</span></td>
- <td height="100"><span class="STYLE2">${param.name }</span></td>
- </tr>
- <tr>
- <td height="100"><span class="STYLE2">password:</span></td>
- <td height="100"><span class="STYLE2">${param.password }</span></td>
- </tr>
- <tr>
- <td height="100"><span class="STYLE2">college:</span></td>
- <td height="100"><span class="STYLE2">${param.college }</span></td>
- </tr>
- <tr>
- <td height="100" colspan="2" align="center"><a href="StudentRegistration.jsp" class="STYLE2">return to registration</a></td>
- </tr>
- </table>
- </body>
- </html>
结果:
跳转后,
数据库中新增记录,
http://blog.csdn.net/anialy/article/details/8251506
使用Spring的@Autowired 实现DAO, Service, Controller三层的注入(转)的更多相关文章
- 代码生成器实现的Entity,Dao,Service,Controller,JSP神器(含代码附件)
package com.flong.codegenerator; import java.sql.Connection; import java.sql.DatabaseMetaData; impor ...
- SprinfJdbcTemplate+SpringMVC 代码生成器实现的Entity,Dao,Service,Controller,JSP神器(含代码附件)
代码生成器实现的Entity,Dao,Service,Controller,JSP神器(含代码附件) 原文地址: http://jilongliang.iteye.com/blog/2262070 p ...
- 【springmvc+mybatis项目实战】杰信商贸-5.生产厂家DAO+SERVICE+CONTROLLER+JSP+配置文件
上一篇我们创建了工程和一个Factory的po对象(javaBean),我们也写好了Mapper的映射文件,接下来我们来完成生产厂家的DAO与SERVICE,以及CONTROLLER,还有做显示的JS ...
- Spring boot @Autowired注解在非Controller中注入为null
参考链接:https://blog.csdn.net/qq_35056292/article/details/78430777
- 048医疗项目-模块四:采购单模块—采购单受理(Dao,Service,Action三层)
需求: 我们之前把采购单交给监督单位审核了,审通过的采购单就要受理.供货商决定采购单发不发货. 说明: 我们要查的就是登录的供货商的要提供的采购药品,我们查看的是采购单详细表,至于查询条件我们用的是就 ...
- 047医疗项目-模块四:采购单模块—采购单审核提交(Dao,Service,Action三层)
我们之前把采购单都审核了,这篇文章说的就是审核之后提交. 其实就是改变(update)采购单的审核状态. 需求: 用户要先查看采购单的内容. 查看采购单页面:页面布局同采购单修改页面. 选择审核结果. ...
- 046医疗项目-模块四:采购单模块—采购单审核(Dao,Service,Action三层)
当医院把采购单提交之后,由监管单位进行采购单审核,由卫生院及卫生局进行审核.卫生局可以审核所有医院创建的采购单,卫生院只审核本辖区医院创建的采购单. 操作流程: 点击"采购单审核" ...
- 045医疗项目-模块四:采购单模块—采购单提交(Dao,Service,Action三层)
我们之前做的就是采购单的编辑,在采购单里面添加了药品,然后我们这篇文章要做的就是说提交这个采购单. 当我们创建完成采购单,确定采购单不再修改,需要提交采购单,由监管单位进行审核. 我们在提交这个采购单 ...
- 043医疗项目-模块四:采购单模块—采购单明细查询(Dao,Service,Action三层)
前一篇文章我们做的是在医院的角度上添加在采购单里面添加药品.这一篇文章是查看我们添加的采购单信息. 我们先看一下要实现的效果:当: 按下确认添加时,会在这里 显示出刚才添加的数据. 好,我们就来做这个 ...
随机推荐
- 14.3.2.3 Consistent Nonlocking Reads 一致性非锁定读
14.3.2.3 Consistent Nonlocking Reads 一致性非锁定读 一致性读 意味着 InnoDB 使用多版本来保护查询一个数据库在当前时间点的快照. 查询看到被事务做出的修改, ...
- RSA密码系统 基于大数环境编写 密码学课程设计
RSA密码系统的实现 1.问题描述 RSA密码系统可具体描述为:取两个大素数p和q,令n=pq,N=(p-1)(q-1),随机选择整数d,满足gcd(d,N)=1,ed=1 modN. 公开密钥:k1 ...
- JAVA网络爬虫WebCollector深度解析——爬虫内核
WebCollector爬虫官网:https://github.com/CrawlScript/WebCollector 技术讨论群:250108697 怎样将爬虫内核导入自己的项目? 1.进入爬虫官 ...
- poj3974(manacher)
传送门:Palindrome 题意:给定一个字符串,求最长回文子串. 分析:manach裸题,核心理解mx>i?p[i]=min(p[2*id-i],mx-i):1. #pragma comme ...
- 使用mysql-mmm实现MySQL高可用集群
背景:之前实现的mysql同步复制功能(见笔者之前文章http://blog.csdn.net/kingofworld/article/details/39210937)仅仅是双机热备功能,还不能做到 ...
- xcode 改动整个项目名
目标为:将项目名XCD4改成xcd5. 先上结果图:==> 1.在左側的导航区域点击两次项目名,两次间隔时间略微长些,项目名会变成可编辑状态. 将名称改动为xcd5后按enter键弹出一个对话框 ...
- POJ 2756 Autumn is a Genius 大数加减法
Description Jiajia and Wind have a very cute daughter called Autumn. She is so clever that she can d ...
- HTML5:footer定位(底部+居中)的探讨+div图片居中问题
初学HTML+CSS布局,尝试自己写一个百度首页,可是footer的定位遇到麻烦而且百度没有好的解决方法,在此记录下逐步的过程.记录之,备忘. 初学,解决方法难免出现不妥之处,也请看到这篇文章的前辈指 ...
- Knockout应用开发指南 第六章:加载或保存JSON数据
原文:Knockout应用开发指南 第六章:加载或保存JSON数据 加载或保存JSON数据 Knockout可以实现很复杂的客户端交互,但是几乎所有的web应用程序都要和服务器端交换数据(至少为了本地 ...
- Html A标签中 href 和 onclick用法、区别、优先级别
原文:Html A标签中 href 和 onclick用法.区别.优先级别 如果不设置 href属性在IE6下面会不响应hover.双击后会选中标签的父容器而非这个一a标签(IE下都存在这一问题). ...