频道栏目
首页 > 资讯 > 其他 > 正文

SSM框架Maven项目整合实例

16-12-12        来源:[db:作者]  
收藏   我要投稿

SSM框架Maven项目整合实例:我是根据这篇博客自己学习这个实例的:AndyLizh的专栏 SSM框架——详细整合教(Spring+SpringMVC+MyBatis) ,上面的这篇博客里有怎么搭建 Maven 环境,根据数据表自动生成 Mybatis 的Dao层,Service层,Maping xml文件等教程。

下面是我的实例实现的详细步骤、源代码和一些笔记、遇到的问题

版本信息

Eclipse版本 Neon.1a Release (4.6.1)
apache-maven-3.3.9
数据库 MySQL5.7.12

maven 配置的中央仓库阿里云地址

setting.xml

.
.
 
    
      alimaven
      aliyun maven
      http://maven.aliyun.com/nexus/content/groups/public/
      central        
    
  
  .
  .

完整项目结构

这里写图片描述

SSM项目创建过程

源代码下载

1.新建一个Maven Project

这里写图片描述

建好之后会提示下面的错误:

The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path    index.jsp   

在项目右键 Java Build Path 添加 Tomcat 服务器的依赖

这里写图片描述

修改 JRE 版本, Edit 更改为 Eclipse 工作空间默认的 JRE 版本,我的是1.8

之后还要在pom.xml文件中声明 jre 的版本(配置pom.xml文件时给出),和你Java Build Path中配置的版本要相同,否则 maven update project又会回到1.5版本,这个版本和项目目录下.settings/org.eclipse.wst.common.project.facet.core.xml的配置有关

这里写图片描述

2.配置Maven Project的pom.xml 文件

默认的 pom.xml 内容:

pom.xml


  4.0.0
  com.jxust
  SSM-Test2
  war
  0.0.1-SNAPSHOT
  SSM-Test2 Maven Webapp
  http://maven.apache.org
  
    
      junit
      junit
      3.8.1
      test
    
  
  
    SSM-Test2
  

Maven Project 最重要的就是配置这个 pom.xml 文件,我在引用别人的pom.xml文件时,发生了很多问题,这和 maven 中央仓库的地址应该也有关系。

说到阿里云的maven中央仓库的jar包,在我的测试中,像Spring 和Mybatis 最新的jar包都还没有,需要低一个版本才有

在配置 pom.xml 过程中,遇到了的几个问题:

 


jackjson

 

2.0版本前叫org.codehaus.jackson ,2.0版本之后com.fasterxml.jackson ,配置方式不同
        
        
            com.fasterxml.jackson.core
            jackson-databind
            2.7.5
        
         
          
            org.codehaus.jackson  
            jackson-mapper-asl  
            1.9.13  
         

 


mybatis-spring

 

升级 Spring 或者 Mybatis 的版本是,mybatis-spring 包的版本也要跟着升级
spring 版本 4.0.2,Mybatis 的版本为3.2.6时,mybatis-spring的jar包1.2.0就行
spring 版本 4.3.3,Mybatis 的版本为3.4.0时,mybatis-spring的jar包1.3.0才可以
    
        
            org.mybatis
            mybatis-spring
            1.3.0
        

 


org.mybatis.spring.SqlSessionFactoryBean找不到

 

配置了mybatis spring 版本的不对
.


Maven引入需要的SSM 框架jar包,修改后:
pom.xml


    4.0.0
    com.jxust
    SSM-Test2
    war
    0.0.1-SNAPSHOT
    SSM-Test2 Maven Webapp
    http://maven.apache.org
    
        
        4.3.3.RELEASE
        
        3.4.0
        
        1.7.7
        1.2.17
    

    
        
            junit
            junit
            4.12
            
            test
        
        
        
            org.springframework
            spring-core
            ${spring.version}
        

        
            org.springframework
            spring-web
            ${spring.version}
        
        
            org.springframework
            spring-oxm
            ${spring.version}
        
        
            org.springframework
            spring-tx
            ${spring.version}
        

        
            org.springframework
            spring-jdbc
            ${spring.version}
        

        
            org.springframework
            spring-webmvc
            ${spring.version}
        
        
            org.springframework
            spring-aop
            ${spring.version}
        

        
            org.springframework
            spring-context-support
            ${spring.version}
        

        
            org.springframework
            spring-test
            ${spring.version}
        
        
        
            org.mybatis
            mybatis
            ${mybatis.version}
        

        
        
            org.mybatis
            mybatis-spring
            1.3.0
        
        
        
            javax
            javaee-api
            7.0
        
        
        
            mysql
            mysql-connector-java
            5.1.25
        
        
        
            commons-dbcp
            commons-dbcp
            1.2.2
        
        
        
            jstl
            jstl
            1.2
        
        
        
        
            log4j
            log4j
            ${log4j.version}
        


        
        
            com.alibaba
            fastjson
            1.1.41
        


        
            org.slf4j
            slf4j-api
            ${slf4j.version}
        

        
            org.slf4j
            slf4j-log4j12
            ${slf4j.version}
        
        
        
        
            com.fasterxml.jackson.core
            jackson-databind
            2.7.5
        
        
        
            commons-fileupload
            commons-fileupload
            1.3.1
        
        
            commons-io
            commons-io
            2.4
        
        
            commons-codec
            commons-codec
            1.9
        

    
    
        SSM-Test2
        
            
            
                org.apache.maven.plugins
                maven-compiler-plugin
                2.3.2
                
                    1.8
                    1.8
                
            
        
    

有些jar包并不一定会用到

之后保存,右击项目-maven-update project,如果出现以下的异常

JavaServer Faces 2.2 can not be installed : One or more constraints have not been satisfied.
JavaServer Faces 2.2 requires Dynamic Web Module 2.5 or newer.  SSM-Test2   

这是web.xml文件头信息配置的不正确,原来的2.3,不符合要求。

解决步骤1:web.xml头信息替换为下面的代码:

web.xml




解决步骤2:关闭Eclipse,修改项目目录下.settings/org.eclipse.wst.common.project.facet.core.xml的配置

  

改为

  

重启Eclipse,右击项目-maven-update project(不行,就先移除项目,导入)

具体步骤参考:http://www.cnblogs.com/jebeljebel/p/4421098.html

项目结构为:
这里写图片描述

之后可以在 Java Build Path 中查看自己 maven 下载的jar包。

这里写图片描述

3.Spring与MyBatis的整合

这里写图片描述

3.1数据库连接配置文件

jdbc.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/db_ssm
username=root
password=root

initialSize=0 
maxActive=20 
maxIdle=20
minIdle=1
maxWait=60000

注意字符后面不要带空格,特别是当你复制别人的代码时,例如 ‘root ‘,我就是犯了这个错误

3.2 Spring文件中配置mybatis

包的路径,在创建之后,记得改为自己的路径

spring-mybatis.xml




      
    
    
        
       

       
      
          
      

      
          
          
          
          
          
          
          
          
          
          
          
          
          
          
      

       
      
          
          
          
      

      
      
          
          
      

      
      
          
      

    
    

3.3 log4j 的配置

通过日志来输出各种调试信息

log4j.properties

#定义LOG输出级别 
log4j.rootLogger=INFO,Console,File 
#定义日志输出目的地为控制台  
log4j.appender.Console=org.apache.log4j.ConsoleAppender 
log4j.appender.Console.Target=System.out
#可以灵活地指定日志输出格式,下面一行是指定具体的格式  
log4j.appender.Console.layout = org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=[%c] - %m%n

#文件大小到达指定尺寸的时候产生一个新的文件
log4j.appender.File = org.apache.log4j.RollingFileAppender
#指定输出目录
log4j.appender.File.File = logs/ssm.log
#定义文件最大大小
log4j.appender.File.MaxFileSize = 10MB
# 输出所以日志,如果换成DEBUG表示输出DEBUG以上级别日志
log4j.appender.File.Threshold = ALL
log4j.appender.File.layout = org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n

3.4 创建 MySQL 数据库和表

建表语句和原始数据

mysql> use db_ssm;
Database changed

mysql> CREATE TABLE tb_user(
    -> id int(11) NOT NULL AUTO_INCREMENT,
    -> user_name varchar(40) NOT NULL,
    -> password varchar(40) NOT NULL,
    -> age int(4) NOT NULL,
    -> PRIMARY KEY(id))
    -> ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.33 sec)

mysql> select * from tb_user;
+----+-----------+----------+-----+
| id | user_name | password | age |
+----+-----------+----------+-----+
|  1 | 李白      | 123454   |  23 |
|  2 | 杜甫      | 234234   |  23 |
+----+-----------+----------+-----+
2 rows in set (0.00 sec)

3.5 利用MyBatis Generator自动创建代码

该工具可根据MySQL中的表(tb_user)自动创建实体类、MyBatis映射文件以及Dao接口
参考博文:http://blog.csdn.net/zhshulin/article/details/23912615

这里写图片描述

红色部分为自动生成的文件,UserMaping.xml里各种包路径,要修改成自己的,尤其是namespace,要关联为创建的UserDao(因为使用了动态代理实现)

你可以自己去尝试自动创建,下面给出这3个文件(注释是我加的)。

User.java

package com.jxust.ssm.pojo;
/**
 * 用户实体类
 * 对应数据表tb_user
 * @author Peng
 * @Date2016年12月10日下午10:30:16
 */
public class User {
    private Integer id;

    private String userName;

    private String password;

    private Integer age;

    public Integer getId() {
        return id;
    }

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

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName == null ? null : userName.trim();
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password == null ? null : password.trim();
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User [id=" + id + ", userName=" + userName + ", password=" + password + ", age=" + age + "]";
    }    
}

UserDao.java

package com.jxust.ssm.dao;

import com.jxust.ssm.pojo.User;
/**
 * User类Dao层接口
 * 
 * 之前我们会在dao层自己手动实现dao层然后自动注入SqlSessionTemplate 实例
 * 来调用具体的方法 比如 insert("","")  selectOne("","") 等方法 
 * 其中第一个参数就是映射文件的地址: namespace+id  而第二个参数就是传递的条件这样mybatis 
 * 就会按照我们传递的这两个参数找到具体的映射文件进行解析查询。
 * 而这里使用动态代理就省去了我们实现dao接口的这一步骤,而是由spring提我们实现了
 * @author Peng
 * @Date2016年12月10日下午10:31:27
 */
public interface UserDao {
    int deleteByPrimaryKey(Integer id);

    int insert(User record);

    int insertSelective(User record);

    User selectByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(User record);

    int updateByPrimaryKey(User record);
}

自动创建的文件中,有增删改查的各种方法,动态SQL等,如果你想了解详细的使用方法:http://blog.csdn.net/peng_hong_fu/article/details/53235271

UserMapper.xml





    
        
        
        
        
    
    
        id, user_name, password, age
    
    

    
        delete from
        tb_user
        where id = #{id,jdbcType=INTEGER}
    

    
        insert into tb_user (id,
        user_name, password,
        age)
        values (#{id,jdbcType=INTEGER},
        #{userName,jdbcType=VARCHAR},
        #{password,jdbcType=VARCHAR},
        #{age,jdbcType=INTEGER})
    

    
        insert into tb_user
        
            
                id,
            
            
                user_name,
            
            
                password,
            
            
                age,
            
        
        
            
                #{id,jdbcType=INTEGER},
            
            
                #{userName,jdbcType=VARCHAR},
            
            
                #{password,jdbcType=VARCHAR},
            
            
                #{age,jdbcType=INTEGER},
            
        
    

    
        update tb_user
        
            
                user_name = #{userName,jdbcType=VARCHAR},
            
            
                password = #{password,jdbcType=VARCHAR},
            
            
                age = #{age,jdbcType=INTEGER},
            
        
        where id = #{id,jdbcType=INTEGER}
    

    
        update tb_user
        set
        user_name = #{userName,jdbcType=VARCHAR},
        password =
        #{password,jdbcType=VARCHAR},
        age = #{age,jdbcType=INTEGER}
        where id =
        #{id,jdbcType=INTEGER}
    

3.6 创建 Service层 接口和实现类

这里写图片描述

UserService.java

package com.jxust.ssm.service;

import com.jxust.ssm.pojo.User;
/**
 * Service层接口
 * @author Peng
 * @Date2016年12月11日下午7:05:05
 */
public interface UserService {
    //根据id查找
    public User getUserById(Integer userid);

    //添加一条数据
    public int insert(User user);
}

UserServiceImpl.java

package com.jxust.ssm.service.impl;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.jxust.ssm.dao.UserDao;
import com.jxust.ssm.pojo.User;
import com.jxust.ssm.service.UserService;
/**
 * userService 接口的实现类
 * 
 * @author Peng
 * @Date2016年12月11日上午11:50:01
 */
@Transactional
@Service("userService")
public class UserServiceImpl implements UserService {
    /**
     * 因为没有在spring的文件中显式的声明userService实现类,直接通过getBean得到 userService 会找不到
     *  需要显式配置 @Service ("userService"),指定bean的名称
     *  相当与
     */
    @Resource
    private UserDao userDao;

    public User getUserById(Integer userid) {   
        return this.userDao.selectByPrimaryKey(userid);
    }

    @Override
    public int insert(User user) {
        return this.userDao.insert(user);
    }
}

3.7 Junit 测试Spring整合Mybatis

这里写图片描述

使用Junit测试,TestMyBatis为使用 spring 的测试方法,TestMyBatis2为不使用 spring 的普通方法

TestMyBatis.java

package com.test;

import javax.annotation.Resource;

import org.apache.log4j.Logger;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.alibaba.fastjson.JSON;
import com.jxust.ssm.pojo.User;
import com.jxust.ssm.service.UserService;

@RunWith(SpringJUnit4ClassRunner.class) // 表示继承了SpringJUnit4ClassRunner类
@ContextConfiguration(locations = { "classpath:spring-mybatis.xml" })
/**
 * 测试spring整合mybatis spring方式
 * 
 * @author Peng
 * @Date2016年12月11日上午11:52:56
 */
public class TestMyBatis {
    private static Logger logger = Logger.getLogger(TestMyBatis.class);

    @Resource
    private UserService userService = null;

    /**
     * 测试查询
     */
    @Test
    public void test1() {
        User user = userService.getUserById(2);
        logger.info("值:" + user.getUserName());
        logger.info(JSON.toJSONString(user));
    }
    /**
     * 测试添加
     */
    @Test
    public void test2() {       
        User user = new User();
        user.setUserName("杜甫3");
        user.setPassword("234234");
        user.setAge(23);
        int count = userService.insert(user);
        logger.info("count:" +count);
    }
}

TestMyBatis2.java

package com.test;

import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.jxust.ssm.pojo.User;
import com.jxust.ssm.service.UserService;
/**
 * 测试spring整合mybatis 普通方式
 * @author Peng
 * @Date2016年12月11日上午11:52:11
 */
public class TestMyBatis2 {

    private ApplicationContext ac = null;

    private UserService userService = null;

    @Before
    public void before() {
        ac = new ClassPathXmlApplicationContext("classpath:spring-mybatis.xml");
        userService = (UserService) ac.getBean("userService");
    }
    /**
     * 测试查询
     */
    @Test
    public void test1() {
        User user = userService.getUserById(2);
        System.out.println(user.toString());
    }
    /**
     * 测试添加
     */
    @Test
    public void test2() {       
        User user = new User();
        user.setUserName("杜甫");
        user.setPassword("234234");
        user.setAge(23);
        int count = userService.insert(user);
        System.out.println("插入"+count+"条数据成功");
    }
}

测试结果:

...
[org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor] - JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
  [com.test.TestMyBatis] - 值:杜甫
  [com.test.TestMyBatis] - {"age":23,"id":2,"password":"234234","userName":"杜甫"}
  [org.springframework.context.support.GenericApplicationContext] - Closing org.springframework.context.support.GenericApplicationContext@55d56113: startup date [Sun Dec 11 20:23:43 CST 2016]; root of context hierarchy 

正确输入结果,则测试成功!

项目结构为:

这里写图片描述
这里写图片描述

4.项目整合 SpringMVC

SpringMVC 涉及到视图了,需要配置web.xml文件和SpringMVC的配置文件了

4.1配置web.xml

web.xml




    
    
        encodingFilter
        org.springframework.web.filter.CharacterEncodingFilter
        true
        
            encoding
            UTF-8
        
    
    
        encodingFilter
        /*
    

    
    
        contextConfigLocation
        classpath:spring-mybatis.xml
    

    
        org.springframework.web.context.ContextLoaderListener
    

    
    
        springDispatcherServlet
        org.springframework.web.servlet.DispatcherServlet
        
            contextConfigLocation
            classpath:springmvc.xml
        
        1
    

    
        springDispatcherServlet
        /
    

使用 Eclipse在 web.xml 文件中,可以使用 Alt+/快速创建ContextLoaderListener和DispatcherServlet两个过滤器配置

这里写图片描述

4.2 配置SpringMVC配置文件springmvc.xml

这里写图片描述

springmvc.xml




      
      

      
    

    
    

      
      
          
          
         

spring配置文件和springmvc配置文件的两个自动扫描的路径范围,最好不要重复,使用指定不扫描和扫描的条件

4.3 创建 SpringMVC 的Controller

这里写图片描述

UserController.java

package com.jxust.ssm.controller;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.jxust.ssm.pojo.User;
import com.jxust.ssm.service.UserService;

@Controller
public class UserController {
    /**
     * 使用@Autowired也可以,@Autowired默认按类型装配
     * @Resource 默认按名称装配,当找不到与名称匹配的bean才会按类型装配。
     */
    @Resource 
    private UserService userService;

    /**
     * 测试查询
     * 
     * @param id
     * @param model
     * @return
     */
    @RequestMapping("/showUser")
    public String testtoshowUser(@RequestParam(value = "id") Integer id, Model model) {
        System.out.println("id:" + id);
        User user = userService.getUserById(id);
        model.addAttribute("user", user);
        return "showUser";
    }

    /**
     * 测试添加数据
     * 
     * @param id
     * @param model
     * @return
     */
    @RequestMapping("/http://blog.csdn.net/peng_hong_fu/article/details/insertUser")
    public String testhttp://blog.csdn.net/peng_hong_fu/article/details/insertUser() {
        User user = new User();
        user.setUserName("李清照");
        user.setPassword("3232322");
        user.setAge(22);
        int count = userService.insert(user);
        System.out.println("插入" + count + "条数据成功");
        return "showUser";
    }
}

4.4 JSP页面

这里写图片描述

index.jsp

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

ShowUser page
http://blog.csdn.net/peng_hong_fu/article/details/insertUser

showUser.jsp

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

id:${user.id}
userName: ${user.userName}
password: ${user.password}
age: ${user.age}

JSP页面写完,就可以发布了

4.5 项目发布到Tomcat服务器上

这里写图片描述

源码下载

Maven 项目就是小,没有jar包,只有 30k

源代码下载:http://download.csdn.net/detail/peng_hong_fu/9708357

相关TAG标签
上一篇:1.5 Swift布尔类型
下一篇:三层学习:表示层、业务逻辑层、数据访问层
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站