Spring+SpringMVC+Mybatis(SSM)+Maven构建web项目(demo)步骤

参考博客:

http://blog.csdn.net/zhshulin/article/details/37956105

1 简介SSM

SSM在这里具体指Spring+SpringMVC+Mybatis,也有其他的SSM比如说Structs2+Spring+Mybatis,不过本文介绍第一个ssm,而且个人觉得Spring+SpringMVC+Mybatis相对于Structs2+Spring+Mybatis存在一定的优势,至于优势具体是什么,可以从SpringMVC和Structs2两个框架对比开始入手,从效率、实现、以及底层实现机制入手了解一下,再次就不多做介绍了。

2 工具

maven + eclipse + 浏览器
版本并没有多少限制,前提是eclipse里面有maven插件,如果eclipse没有maven插件,详见地址: http://www.cnblogs.com/dzdwr3/p/6433563.html (Maven的安装配置以及Eclipse中Maven插件的安装和配置).当然,最好知道自己电脑中maven版本和eclispe版本和jdk版本等等前置信息,防止后续出问题,准确定位.

3 构建SSM项目(demo)

搭建完整的SSM项目结构如下所示:

项目结构中的config包下,是为了用java配置方式代替xml配置方式,在本片博文中,就只用xml方式配置,所以config可以忽略.

这里写图片描述

构建SSM项目分为一下几个过程:

3.1 eclipse新建maven工程

推荐博客:http://blog.csdn.net/zhshulin/article/details/37921705

3.2 pom.xml和spring + mybatis 和springMVC三者的配置文件

(1)添加ssm必须依赖项到pom.xml中

下面这个pom.xml文件一个完成ssm的pom.xml文件,可以在其中选择需要的jar包依赖项加入到工程中的pom.xml文件当中.

添加完所需的依赖项之后,最好clean一下项目.
<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/maven-v4_0_0.xsd">

  <modelVersion>4.0.0</modelVersion>
  <groupId>com.testLg</groupId>
  <artifactId>testLg</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>testLg Maven Webapp</name>
  <url>http://maven.apache.org</url>

  <!-- 版本号 -->
  <properties>  
       <!-- spring版本号 -->  
       <spring.version>4.0.2.RELEASE</spring.version>  
       <!-- mybatis版本号 -->  
       <mybatis.version>3.2.6</mybatis.version>  
       <!-- log4j日志文件管理包版本 -->  
       <slf4j.version>1.7.7</slf4j.version>  
       <log4j.version>1.2.17</log4j.version>  
   </properties> 

  <!-- 依赖项 -->
  <dependencies>

    <!-- 单元测试依赖项 -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <!-- 表示开发的时候引入,发布的时候不会加载此包 -->  
      <scope>test</scope>
    </dependency>

    <!-- spring核心包 -->  
    <dependency>  
        <groupId>org.springframework</groupId>  
        <artifactId>spring-core</artifactId>  
        <version>${spring.version}</version>  
    </dependency>  

    <dependency>  
        <groupId>org.springframework</groupId>  
        <artifactId>spring-web</artifactId>  
        <version>${spring.version}</version>  
    </dependency>  
    <dependency>  
        <groupId>org.springframework</groupId>  
        <artifactId>spring-oxm</artifactId>  
        <version>${spring.version}</version>  
    </dependency>  
    <dependency>  
        <groupId>org.springframework</groupId>  
        <artifactId>spring-tx</artifactId>  
        <version>${spring.version}</version>  
    </dependency>  

    <dependency>  
        <groupId>org.springframework</groupId>  
        <artifactId>spring-jdbc</artifactId>  
        <version>${spring.version}</version>  
    </dependency>  

    <dependency>  
        <groupId>org.springframework</groupId>  
        <artifactId>spring-webmvc</artifactId>  
        <version>${spring.version}</version>  
    </dependency>  
    <dependency>  
        <groupId>org.springframework</groupId>  
        <artifactId>spring-aop</artifactId>  
        <version>${spring.version}</version>  
    </dependency>  

    <dependency>  
        <groupId>org.springframework</groupId>  
        <artifactId>spring-context-support</artifactId>  
        <version>${spring.version}</version>  
    </dependency>  

    <dependency>  
        <groupId>org.springframework</groupId>  
        <artifactId>spring-test</artifactId>  
        <version>${spring.version}</version>  
    </dependency>  

    <!-- mybatis核心包 -->  
    <dependency>  
        <groupId>org.mybatis</groupId>  
        <artifactId>mybatis</artifactId>  
        <version>${mybatis.version}</version>  
    </dependency>  

     <!-- mybatis/spring包 -->  
    <dependency>  
        <groupId>org.mybatis</groupId>  
        <artifactId>mybatis-spring</artifactId>  
        <version>1.2.2</version>  
    </dependency>  

     <!-- 导入java ee jar 包 -->  
    <dependency>  
        <groupId>javax</groupId>  
        <artifactId>javaee-api</artifactId>  
        <version>7.0</version>  
    </dependency>  

     <!-- 导入Mysql数据库链接jar包 -->  
    <dependency>  
        <groupId>mysql</groupId>  
        <artifactId>mysql-connector-java</artifactId>  
        <version>5.1.36</version>  
    </dependency>  

    <!-- postgresql -->
    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>9.4.1212.jre7</version>
    </dependency>

    <!-- 导入dbcp的jar包,用来在applicationContext.xml中配置数据库 -->  
    <dependency>  
        <groupId>commons-dbcp</groupId>  
        <artifactId>commons-dbcp</artifactId>  
        <version>1.2.2</version>  
    </dependency>  

    <!-- JSTL标签类 -->  
    <dependency>  
        <groupId>jstl</groupId>  
        <artifactId>jstl</artifactId>  
        <version>1.2</version>  
    </dependency>  

    <!-- 日志文件管理包 --> 
    <!-- log start -->  
    <dependency>  
        <groupId>log4j</groupId>  
        <artifactId>log4j</artifactId>  
        <version>${log4j.version}</version>  
    </dependency>  

    <!-- 格式化对象,方便输出日志 -->  
    <dependency>  
        <groupId>com.alibaba</groupId>  
        <artifactId>fastjson</artifactId>  
        <version>1.1.41</version>  
    </dependency>  


    <dependency>  
        <groupId>org.slf4j</groupId>  
        <artifactId>slf4j-api</artifactId>  
        <version>${slf4j.version}</version>  
    </dependency>  

    <dependency>  
        <groupId>org.slf4j</groupId>  
        <artifactId>slf4j-log4j12</artifactId>  
        <version>${slf4j.version}</version>  
    </dependency>  
    <!-- log end -->  
    <!-- 映入JSON -->  
    <dependency>  
        <groupId>org.codehaus.jackson</groupId>  
        <artifactId>jackson-mapper-asl</artifactId>  
        <version>1.9.13</version>  
    </dependency>  
    <!-- 上传组件包 -->  
    <dependency>  
        <groupId>commons-fileupload</groupId>  
        <artifactId>commons-fileupload</artifactId>  
        <version>1.3.1</version>  
    </dependency>  
    <dependency>  
        <groupId>commons-io</groupId>  
        <artifactId>commons-io</artifactId>  
        <version>2.4</version>  
    </dependency>  
    <dependency>  
        <groupId>commons-codec</groupId>  
        <artifactId>commons-codec</artifactId>  
        <version>1.9</version>  
    </dependency>  

    <!-- validator校验 -->
    <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>1.1.0.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>5.2.4.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator-annotation-processor</artifactId>
        <version>5.2.4.Final</version>
    </dependency>

  </dependencies>

  <build>
    <finalName>testLg</finalName>
    <plugins>
         <plugin>
             <groupId>org.eclipse.jetty</groupId>
             <artifactId>jetty-maven-plugin</artifactId>
             <version>9.2.8.v20150217</version>
             <configuration>
                 <httpConnector>
                     <port>80</port>
                 </httpConnector>
                 <stopKey>shutdown</stopKey>
                 <stopPort>9966</stopPort>
             </configuration>
         </plugin>
     </plugins>
  </build>
</project>

(2)新建spring-mybatis.xml文件

spring+mybatis配置文件如下所示:
<?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: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-3.1.xsd    
                        http://www.springframework.org/schema/context    
                        http://www.springframework.org/schema/context/spring-context-3.1.xsd    
                        http://www.springframework.org/schema/mvc    
                        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">  

    <!-- 扫包 -->
    <context:component-scan base-package="com.cn"></context:component-scan>                      

    <!-- 引入配置文件 -->  
    <bean id="propertyConfigurer"  
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
        <property name="location" value="classpath:jdbc.properties" />  
    </bean>  

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"  
        destroy-method="close">  
        <property name="driverClassName" value="${driver}" />  
        <property name="url" value="${url}" />  
        <property name="username" value="${username}" />  
        <property name="password" value="${password}" />  
        <!-- 初始化连接大小 -->  
        <property name="initialSize" value="${initialSize}"></property>  
        <!-- 连接池最大数量 -->  
        <property name="maxActive" value="${maxActive}"></property>  
        <!-- 连接池最大空闲 -->  
        <property name="maxIdle" value="${maxIdle}"></property>  
        <!-- 连接池最小空闲 -->  
        <property name="minIdle" value="${minIdle}"></property>  
        <!-- 获取连接最大等待时间 -->  
        <property name="maxWait" value="${maxWait}"></property>  
    </bean>  

    <!-- 因为spring和mybatis的整合,导致mybatis的配置文件没有了存在的必要了 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <!-- 自动扫描mapping.xml文件 -->
        <property name="mapperLocations" value="classpath:com/cn/mapper/*.xml"></property>
    </bean>

    <!-- dao接口所在包名,Spring会自动查找其下的类 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.cn.dao"></property>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
    </bean>

    <!-- 事物管理 transaction manager, use JtaTransactionManager for global tx -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

</beans>  

(3)新建spring-mvc.xml文件

springMVC的配置文件如下所示:
<?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: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-3.1.xsd    
                        http://www.springframework.org/schema/context    
                        http://www.springframework.org/schema/context/spring-context-3.1.xsd    
                        http://www.springframework.org/schema/mvc    
                        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">  

    <!-- 自动扫包 -->
    <context:component-scan base-package="com.cn"></context:component-scan>

    <mvc:annotation-driven></mvc:annotation-driven>  

    <!-- 定义跳转的文件的前后缀 ,视图模式配置-->  
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
        <!-- 这里的配置我的理解是自动给后面action的方法return的字符串加上前缀和后缀,变成一个 可用的url地址 -->  
        <property name="prefix" value="/WEB-INF/jsp/" />  
        <property name="suffix" value=".jsp" />  
    </bean>             

</beans>

*3.3 SSM项目代码编写

(1)User.java文件编写

package com.cn.entity;

import java.io.Serializable;

import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotBlank;

public class User implements Serializable{

    @NotBlank(message="登录名不能为空")
    private String c_username;//用户账号

    @NotBlank(message="密码不能为空")
    private String c_password;//用户账号

    @NotBlank(message="颜值不能为空")
    private String c_salt;

    public User() {
        super();
    }

    public String getC_username() {
        return c_username;
    }

    public void setC_username(String c_username) {
        this.c_username = c_username;
    }

    public String getC_password() {
        return c_password;
    }

    public void setC_password(String c_password) {
        this.c_password = c_password;
    }

    public String getC_salt() {
        return c_salt;
    }

    public void setC_salt(String c_salt) {
        this.c_salt = c_salt;
    }

    @Override
    public String toString() {
        return "用户信息: [c_username=" + c_username + ", c_password=" + c_password
                + ", c_salt=" + c_salt + "]";
    }


}

(2) IUserDao.java文件编写

package com.cn.dao;

import java.util.List;

import com.cn.entity.User;

public interface IUserDao {

    /**
     * 查询所有用户信息
     * @return 
     */
    public List<User> selectAllUserInformation();

    /**
     * 依据用户登录名称查询用户信息
     * @return
     */
    public User selectUserByUserName(String username);

}

(3) UserMapping.xml文件编写

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cn.dao.IUserDao">

    <!-- 查询所有用户信息 -->
    <select id="selectAllUserInformation" resultType="com.cn.entity.User">
        select 
            * 
        from 
            center_login
    </select>

    <!-- 依据用户登录名称查询用户登录信息 -->
    <select id="selectUserByUserName" parameterType="string" resultType="com.cn.entity.User">
        select
            * 
        from 
            center_login
        where 
            c_username = #{c_username}
    </select>

</mapper>

(4) IUserService.java文件编写

package com.cn.service;

import java.util.List;

import com.cn.entity.User;

public interface IUserService {

    /**
     * 查询所有用户信息
     * @return
     */
    public List<User> findAllUserInformation();

    /**
     * 核对用户登录信息
     * @return
     */
    public boolean checkUserLoginInformation(User user);

}

(5)UserServiceImpl.java文件编写

package com.cn.service.impl;

import java.util.List;

import javax.annotation.Resource;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import com.cn.dao.IUserDao;
import com.cn.entity.User;
import com.cn.service.IUserService;

@Service(value="userServiceImpl")
public class UserServiceImpl implements IUserService{

    private Logger logger = Logger.getLogger(UserServiceImpl.class);

    @Resource
    private IUserDao userDao;

    @Override
    public List<User> findAllUserInformation() {
        logger.info(" find all user information in UserServiceImpl --> findAllUserInformation");
        List<User> allUserInformation = userDao.selectAllUserInformation();
        return allUserInformation;
    }

    @Override
    public boolean checkUserLoginInformation(User user) {
        logger.info(" find all user information in UserServiceImpl --> checkUserLoginInformation");
        if(StringUtils.isEmpty(user)){
            return false;
        }
        User userFromDB = userDao.selectUserByUserName(user.getC_username());
        System.out.println(userFromDB.getC_username());
        if(!StringUtils.isEmpty(userFromDB) && user.getC_username().equals(userFromDB.getC_username()) && user.getC_password().equals(userFromDB.getC_password())){
            return true;
        }
        return false;
    }

}

(6)UserController.java文件编写

package com.cn.controller;

import java.util.List;

import javax.validation.Valid;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.Errors;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.cn.config.validator.UserValidator;
import com.cn.entity.User;
import com.cn.service.IUserService;

@Controller
@RequestMapping(value="/user")
public class UserController {

    private Logger logger = Logger.getLogger(UserController.class);

    @Autowired
    private IUserService userServiceImpl;

    /**
     * 进入登录界面
     * @return
     */
    @RequestMapping(value = "/getLoginJSP", method = RequestMethod.GET)
    public String getLoginJSP(Model model){
        User user = new User();
        model.addAttribute("user", user);
        return "login";
    }

    /**
     * 检查用户登录信息
     * @param user
     * @param errors
     * @param model
     * @return
     */
    @RequestMapping(value = "/loginMainJSP", method = RequestMethod.POST)
    public String loginMainJSP(@Valid User user, BindingResult result, Model model){
        logger.info("check user information in UserController --> loginMainJSP");
        if(result.hasErrors()){
            return "login";
        }
        boolean flag = userServiceImpl.checkUserLoginInformation(user);
        if(flag){
            model.addAttribute("user", user);

            return "main";
        }else{
            model.addAttribute("errorMessage", "登录名或者密码或者颜值出错");
            return "login";
        }
    }

    /**
     * 查询所有用户信息
     * @param model
     * @return
     */
    @RequestMapping(value = "/selectALLUserInformation", method = RequestMethod.GET)
    public Object getAllUserInformation(Model model){
        logger.info("query all user information in UserController --> getAllUserInformation");
        List<User> allUserInformation = userServiceImpl.findAllUserInformation();
        model.addAttribute("allUserInformation", allUserInformation);
        return "showUser";
    }

}

4 SSM测试

使用eclipse内置tomcat或者自己安装的tomcat启动项目,访问路径为:http://localhost:8080/testLg/user/getLoginJSP.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值