惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
V2EX
J
Java Code Geeks
MongoDB | Blog
MongoDB | Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Blog — PlanetScale
Blog — PlanetScale
A
About on SuperTechFans
Engineering at Meta
Engineering at Meta
美团技术团队
N
Netflix TechBlog - Medium
月光博客
月光博客
博客园 - 三生石上(FineUI控件)
F
Fortinet All Blogs
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
MyScale Blog
MyScale Blog
aimingoo的专栏
aimingoo的专栏
Last Week in AI
Last Week in AI
The Cloudflare Blog
量子位
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
腾讯CDC
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
D
DataBreaches.Net
H
Hackread – Cybersecurity News, Data Breaches, AI and More

博客园 - 雨中流泪

轻量的PHP开发框架--- litePhp Rails 命令大全 ObjectHTML Framework 0.0.9.1 for PHP 发布.欢迎试用 在学习中沉沦... 在Dom4j中使用xpath - 雨中流泪 - 博客园 Spring.Net + NHibernate 入门例子 - 雨中流泪 PHP函数收藏---不断更新中! - 雨中流泪 - 博客园 程序员的编辑器--EmEditor 自己写的一个JS组件,JCombo 0.9 - 雨中流泪 - 博客园 Enterprise Library 3.1的研究之路---Data Access Application Block(1) 发个"违法"的东西.VisualAssist X 1559破解版 自己写的Log日志记录类,支持文件和数据库,自动建立Log表格 (三)AJAXPro之旅---原理的探究 - 雨中流泪 - 博客园 (二)AJAXPro之旅---构造实际的AJAX应用. (一)AJAXPro之旅---神奇的小魔盒 Windows Live Writer 我的AJAX类的使用(一个简单的异步组件) Grove,.Net下最方便的O/R Map库 ASP.Net分页组件1.0开发下载了...
使用Spring 2.5 和 Hibernate 3.2 开发MVC Web程序(基于annot...
雨中流泪 · 2008-01-23 · via 博客园 - 雨中流泪

使用Spring 2.5 Hibernate 3.2 开发MVC Web程序(基于annotation特性)

Spring Hibernate 都支持annotation开发应用程序,无疑减少呢很多XML配置,使程序看起来更干净”,下面我们以一个简单的例子来说明:

程序的开发环境:eclipse 3.2.2 + WTP + tomcat(推荐)

首先我们建一个动态的Web项目

修改WEB-INF/web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app id="ascweb" version="2.4"

      xmlns="http://java.sun.com/xml/ns/j2ee"

      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

      xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

      <display-name>ascweb</display-name>

      <!--  载入Spring配置文件 -->

      <context-param>

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

           <param-value>/WEB-INF/applicationContext.xml</param-value><!-- 自动载入的spring配置 -->

      </context-param>

      <listener>

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

      </listener>

      <!--  字符编码转换 -->

      <filter>

           <filter-name>encodingFilter</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>

      </filter>

      <filter-mapping>

           <filter-name>encodingFilter</filter-name>

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

      </filter-mapping>

      <!-- Spring MVC Servlet -->

      <servlet>

           <servlet-name>ascweb</servlet-name>

           <servlet-class>

                 org.springframework.web.servlet.DispatcherServlet

           </servlet-class>

           <load-on-startup>1</load-on-startup>

      </servlet>

      <servlet-mapping>

           <servlet-name>ascweb</servlet-name>

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

      </servlet-mapping>

      <welcome-file-list>

           <welcome-file>index.htm</welcome-file>

           <welcome-file>index.jsp</welcome-file>

           <welcome-file>index.do</welcome-file>

      </welcome-file-list>

</web-app>

建立好这个文件之后,我们在WEB-INF目录下面建一个ascweb-servlet.xml文件,其实这个文件的命名就是Web.xmlservlet-name的名字加-servlet.xml.其文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

<!-- 定义Spring MVC 的模板文件 -->

      <bean id="viewResolver"

      class="org.springframework.web.servlet.view.InternalResourceViewResolver">

           <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>     <!-- 支持JSTL -->

           <property name="prefix" value="WEB-INF/views/" />     <!-- 模板的路径 -->

           <property name="suffix" value=".jsp" />                 <!-- 模板文件的后缀-->

      </bean>

      <!-- 依赖注入到HelloController这个类 -->

      <bean id="helloController" class="com.asc.web.ctl.HelloController">

           <property name="viewName">  <!-- 设定viewName属性的值为hello -->

                 <value>hello</value>

           </property>

           <property name="userDao">     <!-- 设置属性userDaoHibernateDao对象 -->

                 <ref bean="userDAOProxy" /> <!-- 注入一个bean(定义在Hibernate的配置文件里) -->

           </property>

      </bean>

</beans>

然后我们建立一个/WEB-INF/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"

      xsi:schemaLocation="http://www.springframework.org/schema/beans

      http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

      <-- 数据源配置 -->

      <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

           <property name="driverClassName">

                 <value>com.microsoft.sqlserver.jdbc.SQLServerDriver</value>

            </property>

           <property name="url">

                 <value>jdbc:sqlserver://192.168.1.21:2433;DatabaseName=expert</value>

           </property>

           <property name="username">

                 <value>sa</value>

           </property>

           <property name="password">

                 <value>oilchem2006</value>

           </property>

      </bean>

<!-- hibernate3 session Bean-->

      <bean id="sessionFactory"

      class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">

           <property name="dataSource"> <!-- 注入数据源 -->

                 <ref local="dataSource" />

           </property>

           <property name="annotatedClasses">    <!-- 需要加载的Hibernate实体类(不需要hbm.xml) -->

                 <list>

                      <value> com.asc.dao.User</value>

                 </list>

           </property>

           <property name="hibernateProperties">

                 <props>

                      <prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>

                      <prop key="hibernate.show_sql">true</prop>

                 </props>

           </property>

      </bean>

      <!-- 事务管理 -->

      <bean id="transactionManager"

           class="org.springframework.orm.hibernate3.HibernateTransactionManager">

           <property name="sessionFactory">

                 <ref local="sessionFactory" />

           </property>

      </bean>

      <!-- UserDAO bean-->

      <bean id="userDAO" class=" com.asc.dao.UserDAO">

           <property name="sessionFactory">

                 <ref local="sessionFactory" />

           </property>

      </bean>

      <!-- 带事务处理的userDao 代理 -->

      <bean id="userDAOProxy"

      class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">

           <property name="transactionManager">

                 <ref bean="transactionManager" />

           </property>

           <property name="target">

                 <ref local="userDAO" />

           </property>

           <property name="transactionAttributes">

                 <props>

                      <prop key="insert*">PROPAGATION_REQUIRED</prop>

                      <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>

                 </props>

           </property>

      </bean>

</beans>

然后我们开始写hibernate的代码,很简单

实体类User.java:

package com.asc.dao;

import javax.persistence.*;

import java.io.Serializable;

//指定表格的名称,注解方式

@SuppressWarnings("serial")

@Entity

@Table(name = "users2")

public class User implements Serializable {

      public Integer id;

      public String username;

      public String password;

//主键,注解方式

      @Id

      @GeneratedValue(strategy = GenerationType.AUTO)

      public Integer getId() {

           return id;

      }

      public void setId(Integer id) {

           this.id = id;

      }

      public String getPassword() {

           return password;

      }

      public void setPassword(String password) {

           this.password = password;

      }

      public String getUsername() {

           return username;

      }

      public void setUsername(String username) {

           this.username = username;

      }

}

然后我们新建一个接口IUserDAO:

package com.asc.dao;

import java.util.List;

public interface IUserDAO {

      public abstract void insertUser(User user);

      public abstract List<User> selectUser();

}

我们再建一个接口的实现UserDAO:

package com.asc.dao;

import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public class UserDAO extends HibernateDaoSupport implements IUserDAO{

      //插入数据

      public void insertUser(User user) {

           getHibernateTemplate().saveOrUpdate(user);

      }

//查询数据

      @SuppressWarnings("unchecked")

      public List<User> selectUser(){

           String sql="From User Order By id";

           List<User> findByNamedQuery = getHibernateTemplate().find(sql);

           return findByNamedQuery;

      }

}

现在我们的Hibernate部分就全部写好了.简单吧,发现什么了吗,没有讨厌的hbm.xml文件呢,那些配置写道User这个实体类里了,这个是Java 5之后才有的功能,annotation(相当于元数据).

现在我们开始写MVC

建立一个文件:

package com.asc.web.ctl;

import java.util.ArrayList;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;

import org.springframework.ui.ModelMap;

import org.springframework.web.bind.annotation.RequestMapping;

import com.asc.dao.IUserDAO;

import com.asc.dao.User;

//还是注解方式,不用继承任何类或者实现任何接口

@Controller

public class HelloController{

      private String viewName;

      private IUserDAO userDao;

//ascweb-servlet.xml里配置的,该属性已经被注入userDAOProxy接口了

      public IUserDAO getUserDao() {

           return userDao;

      }

      public void setUserDao(IUserDAO userDao) {

           this.userDao = userDao;

      }

      public String getViewName() {

           return viewName;

      }

      public void setViewName(String viewName) {

           this.viewName = viewName;

      }

//注解其url映射

      @SuppressWarnings("unchecked")

      @RequestMapping("/hello.do")

      public String index(ModelMap map,HttpServletRequest request,HttpServletResponse response) {

           // map是用来设置View层数据的

           map.put("a1", "Spring真好用");

           request.getSession().setAttribute("a2", "测试Session");

List<User> list2 = userDao.selectUser();

           map.put("a3", list2);

           return this.viewName;  //该属性被注入值hello,就是渲染视图hello.jsp

      }

}

现在我们可以做最后一部了.View,WEB-INF/views里新建一个hello.jsp(还记得我们在配置Spring MVC层中配置view的路径是WEB-INF/views,后缀是jsp)

<%@ page language="java" contentType="text/html; charset=utf-8"

      pageEncoding="utf-8"%>

<%@ taglib prefix="c" uri="/WEB-INF/c.tld"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>在此处插入标题</title>

</head>

<body>

测试: ${a1} ${a2}

<br />

<c:forEach var="list" items="${a3}">

      <c:out value="${list.id}"></c:out>

      <c:if test="${list.id % 2 == 0}">

           <a href="#" style="color:red;border:1px #ececec solid"><c:out

                 value="${list.username}"></c:out></a>

      </c:if>

      <c:if test="${list.id % 2 != 0}">

           <a href="#" style="color:green;border:1px #ececec solid"><c:out

                 value="${list.username}"></c:out></a>

      </c:if>

      <c:out value="${list.password}"></c:out>

      <br />

</c:forEach>

</body>

</html>

我们再加入log4j.propertiessrc目录,配置日志显示.方便调试Ok,运行一下.

效果不错吧.我们的目录结构:

需要可能用到的包: