构建基础的SpringMVC+Hibernate+SpringloC项目

一. SpringMVC

阅读我的上一篇文章《使用MyEclipse2015构建SpringMVC项目》,知道基本的构建方法,先构建一个纯springmvc项目,再对web.xml按照本文中做法简单改动。

二. Hibernate

之后用类似方法添加hibernate框架,并生成hibernate.cfg.xml和HibernateSessionFactory.java这个工厂文件。

进入MyEclipse Database Explorer,首先添加自己的服务器,之后,连接服务器,在所需的表(可多选)上右键Hibernate Reverse Engineering,根据所需功能生成实体类,不要忘记选择好主键策略。

三. Spring

这里给出只用springmvc-servlet.xml而不使用application.xml的方法

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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc-servlet.xml</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
  <display-name>Spring4</display-name>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:springmvc-servlet.xml</param-value>
  </context-param>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

src目录下的springmvc-servlet

<?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:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd">                    

    <!-- scan the package and the sub package --此处选择你需要注释的文件所在的公共包>
    <context:component-scan base-package="com.cielo.*"/>

    <!-- don‘t handle the static resource -->
    <mvc:default-servlet-handler />

    <!-- if you use annotation you must configure following setting -->
    <mvc:annotation-driven />

    <!-- configure the InternalResourceViewResolver -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
            id="internalResourceViewResolver">
        <!-- 前缀 -->
        <property name="prefix" value="/WEB-INF/jsp/" />
        <!-- 后缀 -->
        <property name="suffix" value=".jsp" />
    </bean>
</beans>

这样,你就可以用近乎于无配置的方法去处理耦合

目录结构

四.Spring Annotation标签

spring目前支持用几乎无配置文件方法进行项目构建,这里简单列一个标签表

@Component

spring目前用来实现自动生成beans的标签,但是实际开发中,为了更方便阅读,一般使用三个与此等效的标签来表明层次,分别是

@Controller, @Service, @Repository

对应控制器层,业务层和DAO层。

@Autowired

根据类型名称实现自动装配,可以配合@Qualifier("Bean名称")来实现依据名字自动装配。

@Resource

根据变量名称实现自动装配。

需要注意一下,以上两个标签想实现自动装配,被装配的类要实现set和get方法

@RequestMapping("/url")

@RequestMapping(value="url",method=RequestMethod.方法名)

这个标签来定义Controller层的控制器/函数的对应连接,第二种方法可以选择post或者get方法,从而获取post和get数据。

贴一下上图目录结构中一些部分的代码

MainController.java

package com.cielo.controller;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.cielo.service.TbUserService;

@Controller
@RequestMapping("/Main")
public class MainController {
    @Autowired
    TbUserService tbUserService;
    @RequestMapping("/add")
    public String add() {
        return "add";
    }

    @RequestMapping(value = "/edit", method = RequestMethod.POST)
    public String edit(HttpServletRequest request) {
        boolean success = tbUserService.addAUserByNameAndPassword(
                request.getParameter("name"), request.getParameter("password"));
        if (success)
            return "edit";
        return "error";
    }

    public TbUserService getTbUserService() {
        return tbUserService;
    }

    public void setTbUserService(TbUserService tbUserService) {
        this.tbUserService = tbUserService;
    }
}

TbUserService.java

package com.cielo.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.cielo.dao.TbUserDao;
import com.cielo.entity.TbUser;
@Service
public class TbUserService {
    @Autowired
    private TbUserDao tbUserDao;
    public boolean addAUserByNameAndPassword(String name, String password) {
        TbUser tbUser = new TbUser();
        tbUser.setName(name);
        tbUser.setPassword(password);
        return tbUserDao.add(tbUser);
    }
    public TbUserDao getTbUserDao() {
        return tbUserDao;
    }
    public void setTbUserDao(TbUserDao tbUserDao) {
        this.tbUserDao = tbUserDao;
    }
    public TbUserService(TbUserDao tbUserDao) {
        this.tbUserDao = tbUserDao;
    }
    public TbUserService() {
        // TODO Auto-generated constructor stub
    }
}

TbUserDao.java(Dao负责直接和数据库对接操作,比较长,折叠给出)

package com.cielo.dao;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.stereotype.Repository;

import com.cielo.entity.HibernateSessionFactory;
import com.cielo.entity.TbUser;
@Repository
public class TbUserDao {
    public boolean add(TbUser tbUser) {
        Session session = null;
        try {
            session = HibernateSessionFactory.getSession();
            session.beginTransaction();
            session.save(tbUser);
            session.getTransaction().commit();
            System.out.println("Success to add the user");
            return true;
        } catch (Exception e) {
            session.getTransaction().rollback();
            System.out.println("Fail to add the user");
            e.printStackTrace();
        }
        return false;
    }

    public TbUser selectById(int id){
        Session session=null;
        try{
            session=HibernateSessionFactory.getSession();
            String hql="from TbUser as tb_user where tb_user.id=:id";
            Query query=session.createQuery(hql);
            query.setInteger("id", id);
            List list=query.list();
            return (TbUser) list.get(0);
        }catch(Exception e){
            System.out.println("Fail to select the item by id");
            e.printStackTrace();
        }
        return null;
    }

    public TbUser selectByName(String name){
        Session session=null;
        try{
            session=HibernateSessionFactory.getSession();
            String hql="from TbUser as tb_user where tb_user.name=:name";
            Query query=session.createQuery(hql);
            query.setString("name", name);
            List list=query.list();
            return (TbUser) list.get(0);
        }catch(Exception e){
            System.out.println("Fail to select the item by name");
            e.printStackTrace();
        }
        return null;
    }

    public boolean deleteById(int id){
        Session session=null;
        try{
            session=HibernateSessionFactory.getSession();
            session.beginTransaction();
            String hqlString="delete from TbUser tb_user where tb_user.id=:id";
            Query query=session.createQuery(hqlString);
            query.setInteger("id", id);
            session.getTransaction().commit();
            return true;
        }catch(Exception e){
            session.getTransaction().rollback();
            System.out.println("Fail to delete the item by id");
            e.printStackTrace();
        }
        return false;
    }

    public boolean deleteByName(String name){
        Session session=null;
        try{
            session=HibernateSessionFactory.getSession();
            session.beginTransaction();
            String hqlString="delete from TbUser tb_user where tb_user.name=:name";
            Query query=session.createQuery(hqlString);
            query.setString("name", name);
            session.getTransaction().commit();
            return true;
        }catch(Exception e){
            session.getTransaction().rollback();
            System.out.println("Fail to delete the item by name");
            e.printStackTrace();
        }
        return false;
    }

    public boolean deleteByTbUser(TbUser tbUser){
        Session session=null;
        try{
            session=HibernateSessionFactory.getSession();
            session.beginTransaction();
            session.delete(tbUser);
            session.getTransaction().commit();
            return true;
        }catch(Exception e){
            session.getTransaction().rollback();
            System.out.println("Fail to delete the item by tbUser");
            e.printStackTrace();
        }
        return false;
    }

    public boolean update(TbUser tbUser) {
        Session session = null;
        try {
            session = HibernateSessionFactory.getSession();
            session.beginTransaction();
            session.update(tbUser);
            session.getTransaction().commit();
            System.out.println("Success to update the user");
            return true;
        } catch (Exception e) {
            session.getTransaction().rollback();
            System.out.println("Fail to update the user");
            e.printStackTrace();
        }
        return false;
    }

    public TbUserDao() {
        // TODO Auto-generated constructor stub
    }
}

TbUser实体类,利用hibernate自动生成的标签,不再需要hbm文件去对应,只需要再hibernate.cfg.xml中设置一下Mapping即可

package com.cielo.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

/**
 * TbUser entity. @author MyEclipse Persistence Tools
 */
@Entity
@Table(name = "tb_user", schema = "dbo", catalog = "Web")
public class TbUser implements java.io.Serializable {

    // Fields

    private Integer id;
    private String name;
    private String password;

    // Constructors

    /** default constructor */
    public TbUser() {
    }

    /** full constructor */
    public TbUser(Integer id, String name, String password) {
        this.id = id;
        this.name = name;
        this.password = password;
    }

    // Property accessors
    @Id
    @Column(name = "id", unique = true, nullable = false)
    @GeneratedValue
    public Integer getId() {
        return this.id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    @Column(name = "name", nullable = false)
    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Column(name = "password", nullable = false)
    public String getPassword() {
        return this.password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

}

完整代码见github上此项目

时间: 2024-10-14 09:37:50

构建基础的SpringMVC+Hibernate+SpringloC项目的相关文章

SpringMVC hibernate加入多数据源 (SSHE/SYPRO加入多数据源为例)

SpringMVC hibernate加入多数据源 (以类SSHE/SYPRO加入多数据源为例作说明) 注:适用与SpringMVC + Hibernate的项目,其他框架的只能说作参考用 配置Spring 新建一个Spring的数据源配置文件,如spring-hibernate-aite.xml 怎么新建文件就不说了 新建的Spring的数据源配置文件的内容: 内容可以先将原有的spring-hibernate.xml完全copy过来,然后做相应修改 A.dataSource的相应修改 <!-

SpringMVC hibernate增加多数据源 (SSHE/SYPRO增加多数据源为例)

SpringMVC hibernate增加多数据源 (以类SSHE/SYPRO增加多数据源为例作说明) 注:适用与SpringMVC + Hibernate的项目.其它框架的仅仅能说作參考用 配置Spring 新建一个Spring的数据源配置文件,如spring-hibernate-aite.xml 怎么新建文件就不说了 新建的Spring的数据源配置文件的内容: 内容能够先将原有的spring-hibernate.xml全然copy过来,然后做对应改动 A.dataSource的对应改动 <!

SpringMVC+Hibernate框架整合,构建一个简单项目

SpringMVC:简单易用,上手快,项目配置部分很少,注重代码开发层面 Hibernate:ORM(对象关系映射,英语:Object Relation Mapping,简称ORM,或O/RM,或O/R mapping)框架,轻量级的数据库封装 下面直接上项目: 1.创建Dynamic Web Project项目,命名:SpringMVC_Hibernate ? 如图,缺少web.xml文件,如下图示,加入: ? 2.导入SpringMVC相关jar包 下载地址:SpringMVC下载 ? 3.

Maven搭建SpringMVC+Hibernate项目详解

前言 今天复习一下SpringMVC+Hibernate的搭建,本来想着将Spring-Security权限控制框架也映入其中的,但是发现内容太多了,Spring-Security的就留在下一篇吧,这篇主要搭建SpringMVC4.1.4和Hibernate4.3.8,之前也打了好多SpringMVC的,这部分已经非常的熟悉了,毕竟业开发过一年多SpringMVC的,这次持久层采用Hibernate,数据源采用c3p0,数据库暂采用MySQL,主要是想复习一下Hibernate.搭建Spring

Maven搭建SpringMVC+Hibernate项目详解 【转】

前言 今天复习一下SpringMVC+Hibernate的搭建,本来想着将Spring-Security权限控制框架也映入其中的,但是发现内容太多了,Spring-Security的就留在下一篇吧,这篇主要搭建SpringMVC4.1.4和Hibernate4.3.8,之前也打了好多SpringMVC的,这部分已经非常的熟悉了,毕竟业开发过一年多SpringMVC的,这次持久层采用Hibernate,数据源采用c3p0,数据库暂采用MySQL,主要是想复习一下Hibernate.搭建Spring

Maven搭建SpringMVC+Hibernate项目详解(转)

前言 今天复习一下SpringMVC+Hibernate的搭建,本来想着将Spring-Security权限控制框架也映入其中的,但是发现内容太多了,Spring-Security的就留在下一篇吧,这篇主要搭建SpringMVC4.1.4和Hibernate4.3.8,之前也打了好多SpringMVC的,这部分已经非常的熟悉了,毕竟业开发过一年多SpringMVC的,这次持久层采用Hibernate,数据源采用c3p0,数据库暂采用MySQL,主要是想复习一下Hibernate.搭建Spring

使用Eclipse构建Maven的SpringMVC项目

使用Eclipse构建Maven的SpringMVC项目 ? 用maven的好处: 1 最主要就是自动下载jar包和它所依赖的包, 2保证多人开发时jar版本不同的问题 3 文件结构清晰,java文件,资源文件,测试文件都分的很清楚. 将介绍两种方法:一,直接建立Maven项目方法:二.建立Dynamic Web project转成Maven项目方法. ?? ? ? ?将介绍两种方法:一,直接建立Maven项目方法:二.建立Dynamic Web project转成Maven项目方法. 一.直接

spring+springmvc+hibernate架构、maven分模块开发例子小项目案例

maven分模块开发例子小项目案例 spring+springmvc+hibernate架构 以用户管理做测试,分dao,sevices,web层,分模块开发测试!因时间关系,只测查询成功,其他的准备在ext上做个完整的案例来的,可惜最近时间很紧, 高级部分也没做测试,比如建私服,其他常用插件测试之类的,等用时间了我做个完整ext前端和maven 完整的例子出来,在分享吧! 不过目前这些撑握了,在项目中做开发是没有问题的,其他高级部分是架构师所做的. 之前我有的资源都加上了积分,有些博友向我要,

spring+springmvc+hibernate架构、maven分模块开发样例小项目案例

maven分模块开发样例小项目案例 spring+springmvc+hibernate架构 以用户管理做測试,分dao,sevices,web层,分模块开发測试!因时间关系.仅仅測查询成功.其它的准备在ext上做个完整的案例来的,可惜近期时间非常紧. 高级部分也没做測试,比方建私服,其它经常使用插件測试之类的,等用时间了我做个完整ext前端和maven 完整的样例出来,在分享吧. 只是眼下这些撑握了.在项目中做开发是没有问题的,其它高级部分是架构师所做的. 之前我有的资源都加上了积分,有些博友