根据 孙宇 的 视频讲解,跟着做了一个Demo
三大框架的整合难点主要是关于配置文件和jar包的问题
该视频采用了Maven 进行导入jar包,eclipse maven 插件会出现许多的问题,需要一一改正
1.新建Maven 工程
2.改正Maven中的错误(加上该加的lib,版本调对,maven那个先不用管,以后修改pom的时候会自动出现)
3.继续修改错误,切换到navigator视图(把这些文件都打开看看,出现 1.5 的 都改成 1.8,出现 1.5.0 的改成 1.8.0,出现2.3 的改成 3.0)
4.继续修改错误。打开web.xml修改成如下
springMVC
SSMSemo_SY
org.apache.maven.plugins
maven-compiler-plugin
2.1
1.8
6.至此,所有错误都已经修改完成了。先maven update 一波
7.maven update 完成之后,项目结构如图所示
8.可以开始在 pom文件里面配置 jar包了
4.0.0
ssm
SSMSemo_SY
war
0.0.1-SNAPSHOT
SSMSemo_SYMavenWebapp
http://maven.apache.org
org.springframework
spring-core
4.3.2.RELEASE
org.springframework
spring-webmvc
4.3.2.RELEASE
org.springframework
spring-context
4.3.2.RELEASE
org.springframework
spring-tx
4.3.2.RELEASE
org.springframework
spring-jdbc
4.3.2.RELEASE
org.springframework
spring-beans
4.3.2.RELEASE
org.springframework
spring-aop
4.3.2.RELEASE
org.springframework
spring-expression
4.3.2.RELEASE
org.springframework
spring-test
4.3.2.RELEASE
org.springframework
spring-webmvc
4.3.2.RELEASE
org.springframework
spring-context-support
4.3.2.RELEASE
javax.servlet
javax.servlet-api
3.1.0
org.mybatis
mybatis
3.2.8
org.mybatis
mybatis-spring
1.3.0
mysql
mysql-connector-java
5.1.30
com.alibaba
druid
1.0.15
aopalliance
aopalliance
1.0
org.aspectj
aspectjweaver
1.8.6
log4j
log4j
1.2.17
com.alibaba
fastjson
1.2.7
junit
junit
4.10
test
SSMSemo_SY
org.apache.maven.plugins
maven-compiler-plugin
2.1
1.8
maven 就这尿性。。。
10.等待maven导入相关jar包后,开始写配置文件,三大框架的整合就是配置文件的问题。这里用两个配置文件配置。
一个是spring-mybatis.xml用来配置整合spring和mybatis 的,另一个是 spring-mvc.xml 用来配置三个框架的。
config.properties
driverClassName=com.mysql.jdbc.Driver
validationQuery=SELECT 1
#这里我使用的自己的数据库
jdbc_url=jdbc:mysql://localhost:3306/ssm_sy?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
jdbc_username=root
jdbc_password=root
log4j.rootLogger=DEBUG,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=SSMDemo.log
log4j.appender.File.MaxFileSize=10MB
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,SSS}][%c]%m%n
spring-mybatis.xml
sql(好多张表没用,主要的3张表 tuser trole tuser_trole)就行,项目中只使用了这3张表
/*
Navicat MySQL Data Transfer
Source Server : localhost
Source Server Version : 50529
Source Host : localhost:3306
Source Database : ssm_sy
Target Server Type : MYSQL
Target Server Version : 50529
File Encoding : 65001
Date: 2016-08-18 15:17:39
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for tbug
-- ----------------------------
DROP TABLE IF EXISTS `tbug`;
CREATE TABLE `tbug` (
`id` varchar(36) NOT NULL,
`createdatetime` datetime DEFAULT NULL,
`name` varchar(100) DEFAULT NULL,
`note` longtext,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of tbug
-- ----------------------------
-- ----------------------------
-- Table structure for tmenu
-- ----------------------------
DROP TABLE IF EXISTS `tmenu`;
CREATE TABLE `tmenu` (
`id` varchar(36) NOT NULL,
`iconcls` varchar(100) DEFAULT NULL,
`seq` decimal(22,0) DEFAULT NULL,
`text` varchar(100) DEFAULT NULL,
`url` varchar(200) DEFAULT NULL,
`pid` varchar(36) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of tmenu
-- ----------------------------
-- ----------------------------
-- Table structure for tonline
-- ----------------------------
DROP TABLE IF EXISTS `tonline`;
CREATE TABLE `tonline` (
`id` varchar(36) NOT NULL,
`ip` varchar(50) DEFAULT NULL,
`logindatetime` datetime DEFAULT NULL,
`loginname` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of tonline
-- ----------------------------
-- ----------------------------
-- Table structure for tresource
-- ----------------------------
DROP TABLE IF EXISTS `tresource`;
CREATE TABLE `tresource` (
`id` varchar(36) NOT NULL,
`seq` decimal(22,0) DEFAULT NULL,
`text` varchar(100) DEFAULT NULL,
`url` varchar(200) DEFAULT NULL,
`pid` varchar(36) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of tresource
-- ----------------------------
-- ----------------------------
-- Table structure for trole
-- ----------------------------
DROP TABLE IF EXISTS `trole`;
CREATE TABLE `trole` (
`id` varchar(36) NOT NULL,
`text` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of trole
-- ----------------------------
-- ----------------------------
-- Table structure for trole_tresource
-- ----------------------------
DROP TABLE IF EXISTS `trole_tresource`;
CREATE TABLE `trole_tresource` (
`id` varchar(36) NOT NULL,
`resource_id` varchar(36) DEFAULT NULL,
`role_id` varchar(36) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of trole_tresource
-- ----------------------------
-- ----------------------------
-- Table structure for tuser
-- ----------------------------
DROP TABLE IF EXISTS `tuser`;
CREATE TABLE `tuser` (
`id` varchar(36) NOT NULL,
`createdatetime` datetime DEFAULT NULL,
`modifydatetime` datetime DEFAULT NULL,
`name` varchar(100) DEFAULT NULL,
`pwd` varchar(50) DEFAULT NULL,
`create_time` date DEFAULT NULL,
`update_time` date DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of tuser
-- ----------------------------
INSERT INTO `tuser` VALUES ('1', null, null, 'HR', '11', null, null);
-- ----------------------------
-- Table structure for tuser_trole
-- ----------------------------
DROP TABLE IF EXISTS `tuser_trole`;
CREATE TABLE `tuser_trole` (
`id` varchar(36) NOT NULL,
`role_id` varchar(36) DEFAULT NULL,
`user_id` varchar(36) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of tuser_trole
-- ----------------------------
以上的静态文件都放在目录下(至此,三大框架终于整合完了,如果没有报错,简直接下来没啥困难了)
11.可以开始写代码了,使用逆天工具自动生成 实体类、Mybatis映射文件mapper.xml 以及 dao层的接口。使用方法见下面的链接
12.生成完了之后,直接复制到一下图片位置,并添加其它两个包controller 和 service
13.先创建UserController.java类(一个springMVC很简单的应用)
package ssm.controller;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import ssm.model.User;
import ssm.service.UserService;
/**
* SSM(Spring+SpringMVC+MyBatis 三大框架整合)
*
*/
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
/**
* http://localhost:8080/SSMSemo_SY/user/showUser/1
* @return
*/
@RequestMapping("/showUser/{id}")
public String showUser(@PathVariable("id") String id,HttpServletRequest request) {
User u = userService.getUserById(id);
request.setAttribute("user", u);
return "showUser";
}
}
package ssm.service;
import java.util.List;
import ssm.model.User;
public interface UserService {
public User getUserById(String id);
}
package ssm.service;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import ssm.dao.UserMapper;
import ssm.model.User;
@Service("userService")
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public User getUserById(String id) {
return userMapper.selectByPrimaryKey(id);
}
}
Mybatis 自动生成dao 文件的4 个要求
1. 返回类型相同
2. 传入参数相同
3. sql 的 id 和 方法名 相同
4. namespace 要和 Mapper 接口的名(完整名,带包名) 相同
例如:
ssm.dao.UserMapper:
User selectByPrimaryKey(String id);
showUser.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
Insert title here
${user.name}
17.打开浏览器:输入
http://localhost:8080/SSMSemo_SY/user/showUser/1
如果出现
大功告成,HR 是 数据库存的名字
如果没有成功,一定是maven 的问题,没错,这东西毛病太多了。但是没办法,总要学,总要改,总要找bug,加油!