原文 基于IDEA 最新Spirng3.2+hibernate4+struts2.3 全注解配置 登录

首先说说 IDEA 12,由于myeclipse越来越卡,我改用idea12 了,发现其功能强悍到eclipse无法比拟,此款ide理解上下文是一等一的,不用什么jquery插件,extjs插件,都可以实现全智能的代码提示。速度什么的都比myeclipse快。而且IDEA提供了android支持struts spring hibernate 支持。下面,我讲教大家完成一个基于全注解的Spirng3.2+hibernate4+struts2.3 登录项目,本人对Java极其热爱,爱好Java编程的朋友可以加QQ群:185441009

第一步 创建工程:

图中的project name 就是eclipse里的workspace,下面有个额module name,这个module 才是真正的项目,如果你不改名字,它会自动创建一个跟project name一样的工程。

点 next

选择相应的框架,包括application server tomcat,这里要说明的是,选择的时候它会提示是否下载所依赖的jar

记住要选中上图中Level为为global 意思就是这个lib是Userlibary,同理,spring hibernate 亦是如此。

完了之后 finish,项目就创建完毕了。

第二步,配置lib

ide下载的jar并不是完美的,有些冲突,有些少包多包。项目上右键,选择打开project Structure 选择global library,这里可以配置lib。

经过修整,最终导入的包如下。

第三步 搭建ssh框架

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app 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"
         version="2.5">

<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>

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

<filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
        <init-param>
            <param-name>struts.ui.theme</param-name>
            <param-value>simple</param-value>
        </init-param>
        <init-param>
            <param-name>struts.objectFactory</param-name>
            <param-value>spring</param-value>
        </init-param>
        <init-param>
            <param-name>struts.convention.action.packages</param-name> //这是注解加载action类的时候用的
            <param-value>com.blog.actions</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

</web-app>

第二步 配置数据源

点击ide右边的database

然后右击 add 按照步骤一步一步添加数据源 完成之后如图所示

之后选中IDE侧面的 persistence 选中hibernate.cfg.xml 右击

选择 genernate mapping,按照步骤生成带注解的pojo类。

创建相应的配置文件 和 java 类 工程结构如图所示 struts无需配置。

hibernate 配置文件:

<?xml version='1.0' encoding='utf-8'?> 
<!DOCTYPE hibernate-configuration PUBLIC 
        "-//Hibernate/Hibernate Configuration DTD//EN" 
        " http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
    <session-factory> 
        <property name="connection.url">jdbc:mysql://localhost:3306/blog</property> 
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 
        <property name="connection.username">root</property> 
        <property name="connection.password">123456</property> 
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 
        <property name="hibernate.c3p0.min_size">5</property> 
        <property name="hibernate.c3p0.max_size">20</property> 
        <property name="hibernate.c3p0.timeout">1800</property> 
        <property name="hibernate.c3p0.max_statements">50</property> 
        <mapping class="com.blog.entity.AppInitEntity"/> 
        <mapping class="com.blog.entity.ArticleEntity"/> 
        <mapping class="com.blog.entity.CommentEntity"/> 
        <mapping class="com.blog.entity.UserEntity"/> 
        <!-- DB schema will be updated if needed --> 
        <!-- <property name="hbm2ddl.auto">update</property> --> 
    </session-factory> 
</hibernate-configuration>

spring 配置文件

<?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"
       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.xsd">

<context:component-scan base-package="com.blog">
    </context:component-scan>

<bean id="sessionFactory"
          class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
    </bean>

</beans>

loginAction

package com.blog.actions;

import com.blog.dao.UserDao;
import com.blog.entity.UserEntity;
import com.blog.service.UserService;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;

import javax.annotation.Resource;

/**
 * Created with IntelliJ IDEA.
 * User: Juyan
 * Date: 12-12-15
 * Time: 下午12:31
 * To change this template use File | Settings | File Templates.
 */
@Controller
@Namespace("/")
@Action("login")
@Results({@Result(name = "success", location = "/welcome.jsp"), @Result(name = "error", location = "/index.jsp")})

public class LoginAction extends ActionSupport {

public String getUserName() {
        return userName;
    }

public void setUserName(String userName) {
        this.userName = userName;
    }

public String getPwd() {
        return pwd;
    }

public void setPwd(String pwd) {
        this.pwd = pwd;
    }

private String userName;
    private String pwd;

public String getMessage() {
        return message;
    }

public void setMessage(String message) {
        this.message = message;
    }

private String message;

@Resource
    UserService userService;

public void check() {

Integer id = 1;
        UserEntity userEntity = userService.findById(id);
        System.out.println(userEntity.getUserName());

}
}

UserDao

package com.blog.dao;

import com.blog.entity.UserEntity;

/**
 * Created with IntelliJ IDEA.
 * User: Juyan
 * Date: 12-12-15
 * Time: 下午8:46
 * To change this template use File | Settings | File Templates.
 */
public interface UserDao {

public UserEntity findById(Object id);
}

UserDaoImpl

package com.blog.daoimpl;

import com.blog.dao.UserDao;
import com.blog.entity.UserEntity;
import org.hibernate.Session;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Repository;

import java.io.Serializable;
import java.util.logging.Logger;

/**
 * Created with IntelliJ IDEA.
 * User: Juyan
 * Date: 12-12-15
 * Time: 下午8:52
 * To change this template use File | Settings | File Templates.
 */
@Repository
public class UserDaoImpl extends SuperDao implements UserDao {

static Logger logger = Logger.getLogger(UserDaoImpl.class.toString());

@Override
    public UserEntity findById(Object id) {
        UserEntity userEntity = null;
        try {
            Session session=sessionFactory.openSession();
            userEntity = (UserEntity) session.load(UserEntity.class, (Serializable) id);
            logger.info("id:" + id);
        } catch (DataAccessException e) {
            logger.info(e.toString());
        }
        return userEntity;
    }

超类 SuperDao

package com.blog.daoimpl;

import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

/**
 * Created with IntelliJ IDEA.
 * User: Juyan
 * Date: 12-12-15
 * Time: 下午8:49
 * To change this template use File | Settings | File Templates.
 */
@Component
public class SuperDao {
    @Resource
    SessionFactory sessionFactory;

}

 UserEntity 实体类

package com.blog.entity;

import javax.persistence.Basic;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import java.sql.Timestamp;
import java.util.Collection;

/**
 * Created with IntelliJ IDEA.
 * User: Juyan
 * Date: 12-12-15
 * Time: 下午2:05
 * To change this template use File | Settings | File Templates.
 */
@javax.persistence.Table(name = "user", schema = "", catalog = "blog")
@Entity 
public class UserEntity {
    private int userId;

@javax.persistence.Column(name = "user_id", nullable = false, insertable = true, updatable = true, length = 10, precision = 0)
    @Id
    public int getUserId() {
        return userId;
    }

public void setUserId(int userId) {
        this.userId = userId;
    }

private String userName;

@javax.persistence.Column(name = "user_name", nullable = false, insertable = true, updatable = true, length = 50, precision = 0)
    @Basic 
    public String getUserName() {
        return userName;
    }

public void setUserName(String userName) {
        this.userName = userName;
    }

private String pwd;

@javax.persistence.Column(name = "pwd", nullable = false, insertable = true, updatable = true, length = 50, precision = 0)
    @Basic 
    public String getPwd() {
        return pwd;
    }

public void setPwd(String pwd) {
        this.pwd = pwd;
    }

private String email;

@javax.persistence.Column(name = "email", nullable = false, insertable = true, updatable = true, length = 50, precision = 0)
    @Basic 
    public String getEmail() {
        return email;
    }

public void setEmail(String email) {
        this.email = email;
    }

private Timestamp regTime;

@javax.persistence.Column(name = "reg_time", nullable = false, insertable = true, updatable = true, length = 19, precision = 0)
    @Basic 
    public Timestamp getRegTime() {
        return regTime;
    }

public void setRegTime(Timestamp regTime) {
        this.regTime = regTime;
    }

@Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

UserEntity that = (UserEntity) o;

if (userId != that.userId) return false;
        if (email != null ? !email.equals(that.email) : that.email != null) return false;
        if (pwd != null ? !pwd.equals(that.pwd) : that.pwd != null) return false;
        if (regTime != null ? !regTime.equals(that.regTime) : that.regTime != null) return false;
        if (userName != null ? !userName.equals(that.userName) : that.userName != null) return false;

return true;
    }

@Override
    public int hashCode() {
        int result = userId;
        result = 31 * result + (userName != null ? userName.hashCode() : 0);
        result = 31 * result + (pwd != null ? pwd.hashCode() : 0);
        result = 31 * result + (email != null ? email.hashCode() : 0);
        result = 31 * result + (regTime != null ? regTime.hashCode() : 0);
        return result;
    }

private Collection<ArticleEntity> articlesByUserId;

@OneToMany(mappedBy = "userByUserId")
    public Collection<ArticleEntity> getArticlesByUserId() {
        return articlesByUserId;
    }

public void setArticlesByUserId(Collection<ArticleEntity> articlesByUserId) {
        this.articlesByUserId = articlesByUserId;
    }
}

 UserService

package com.blog.service;

import com.blog.entity.UserEntity;

import java.security.PrivateKey;

/**
 * Created with IntelliJ IDEA.
 * User: Juyan
 * Date: 12-12-15
 * Time: 下午8:43
 * To change this template use File | Settings | File Templates.
 */
public interface UserService {

public UserEntity findById(Object id);

}

UserServiceImpl

package com.blog.serviceimpl;

import com.blog.dao.UserDao;
import com.blog.daoimpl.UserDaoImpl;
import com.blog.entity.UserEntity;
import com.blog.service.UserService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**
 * Created with IntelliJ IDEA.
 * User: Juyan
 * Date: 12-12-15
 * Time: 下午8:47
 * To change this template use File | Settings | File Templates.
 */
@Service 
public class UserServiceImpl implements UserService {

@Resource
    UserDao userDao;

@Override
    public UserEntity findById(Object id) {
        return userDao.findById(id);
    }
}

index.jsp

<%@ taglib prefix="s" uri="/struts-tags" %> 
<%-- 
  Created by IntelliJ IDEA. 
  User: Juyan 
  Date: 12-12-15 
  Time: 下午12:14 
  To change this template use File | Settings | File Templates. 
--%> 
<%@ page contentType="text/html;charset=UTF-8" language="java" %> 
<html> 
  <head> 
    <title>Login</title> 
  </head> 
  <body> 
              <s:form action="login" namespace="/"  method="POST"> 
                  用户名:<s:textfield name="userName"  /> 
                  密码:<s:password name="pwd"/> 
                                  <s:submit name="登录" method="check"/> 
              </s:form> 
              <s:property value="message"/> 
  </body> 
</html>

配置完毕后,点击上面的tomcat毛旁边的运行按钮。说是登陆,其实我只查询了对象。数据库是mysql,自己创建吧。user表里面有个id字段。道理是一样的。

还有什么问题加我QQ.

基于IDEA 最新Spirng3.2+hibernate4+struts2.3 全注解配置 登录相关推荐

  1. spring+hibernate+Struts2 整合(全注解及注意事项)

    最近帮同学做毕设,一个物流管理系统,一个点餐系统,用注解开发起来还是很快的,就是刚开始搭环境费了点事,今天把物流管理系统的一部分跟环境都贴出来,有什么不足的,请大神不吝赐教. 1.结构如下 2.jar ...

  2. 基于全注解的SpringMVC+Spring4.2+hibernate4.3框架搭建

    概述 从0到1教你搭建spring+springMVC+hibernate整合框架,基于注解. 本教程框架为基于全注解的SpringMVC+Spring4.2+hibernate4.3,开发工具为my ...

  3. Struts2注解配置之@Action(二)

    当注解配置能够简化繁杂的xml,你是否想过也要使用注解? 最近对原有项目的框架使用的Struts2进行升级.很早以前就想尝试注解的方式进行配置.但是由于项目稳定性和改配置方式可能带来的问题一直没有进行 ...

  4. 基于Ubuntu 18.04机器人操作系统环境和深度学习环境配置

    基于Ubuntu 18.04机器人操作系统环境和深度学习环境配置详解 CUDA+Cudnn+ROS+anaconda+ubuntu装机必备 笔记本双系统安装 U盘启动项安装ubuntu18.04.1 ...

  5. 知来路方知去处。坎坷已过,一马平川后必看的经典!——2018最新倾斜摄影建模与无人机航拍影像处理完美配置解决方案!

    知来路方知去处.坎坷已过,一马平川后必看的经典!--2018最新倾斜摄影建模与无人机航拍影像处理完美配置解决方案! 知来路方知去处.来路坎坷已过,一马平川后更待继续攀登,这是测绘从业者的真实写照,也是 ...

  6. 2022 最新 Mac Vim 开发环境的部署与配置

    2022 最新 Mac Vim 开发环境的部署与配置 效果图 Vim 插件简介 插件名 描述 pope/vim-fugitive Vim 编辑器中的 Git 包装器插件,它可以让我们在 Vim 编辑器 ...

  7. R语言ggplot2可视化彩色水平条形图并基于条形长度和数值标签长度、自定义最优化配置标签在条形内部或者条形外部

    R语言ggplot2可视化彩色水平条形图并基于条形长度和数值标签长度.自定义最佳配置标签在条形内部或者条形外部 目录

  8. Spring3.2.0-mybatis3.2.0 基于全注解搭建的后台框架-基础版

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: Spring3.2.0-mybatis3.2.0 基于全注解搭建的后台框架-基础版 没有什么不可能  之前一直用的是自 ...

  9. 华为全面屏鸿蒙,华为P50pro最新确认:麒麟1020+立体全面屏+鸿蒙系统,这才是华为...

    原标题:华为P50pro最新确认:麒麟1020+立体全面屏+鸿蒙系统,这才是华为 华为P系列一直是领导华为手机上半年的发展,而今年的华为P40系列更是实现了大爆发,市场上手机销量不断的攀升,并且权威的 ...

  10. 华为麒麟1020鸿蒙系统,华为P50pro最新确认:麒麟1020+立体全面屏+鸿蒙系统,这才是华为...

    原标题:华为P50pro最新确认:麒麟1020+立体全面屏+鸿蒙系统,这才是华为 华为P系列一直是领导华为手机上半年的发展,而今年的华为P40系列更是实现了大爆发,市场上手机销量不断的攀升,并且权威的 ...

最新文章

  1. InstallUtil.exe版本引起安装windows services 服务遇到的问题,System.BadImageFormatException...
  2. 单片机矩阵消抖延时c语言,单片机矩阵按键定时器消抖程序源码
  3. wamp php启动不成功,wamp的mysql 启动失败解决
  4. 一文带你了解V4L2
  5. 【中生代技术】1024程序员节快跑,提需求的来了
  6. css样式,后代选择器
  7. 关于 MRC 开发中的一些细节
  8. Diffusion Model扩散模型原理
  9. 完全卸载vs2015
  10. ubuntu 20.04中火狐浏览器安装flash插件
  11. 重磅!公安部再度认可电子签名、电子印章法律效力!
  12. Lightbox滚轮缩放功能
  13. 基于云虚拟机的代码覆盖率
  14. STM32单片机点亮流水灯
  15. Java是什么?Java的特点有哪些?
  16. javascript中this指向问题(es5)
  17. dockers安装Jenkins
  18. 赛码网--求数列的和
  19. 微信链接重定向之后后退两次才能退出当前页面问题解决
  20. linux vim的查找字符串

热门文章

  1. Atitit.数据库存储引擎的原理与attilax 总结
  2. paip.python ide 总结最佳实践o4.
  3. paip.InternetExplorer.Application打开非IE的解决方法
  4. 海外金融巨头启示:站在SSC肩上,探索恒生电子下一征程(深度)| 国君计算机
  5. 睿远基金副总经理傅鹏博:用实业思维做投资 在认知范围之内做选择
  6. CTP接口封装相关贴---集合
  7. 中国银行刘东海:净值产品短期难当主角 需关注资产集中处置风险
  8. (转)孙正义:数字资产会成为人类最大的资产
  9. (转)Palantir: 神秘的大数据公司
  10. (转)高新技术在高频交易中的运用