ssm框架是由 mybatis+spring+spring mvc组成
依赖
<spring.version>5.1.8.RELEASE</spring.version>
|

<spring.version>5.1.8.RELEASE</spring.version>
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency>
<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency>
<dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.4</version> </dependency>
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency>
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.8</version> </dependency>
<dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.0</version> <scope>provided</scope> </dependency>
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency>
<dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency>
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.11</version> </dependency>
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.16</version> </dependency>
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.1.8</version> </dependency>
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency>
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.0</version> </dependency>
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.7.25</version> </dependency>
<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.3</version> </dependency>
|
jdbc8.properties
jdbc.driv=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/cctv?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false jdbc.usname=root jdbc.password=root
|
log4j.properties
log4j.rootLogger=debug, stdout, R log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n log4j.appender.R=org.apache.log4j.RollingFileAppender log4j.appender.R.File=example.log log4j.appender.R.MaxFileSize=100KB
log4j.appender.R.MaxBackupIndex=5 log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
|
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" 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"> <servlet> <servlet-name>mvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-*.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
<servlet-mapping> <servlet-name>mvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
|
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration>
<settings> <setting name="mapUnderscoreToCamelCase" value="true"/> <setting name="useColumnLabel" value="true"/> <setting name="useGeneratedKeys" value="true"/> </settings> <plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin> </plugins> </configuration>
|
spring-web.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" 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/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd"> <context:component-scan base-package="ssm1"></context:component-scan>
<mvc:annotation-driven></mvc:annotation-driven> <mvc:default-servlet-handler></mvc:default-servlet-handler>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/pages/"></property> <property name="suffix" value=".jsp"></property> </bean>
</beans>
|

spring-dao.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" 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/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd"> <context:property-placeholder location="classpath:jdbc8.properties"></context:property-placeholder> <bean id="datdasource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="${jdbc.driv}"></property> <property name="url" value="${jdbc.url}"></property> <property name="username" value="${jdbc.usname}"></property> <property name="password" value="${jdbc.password}"></property> </bean>
<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="datdasource"></property> <property name="configLocation" value="classpath:mybatis-config.xml"></property> <property name="typeAliasesPackage" value="ssm1.entity"/> <property name="mapperLocations" value="classpath:mapper/*.xml"/> </bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="sqlSessionFactoryBeanName" value="sessionFactory"></property> <property name="basePackage" value="ssm1.dao"></property> </bean> </beans>
|




resources下面创建Mapper
xxx.Mapper

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="ssm1.dao.DepositDao"> <select id="getDeList" resultType="Deposit"> select * from deposit; </select> </mapper>
|
dao层
package ssm1.dao;
import java.util.List;
public interface DepositDao {
public List getDeList(); }
|
实体
package ssm1.entity;
public class Deposit { public int id; public String name; public String iphone; public int fund;
public int getId() { return id; }
public void setId(int id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getIphone() { return iphone; }
public void setIphone(String iphone) { this.iphone = iphone; }
public int getFund() { return fund; }
public void setFund(int fund) { this.fund = fund; }
public Deposit() { }
public Deposit(String name, String iphone, int fund) { this.name = name; this.iphone = iphone; this.fund = fund; }
public Deposit(int id, String name, String iphone, int fund) { this.id = id; this.name = name; this.iphone = iphone; this.fund = fund; }
@Override public String toString() { return "\nDeposit{" + "id=" + id + ", name='" + name + '\'' + ", iphone='" + iphone + '\'' + ", fund=" + fund + '}'; } }
|

测试
import cn.hutool.core.date.BetweenFormatter; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.junit4.SpringRunner; import ssm1.dao.DepositDao;
import java.util.Date; import java.util.List;
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration({"classpath:spring-dao.xml"}) public class TestDao {
@Autowired DepositDao dao;
@Test public void test1(){ List lis=dao.getDeList(); System.out.println(lis); } }
|

服务层
package ssm1.service;
import java.util.List;
public interface DepositService { public List getDeList(); }
|
服务实现层
package ssm1.service.impl;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import ssm1.dao.DepositDao; import ssm1.service.DepositService;
import java.util.List;
@Service public class DepositServiceimpl implements DepositService {
@Autowired DepositDao depao;
@Override public List getDeList() { List lis=depao.getDeList(); System.out.println("正在处理业务!"); return lis; } }
|
JSON类
package ssm1.config;
public class JsonResultSet { int code; String msg; Object data;
public int getCode() { return code; }
public void setCode(int code) { this.code = code; }
public String getMsg() { return msg; }
public void setMsg(String msg) { this.msg = msg; }
public Object getData() { return data; }
public void setData(Object data) { this.data = data; }
public JsonResultSet() { }
public JsonResultSet(int code, String msg) { this.code = code; this.msg = msg; }
public JsonResultSet(int code, String msg, Object data) { this.code = code; this.msg = msg; this.data = data; }
@Override public String toString() { return "JsonResultSet{" + "code=" + code + ", msg='" + msg + '\'' + ", data=" + data + '}'; } }
|
全局异常
ajax异常类
package ssm1.config;
public class AjaxException extends Exception { public AjaxException(String message) { super(message); } }
|
普通异常类
package ssm1.config;
public class NormalException extends Exception{
public NormalException(String message) { super(message); } }
|
全局异常类
package ssm1.config;
import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.ModelAndView;
@ControllerAdvice public class GlobalControllerAdvice {
@ExceptionHandler(NormalException.class) public ModelAndView handleNormal(NormalException ex){ ModelAndView mv=new ModelAndView(); mv.addObject("errmsg","自定义错误"+ex.getMessage()); mv.setViewName("Erroe"); return mv; }
@ExceptionHandler(AjaxException.class) @ResponseBody public JsonResultSet handleAjax(AjaxException ex){ System.out.println("异常"); JsonResultSet ok=new JsonResultSet(500,ex.getMessage()); return ok; } }
|
异常使用
ajax异常使用
@RequestMapping("/json") @ResponseBody public JsonResultSet de(int n) throws AjaxException { Deposit de=new Deposit(1005,"化解","121213113",800); JsonResultSet js; try { js=new JsonResultSet(200,"成功",de); int h=9/n; }catch (Exception e){ throw new AjaxException(e.getMessage()); } return js; }
|
普通异常使用
@RequestMapping("/hello") public String seall(ModelMap map,int n) throws NormalException { List lsi=deser.getDeList(); try { int h=9/n; }catch(Exception e){ throw new NormalException(e.getMessage()); } map.put("info",lsi); return "Hello"; }
|
控制层
package ssm1.controller;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import ssm1.config.AjaxException; import ssm1.config.JsonResultSet; import ssm1.config.NormalException; import ssm1.entity.Deposit; import ssm1.service.DepositService;
import java.util.List;
@Controller public class DepositController {
@Autowired DepositService deser;
@RequestMapping("/hello") public String seall(ModelMap map,int n) throws NormalException { List lsi=deser.getDeList(); try { int h=9/n; }catch(Exception e){ throw new NormalException(e.getMessage()); } map.put("info",lsi); return "Hello"; }
@RequestMapping("/json") @ResponseBody public JsonResultSet de(int n) throws AjaxException { Deposit de=new Deposit(1005,"化解","121213113",800); JsonResultSet js; try { js=new JsonResultSet(200,"成功",de); int h=9/n; }catch (Exception e){ throw new AjaxException(e.getMessage()); } return js; } }
|
事务
spring-dao.xml 配置事务
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="datdasource"></property> </bean>
<tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>
|
serviceimpl使用事务
@Transactional(propagation = Propagation.REQUIRED,readOnly = false)
@Override @Transactional(propagation = Propagation.REQUIRED,readOnly = false) public List getDeList() { List lis=depao.getDeList(); System.out.println("正在处理业务!"); return lis; }
|
项目结构
