博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Maven+SSM框架(Spring+SpringMVC+MyBatis)(二)
阅读量:6708 次
发布时间:2019-06-25

本文共 18428 字,大约阅读时间需要 61 分钟。

1.基本概念

 

2.开发环境搭建

 

3.Maven Web项目创建

 

4.SSM整合

此次整合我分两个配置文件:

  1)分别是spring-mybatis.xml,包含spring和mybatis的配置文件,

  2)还有个是spring-mvc的配置文件,

  3)此外有2个资源文件:jdbc.propertis和log4j.properties

以下是框架版本及来源

  Spring 4.0.2 RELEASE(PS:无需手动下载,Maven会自动下)

  Spring MVC 4.0.2 RELEASE(PS:无需手动下载,Maven会自动下)

  MyBatis 3.2.6

 

*打开 xml 文件的代码提示功能 

打 开 Eclipse 依次选择 Window > Preferences > Xml > Xml Files > Editor > Content Assist > Auto activation > Prompt when these characters are inserted,设置框中默认是 <=: ,改成<=:qwertyuioplkjhgfdsazxcvbnm就ok了。

 

下面是项目完整结构,先有个印象

4.1 Maven引入需要的jar包

为了方便后面说的时候不需要引入JAR包,我这里直接给出所有需要的JAR包,这都是基本的JAR包,每个包的是干什么的都有注释,就不再多说了

pom.xml

 

4.0.2.RELEASE
3.2.6
1.7.7
1.2.17
junit
junit
3.8.1
test
javax
javaee-api
7.0
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
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
hongceshi
org.apache.maven.plugins
maven-compiler-plugin
3.5.1
1.8
1.8
UTF-8

4.2 Spring与MyBatis的整合

4.1的jar包引入之后,首先进行Spring和MyBatis整合,然后再进行JUnit测试,先看一个项目结构图:

4.2.1 建立JDBC属性文件(有背景颜色部分需根据自己信息修改)

jdbc.properties

driver=com.mysql.jdbc.Driver url=jdbc:mysql://127.0.0.1:3306/ceshi?useUnicode=true&characterEncoding=UTF-8 username=root password=root #定义初始连接数 initialSize=0 #定义最大连接数 maxActive=20 #定义最大空闲 maxIdle=20 #定义最小空闲 minIdle=1 #定义最长等待时间 maxWait=60000

4.2.2 Log4j的配置(跳过此步也没影响)

为了方便调试,一般都会使用日志来输出信息,Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。

Log4j的配置很简单,而且也是通用的,下面给出一个基本的配置,换到其他项目中也无需做多大的调整,如果想做调整或者想了解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

4.2.3、建立spring-mybatis.xml配置文件

这个文件就是用来完成spring和mybatis的整合的。这里面也没多少行配置,主要的就是自动扫描所有package,自动注入,配置数据库

spring-mybatis.xml

4.2.4、JUnit测试

经过以上步骤(log4j不配也没影响),我们已经完成了Spring和mybatis的整合,这样我们就可以编写一段测试代码来试试是否成功了。

4.2.4.1 创建测试用表

既然我们需要测试,那么我们就需要建立在数据库中建立一个测试表,这个表建的很简单,SQL语句为:

Mysql新建数据库,执行下面语句

# # Structure for table "user_t" #  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 table "user_t" #  INSERT INTO `user_t` VALUES (1,'测试','123456',24);

4.2.4.2、利用MyBatis Generator自动创建代码

随便找个位置建文件夹(路径最好都是英文),然后在里面建个src文件夹(配置到generatorConfig.xml里面,存放生成文件),下载下面那两个jar包,并手动将generatorConfig.xml拷进去,最后在该文件夹下,执行下面的命令java -jar mybatis-generator-core-1.3.2.jar -configfile generatorConfig.xml -overwrite

,代码就会生成到src文件夹里(dao/vo/impl):

以下是该文件下所需文的截图:

可到到此博客的文件下载:(和Hibernate逆向生成一样,这里也需要一个配置文件:)

generatorConfig.xml

需要修改文件配置的地方我都已经把注释标注出来了,这里的相关路径(如数据库驱动包,生成对应的相关文件位置可以自定义)不能带有中文

上面配置文件中的:

tableName和domainObjectName为必选项,分别代表数据库表名和生成的实体vo类名,其余的可以自定义去选择(一般情况下均为false)

使用方法介绍:

在该目录按住Shift键,右键鼠标选择"在此处打开命令窗口",复制粘贴生成语句的文件代码即可。

执行后,src就生成了下面3个文件,复制到项目对应目录下

vo:user.java

package hzm.ssm.vo;  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;    }}

dao:UserMapper

package hzm.ssm.dao;  import hzm.ssm.vo.User;  public interface UserMapper {     int deleteByPrimaryKey(Integer id);      int insert(User record);      int insertSelective(User record);      User selectByPrimaryKey(Integer id);      int updateByPrimaryKeySelective(User record);      int updateByPrimaryKey(User record); }

mapping:UserMapper.xml

1 
2 3
4
5
6
7
8
9
10
11 id, user_name, password, age12
13
19
20 delete from user_t21 where id = #{id,jdbcType=INTEGER}22
23
24 insert into user_t (id, user_name, password, 25 age)26 values (#{id,jdbcType=INTEGER}, #{userName,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}, 27 #{age,jdbcType=INTEGER})28
29
30 insert into user_t31
32
33 id,34
35
36 user_name,37
38
39 password,40
41
42 age,43
44
45
46
47 #{id,jdbcType=INTEGER},48
49
50 #{userName,jdbcType=VARCHAR},51
52
53 #{password,jdbcType=VARCHAR},54
55
56 #{age,jdbcType=INTEGER},57
58
59
60
61 update user_t62
63
64 user_name = #{userName,jdbcType=VARCHAR},65
66
67 password = #{password,jdbcType=VARCHAR},68
69
70 age = #{age,jdbcType=INTEGER},71
72
73 where id = #{id,jdbcType=INTEGER}74
75
76 update user_t77 set user_name = #{userName,jdbcType=VARCHAR},78 password = #{password,jdbcType=VARCHAR},79 age = #{age,jdbcType=INTEGER}80 where id = #{id,jdbcType=INTEGER}81
82

以下手动创建:

IUserService.java

1 package hzm.ssm.service;2 3 import hzm.ssm.vo.User;4 5 public interface IUserService {6     public User getUserById(int userId);7 }

UserService.java

1 package hzm.ssm.service.impl; 2  3 import javax.annotation.Resource; 4  5 import org.springframework.stereotype.Service; 6  7 import hzm.ssm.dao.UserMapper; 8 import hzm.ssm.service.IUserService; 9 import hzm.ssm.vo.User;10 11 @Service("userService")12 public class UserService implements IUserService {13     @Resource14     private UserMapper userDao;15 16     public User getUserById(int userId) {17         return this.userDao.selectByPrimaryKey(userId);18     }19 }

4.2.4.4、建立测试类

测试类在src/test/java中建立,下面测试类中注释掉的部分是不使用Spring时,一般情况下的一种测试方法;如果使用了Spring那么就可以使用注解的方式来引入配置文件和类,然后再将service接口对象注入,就可以进行测试了。如果测试成功,表示Spring和Mybatis已经整合成功了。输出信息使用的是Log4j打印到控制台

TestMyBatis.java

1 package hzm.ssm.testmybatis; 2  3 import javax.annotation.Resource; 4  5 import org.apache.log4j.Logger; 6 import org.junit.Test; 7 import org.junit.runner.RunWith; 8 import org.springframework.test.context.ContextConfiguration; 9 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;10 11 import com.alibaba.fastjson.JSON;12 13 import hzm.ssm.service.IUserService;14 import hzm.ssm.vo.User;15 16 @RunWith(SpringJUnit4ClassRunner.class) // 表示继承了这个类17 @ContextConfiguration(locations = { "classpath:spring-mybatis.xml" })18 public class TestMyBatis {19     private static Logger logger = Logger.getLogger(TestMyBatis.class);20     @Resource21     private IUserService userService = null;22 23     @Test24     public void test() {25         User user = userService.getUserById(1);26         logger.info(user);27         logger.info("user转为json");28         logger.info(JSON.toJSONString(user));29     }30 }

开始测试:

项目右键Maven->Update Project...(重点),等更新完,右击项目->Run As->JUnit Test

4.3、整合SpringMVC

上面已经完成了2大框架的整合,SpringMVC的配置文件单独放,然后在web.xml中配置整合

4.3.1、配置spring-mvc.xml

主要是自动扫描控制器,视图模式,注解的启动这三个

spring-mvc.xml

text/html;charset=UTF-8

4.3.2、配置web.xml文件

这里面对spring-mybatis.xml的引入以及配置的spring-mvc的Servlet就是为了完成SSM整合,之前2框架整合不需要在此处进行任何配置。配置一样有详细注释,不多解释了。

web.xml

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

4.3.3、测试

至此已经完成了SSM三大框架的整合了,接下来测试一下,如果成功了,那么恭喜你,如果失败了,继续调试吧,作为程序员就是不停的与BUG做斗争!

4.3.3.1、新建jsp页面

User.jsp   此页面仅输出一下用户名,完成一个完整的简单流程

User.jsp

1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2     pageEncoding="UTF-8"%> 3  4  5  6 
7 测试 8 9 ${user.userName}10 11

4.3.3.2、建立UserController类

UserController.java

1 package hzm.ssm.controller; 2  3 import javax.annotation.Resource; 4 import javax.servlet.http.HttpServletRequest; 5  6 import org.springframework.stereotype.Controller; 7 import org.springframework.ui.Model; 8 import org.springframework.web.bind.annotation.RequestMapping; 9 10 import hzm.ssm.service.IUserService;11 import hzm.ssm.vo.User;12 13 @Controller14 @RequestMapping("/user")15 public class UserController {16 17     @Resource18     private IUserService userService;19 20     @RequestMapping("/showUser")21     public String toIndex(HttpServletRequest request, Model model) {22         int userId = Integer.parseInt(request.getParameter("id"));23         User user = this.userService.getUserById(userId);24         model.addAttribute("user", user);25         return "User";26     }27 }

4.3.3.3、部署项目

点击Finish,启动项目,浏览器输入http://localhost:8080/hongceshi/user/showUser?id=1

至此SSM框架整合成功。

 

但是,有一个问题:

原因就是编译时没有复制依赖包到WEB-INF/lib里,编译时也没有生成lib文件夹

完美解决办法:

在该目录下执行:

cmd命令(根据Java Build Path的列表得知,只要不改动包,就不需要再次运行此命令) 1 mvn eclipse:eclipse -Dwtpversion=2.0 

至此clean都可以运行。

#定义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

转载于:https://www.cnblogs.com/hongzm/p/8074474.html

你可能感兴趣的文章
python_时间日期
查看>>
MVC架构介绍-序列化属性
查看>>
问题2017S02
查看>>
用合适的索引避免不必要的全表扫描
查看>>
Ajax上传文件
查看>>
445. Add Two Numbers II - Medium
查看>>
吴恩达课后作业学习2-week1-1 初始化
查看>>
css3系列之animation
查看>>
iOS边练边学--级联菜单的两种实现方法
查看>>
使用SimpleXML 解析xml
查看>>
第三周作业
查看>>
第四章6
查看>>
2018/12/01 一个64位操作系统的实现 第四章 导入kernel.bin(3)
查看>>
抽象工厂模式和autofac的使用总结
查看>>
ManyToMany参数(through,db_constraint)
查看>>
Struts工作原理、流程
查看>>
(转)Entity Framework在三层架构中的使用--MVC三层架构启示
查看>>
【原】记2015招商银行信用卡中心在线笔试------4.2
查看>>
Node Graph ......
查看>>
开放平台-web实现人人网第三方登录
查看>>