java spring mvc idea_使用Intellij IDEA整合Spring+Spring MVC+MyBitis

本文参考:SSM框架-详细整合教程

主要记录了我的整合过程以及整合过程中遇到的错误,并增加了项目配置和部署的过程

刚开始接触到后端开发是在大二过后的暑假,那时候使用的框架搭配还是Spring+SpringMVC+iBitis(MyBitis的前身)。最近在准备面试看Spring的原理,由于以前的项目代码不在了,于是新建一个项目,参考教程重新整合了一遍SSM框架,并在这里进行一些记录。

1. 基本概念

1.1 Spring

Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

1.2 SpringMVC

Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。

1.3 MyBitis

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。MyBatis是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

2. 开发环境

JDK1.8.0_111

Tomcat8

Intellij IDEA

本次整合的框架版本为

Spring 4.0.2 RELEASE

Spring MVC 4.0.2 RELEASE

MyBatis 3.2.6

3. 创建项目开整

3.1创建maven javaweb项目

File->New Project,勾选Create ...选择相应选项,点击Next

1e255bcb16f1c6514b43b80c77c50a10.png

填写GroupId、ArtifactId和Version,这里的ArtifactId记住后面要用到。点击Next

5ff5f861c3d472a0ede942a819c3e51b.png

点击Next

d34cda2a958dce59dbcc9db2c08185c6.png

输入项目名称和目录,Project Format我选择的是.ipr ,点击Finish

2095151969c7f357949387672c37a09b.png

至此一个maven web项目就创建成功了,会自动生成如下几个文件

adb8cf31aec969e3f785a25980d49be4.png

3.2 Maven引入项目需要的JAR包

pom.xml

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

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

pw.greatxiaohan

simplessm

war

1.0-SNAPSHOT

4.0.2.RELEASE

3.2.6

1.7.7

1.2.15

junit

junit

4.11

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.2.2

javax

javaee-api

7.0

mysql

mysql-connector-java

5.1.30

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}

org.codehaus.jackson

jackson-mapper-asl

1.9.13

commons-fileupload

commons-fileupload

1.3.1

commons-io

commons-io

2.4

commons-codec

commons-codec

1.9

simplessm

org.apache.maven.plugins

maven-compiler-plugin

3.5.1

1.7

1.7

UTF-8

这里要注意一定要有war, 且simplessm以及simplessm这两个参数应当与之前填写的保持一致

3.3 Spring、SpringMVC与MyBitis整合

所有需要的Jar包引入之后,开始框架的整合。首先看一下按照我个人习惯建立的项目结构图:

ca5790951c449bd01e1c94eb6b886776.png

3.3.1 新建JDBC属性文件

jdbc.properties

driver=com.mysql.jdbc.Driver

url=jdbc:mysql://localhost:3306/simplessm?useUnicode=true&characterEncoding=utf-8

username=root

password=111111

#定义初始连接数

initialSize=0

#定义最大连接数

maxActive=20

#定义最大空闲

maxIdle=20

#定义最小空闲

minIdle=1

#定义最长等待时间

maxWait=60000

3.3.2 新建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/springmvcMybist/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.3.3 新建Spring和MyBitis整合所需的配置文件

spring-mybitis.xml

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">

class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

destroy-method="close">

class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

3.3.4 新建整合SpringMVC所需的配置文件

spring-mvc.xml

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-4.0.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-4.0.xsd

http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">

class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">

text/html;charset=UTF-8

class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">

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

class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

3.3.5 配置web.xml文件

web.xml

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">

Archetype Created Web Application

contextConfigLocation

classpath:spring-mybatis.xml

encodingFilter

org.springframework.web.filter.CharacterEncodingFilter

true

encoding

UTF-8

encodingFilter

/*

org.springframework.web.context.ContextLoaderListener

org.springframework.web.util.IntrospectorCleanupListener

SpringMVC

org.springframework.web.servlet.DispatcherServlet

contextConfigLocation

classpath:spring-mvc.xml

1

true

SpringMVC

/

/index.html

/index.jsp

至此已经完成了ssm框架的整合,接下来是一些测试代码,完成后进行项目的配置和部署

3.3.6 相关测试文件源码

1.数据库建表,在数据库中执行。文件放在src/main/java/SQL下备忘,可以不保存

user_t.sql

DROP TABLE IF EXISTS `user_t`;

CREATE TABLE `user_t` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`user_name` varchar(40) NOT NULL,

`password` varchar(255) NOT NULL,

`age` int(4) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

/*Data for the table `user_t` */

insert into `user_t`(`id`,`user_name`,`password`,`age`) values (1,'测试','sfasgfaf',24);

2.新建index.jsp欢迎页和"User"页面,这里的User.jsp页面通过SpringMVC与后面要提到的Controller中的对象绑定

4eb6237fbd69f85e20c0fe272b3f2aa4.png

index.jsp

Hello World!23333

User.jsp

pageEncoding="UTF-8"%>

测试

3.建立实体类、MyBitis映射文件以及Dao接口

6c37bb577551243e4364ec628a01b21c.png

User.java

package priv.xiaohan.ssm.model;

import java.util.Date;

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;

}

}

UserDao.java

package priv.xiaohan.ssm.dao;

import priv.xiaohan.ssm.model.User;

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);

}

UserMapper.xml

id, user_name, password, age

select

from user_t

where id = #{id,jdbcType=INTEGER}

delete from user_t

where id = #{id,jdbcType=INTEGER}

insert into user_t (id, user_name, password,

age)

values (#{id,jdbcType=INTEGER}, #{userName,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR},

#{age,jdbcType=INTEGER})

insert into user_t

id,

user_name,

password,

age,

#{id,jdbcType=INTEGER},

#{userName,jdbcType=VARCHAR},

#{password,jdbcType=VARCHAR},

#{age,jdbcType=INTEGER},

update user_t

user_name = #{userName,jdbcType=VARCHAR},

password = #{password,jdbcType=VARCHAR},

age = #{age,jdbcType=INTEGER},

where id = #{id,jdbcType=INTEGER}

update user_t

set user_name = #{userName,jdbcType=VARCHAR},

password = #{password,jdbcType=VARCHAR},

age = #{age,jdbcType=INTEGER}

where id = #{id,jdbcType=INTEGER}

4.建立Service接口和实现类

192e38c55bf2c9dec40f7f628495ca4c.png

IUserService.java

package priv.xiaohan.ssm.service;

import priv.xiaohan.ssm.model.User;

/**

* Created by xiaohan on 2017/3/15.

*/

public interface IUserService {

public User getUserByID(int id);

}

UserService.java

package priv.xiaohan.ssm.service.impl;

import org.springframework.stereotype.Service;

import priv.xiaohan.ssm.dao.UserDao;

import priv.xiaohan.ssm.model.User;

import javax.annotation.Resource;

import java.util.List;

import priv.xiaohan.ssm.service.IUserService;

@Service("userService")

public class UserService implements IUserService {

@Resource

private UserDao userdao;

public User getUserByID(int id) {

return this.userdao.selectByPrimaryKey(id);

}

}

5.建立Controller类和测试类

0c495a5dd8588b762bc38ac866710c51.png

UserController.java

package priv.xiaohan.ssm.controller;

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

import priv.xiaohan.ssm.model.User;

import org.apache.log4j.Logger;

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

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

import javax.annotation.Resource;

import javax.servlet.http.HttpServletRequest;

import java.util.List;

import priv.xiaohan.ssm.service.IUserService;

@Controller

@RequestMapping("/user")

public class UserController {

@Resource

private IUserService userService;

@RequestMapping("/showUser")

public String toIndex(HttpServletRequest request, Model model) {

int userId = Integer.parseInt(request.getParameter("id"));

User user = this.userService.getUserByID(userId);

//绑定对象到User.jsp

model.addAttribute("user", user);

return "User";

}

}

TestMyBatis.java

import javax.annotation.Resource;

import org.apache.log4j.Logger;

import org.junit.Before;

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 priv.xiaohan.ssm.model.User;

import priv.xiaohan.ssm.service.IUserService;

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(locations = { "classpath:spring-mybatis.xml" })

public class TestMyBatis {

private static Logger logger = Logger.getLogger(TestMyBatis.class);

@Resource

private IUserService userService = null;

@Test

public void test() {

User user = userService.getUserByID(1);

System.out.println(user.getUserName());

// logger.info("值:"+user.getUserName());

logger.info(JSON.toJSONString(user));

}

}

到这里项目的测试文件源码都已经完成了

4.项目配置和部署

4.1 File -> Project Structure,进入创建项目配置窗口

按下图方式配置项目

9a86503d159a347c94175bf007cf5777.png

f42da40d105a087b15fcb4ee08ab6292.png

cd8c2ea76a98fc7587c2831574c05686.png

4.2 创建Tomcat容器实例,部署项目

点击右上角的三角角标Edit Configuration

40e70ae38d6f04cd9a247b74ca48a974.png

点击左上角的”+“号,添加Tomcat Server ,Local

05e0a6baebba8b2f1beeb0f789afac2b.png

然后按下图配置

cbd253942e749f8b50ab5734e253ac5b.png

切换到Deployment,左下角添加Artifact...

8a7415bb6e4d80eb41a68d935b2de27f.png

至此项目的配置完成,启动Tomcat进行部署

5.整合中遇到的问题及解决办法

错误1 java.lang.IllegalStateException: Failed to load ApplicationContext

报这个异常java.lang.IllegalStateException: Failed to load ApplicationContext的时候,通常是因为applicationContent.xml里面的bean初始化失败的原因。

检查代码后发现是Mapper出现的错误导致,源码中已修正

进阶1 Controller直接输出,不经过User.jsp输出内容

1.修改Controller类,使用@ResponseBody注解

//直接在网页输出内容,适合写接口

@ResponseBody

@RequestMapping("/showUser")

public String toIndex(HttpServletRequest request, Model model) {

int userId = Integer.parseInt(request.getParameter("id"));

User user = this.userService.getUserByID(userId);

//绑定对象到User.jsp

model.addAttribute("user", user);

//return "User";

return "这里直接输出:"+user.getUserName().toString();

}

这时候发现中文出现了乱码的情况,应该是编码的问题,查阅资料后发现只需在spring-mvc.xml配置文件内添加如下内容:

text/html;charset=UTF-8

放在下面这段代码的前面即可

f18001437c923c8cd6d3e39f1dc0dc61.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值