天天看点

java 快速构建ssm项目_SSM快速搭建

基本环境搭建

1、 创建Maven工程

2、 导入项目相关依赖的jar包

spring

springmvc

mybatis

mysql

junit

spring-test

lombok

devtools

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

org.example

ssm-crud

1.0-SNAPSHOT

org.springframework

spring-webmvc

5.2.8.RELEASE

org.springframework

spring-aspects

5.2.8.RELEASE

org.springframework

spring-jdbc

5.2.8.RELEASE

org.springframework

spring-aop

5.2.8.RELEASE

org.springframework

spring-tx

5.2.8.RELEASE

com.fasterxml.jackson.core

jackson-databind

2.11.2

org.mybatis

mybatis

3.5.0

org.mybatis

mybatis-spring

2.0.5

mysql

mysql-connector-java

8.0.21

com.alibaba

druid

1.1.24

javax.servlet.jsp

javax.servlet.jsp-api

2.3.3

provided

jstl

jstl

1.2

javax.servlet

javax.servlet-api

4.0.1

provided

junit

junit

4.12

test

org.springframework

spring-test

5.2.8.RELEASE

test

org.mybatis.generator

mybatis-generator-core

1.4.0

com.github.pagehelper

pagehelper

5.1.10

com.github.jsqlparser

jsqlparser

3.1

org.projectlombok

lombok

1.18.12

provided

org.springframework.boot

spring-boot-devtools

1.5.6.RELEASE

true

3、 引用bootstrap前端框架

4、 编写ssm相关配置文件

web.xml

spring-mvc.xml

appicationContext.xml

spring-mybatis.xml

jdbc.properties

4.1、web.xml

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

xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"

version="4.0">

contextConfigLocation

classpath:applicationContext.xml

org.springframework.web.context.ContextLoaderListener

com.example.demo.Listener.MyContextListener

dispatcherServlet

org.springframework.web.servlet.DispatcherServlet

contextConfigLocation

classpath:spring-mvc.xml

1

dispatcherServlet

/

characterEncodingFilter

org.springframework.web.filter.CharacterEncodingFilter

encoding

UTF-8

forceRequestEncoding

true

forceResponseEncoding

true

characterEncodingFilter

/*

hiddenHttpMethodFilter

org.springframework.web.filter.HiddenHttpMethodFilter

hiddenHttpMethodFilter

/*

4.2、spring-mvc.xml

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

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

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

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

4.3、appicationContext.xml

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

xmlns:context="http://www.springframework.org/schema/context"

xmlns:aop="http://www.springframework.org/schema/aop"

xmlns:tx="http://www.springframework.org/schema/tx"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd

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

http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd

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

4.4、spring-mybatis.xml

/p>

"http://mybatis.org/dtd/mybatis-3-config.dtd">

4.5、jdbc.properties

jdbc.driver=com.mysql.cj.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC

jdbc.username=root

jdbc.password=12345678

4.6、log4j.properties

#############

# 输出到控制台

#############

# log4j.rootLogger日志输出类别和级别:只输出不低于该级别的日志信息DEBUG < INFO < WARN < ERROR < FATAL

# WARN:日志级别 CONSOLE:输出位置自己定义的一个名字 logfile:输出位置自己定义的一个名字

log4j.rootLogger=WARN,CONSOLE,logfile

# 配置CONSOLE输出到控制台

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender

# 配置CONSOLE设置为自定义布局模式

log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout

# 配置CONSOLE日志的输出格式 [frame] 2019-08-22 22:52:12,000 %r耗费毫秒数 %p日志的优先级 %t线程名 %C所属类名通常为全类名 %L代码中的行号 %x线程相关联的NDC %m日志 %n换行

log4j.appender.CONSOLE.layout.ConversionPattern=[frame] %d{yyyy-MM-dd HH:mm:ss,SSS} - %-4r %-5p [%t] %C:%L %x - %m%n

################

# 输出到日志文件中

################

# 配置logfile输出到文件中 文件大小到达指定尺寸的时候产生新的日志文件

log4j.appender.logfile=org.apache.log4j.RollingFileAppender

# 保存编码格式

log4j.appender.logfile.Encoding=UTF-8

# 输出文件位置此为项目根目录下的logs文件夹中

log4j.appender.logfile.File=logs/root.log

# 后缀可以是KB,MB,GB达到该大小后创建新的日志文件

log4j.appender.logfile.MaxFileSize=10MB

# 设置滚定文件的最大值3 指可以产生root.log.1、root.log.2、root.log.3和root.log四个日志文件

log4j.appender.logfile.MaxBackupIndex=3

# 配置logfile为自定义布局模式

log4j.appender.logfile.layout=org.apache.log4j.PatternLayout

log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %F %p %m%n

##########################

# 对不同的类输出不同的日志文件

##########################

# club.bagedate包下的日志单独输出

log4j.logger.club.bagedate=DEBUG,bagedate

# 设置为false该日志信息就不会加入到rootLogger中了

log4j.additivity.club.bagedate=false

# 下面就和上面配置一样了

log4j.appender.bagedate=org.apache.log4j.RollingFileAppender

log4j.appender.bagedate.Encoding=UTF-8

log4j.appender.bagedate.File=logs/bagedate.log

log4j.appender.bagedate.MaxFileSize=10MB

log4j.appender.bagedate.MaxBackupIndex=3

log4j.appender.bagedate.layout=org.apache.log4j.PatternLayout

log4j.appender.bagedate.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %F %p %m%n

5、工具类

5.1.1 Msg(封装返回信息的对象)

@Data

public class Msg {

//100代表成功,200代表失败

private int code;

private String message;

private Map data;

public Msg() {

data = new HashMap<>();

}

public static Msg success() {

Msg msg = new Msg();

msg.setCode(100);

msg.setMessage("处理成功!");

return msg;

}

public static Msg error() {

Msg msg = new Msg();

msg.setCode(200);

msg.setMessage("处理失败!");

return msg;

}

public Msg addData(String s, Object o) {

data.put(s, o);

return this;

}

}

6、mybatis generator(mybatis逆向工程)

6.1、配置文件

/p>

"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

connectionURL="jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC"

userId="root"

password="12345678">

6.2、生成文件的类

public class Generator {

@Test

public void generator() throws Exception {

List warnings = new ArrayList();

// 指定配置文件

File configFile = new File("F:/MyProjects/complete/ssm-crud/generatorConfig.xml");

ConfigurationParser cp = new ConfigurationParser(warnings);

Configuration config = cp.parseConfiguration(configFile);

DefaultShellCallback callback = new DefaultShellCallback(true);

MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);

myBatisGenerator.generate(null);

}

}

遇到的坑

坑一

c3p0-0.9.5.2 jar包缺少其它依赖

解决办法:添加mchange-commons-java-0.2.20 jar包(注意jar包版本)

com.mchange

mchange-commons-java

0.2.20

坑二

pagehelper-5.1.10 jar包缺少其它依赖

解决方法:添加jsqlparser-3.1 jar包(注意jar包版本)

com.github.jsqlparser

jsqlparser

3.1

坑三

关闭tomcat时报错

错误提示:Web应用程序[ROOT]似乎启动了一个名为[C3P0PooledConnectionPoolManager[identityToken->31usy7ac1ocyx2d1tj3xmv|630da823]-AdminTaskTimer]的线程,但未能停止它。这很可能会造成内存泄漏。

解决方法: 换数据源druid

com.alibaba

druid

1.1.24

坑四

关闭tomcat时报错

错误提示:为防止内存泄漏,JDBC驱动程序已被强制取消注册。

解决方法:配置监听器jie

com.example.demo.config.listener.MyContextListener

public class MyContextListener implements ServletContextListener {

@Override

public void contextInitialized(ServletContextEvent arg0) {

System.out.println("webService start");

}

@Override

public void contextDestroyed(ServletContextEvent arg0) {

System.out.println("webService stop");

try {

while (DriverManager.getDrivers().hasMoreElements()) {

DriverManager.deregisterDriver(DriverManager.getDrivers().nextElement());

}

System.out.println("jdbc Driver close");

AbandonedConnectionCleanupThread.checkedShutdown();

System.out.println("clean thread success");

} catch (SQLException e) {

e.printStackTrace();

}

}

}

坑五

使用lombok插件,编写实体类时,某成员变量的第二个字母为大写,导致springmvc无法接收前台传来的参数

解决方法:自己编写setter/getter

private Integer dId;

//解决dId无法接收参数的问题,下面的命名方式是JavaBean规范命名

public Integer getdId() {

return dId;

}

public void setdId(Integer dId) {

this.dId = dId;

}