• SSM 框架整合


    原始整合方式

    • 数据表

      1. create database ssm character set utf8;
      2. use ssm;
      3. create table account(
      4. id int primary key auto_increment,
      5. name varchar(100),
      6. money double(7,2)
      7. );
    • 创建 Maven 工程

    • 导入 Maven 坐标

      1. <project xmlns="http://maven.apache.org/POM/4.0.0"
      2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      4. <modelVersion>4.0.0modelVersion>
      5. <groupId>com.ruochengroupId>
      6. <artifactId>ssmartifactId>
      7. <version>1.0-SNAPSHOTversion>
      8. <packaging>warpackaging>
      9. <properties>
      10. <maven.compiler.source>8maven.compiler.source>
      11. <maven.compiler.target>8maven.compiler.target>
      12. properties>
      13. <dependencies>
      14. <dependency>
      15. <groupId>org.springframeworkgroupId>
      16. <artifactId>spring-contextartifactId>
      17. <version>5.0.5.RELEASEversion>
      18. dependency>
      19. <dependency>
      20. <groupId>org.aspectjgroupId>
      21. <artifactId>aspectjweaverartifactId>
      22. <version>1.8.8version>
      23. dependency>
      24. <dependency>
      25. <groupId>org.springframeworkgroupId>
      26. <artifactId>spring-jdbcartifactId>
      27. <version>5.0.5.RELEASEversion>
      28. dependency>
      29. <dependency>
      30. <groupId>org.springframeworkgroupId>
      31. <artifactId>spring-txartifactId>
      32. <version>5.0.5.RELEASEversion>
      33. dependency>
      34. <dependency>
      35. <groupId>org.springframeworkgroupId>
      36. <artifactId>spring-testartifactId>
      37. <version>5.0.5.RELEASEversion>
      38. dependency>
      39. <dependency>
      40. <groupId>org.springframeworkgroupId>
      41. <artifactId>spring-webmvcartifactId>
      42. <version>5.0.5.RELEASEversion>
      43. dependency>
      44. <dependency>
      45. <groupId>javax.servletgroupId>
      46. <artifactId>servlet-apiartifactId>
      47. <version>2.5version>
      48. dependency>
      49. <dependency>
      50. <groupId>javax.servlet.jspgroupId>
      51. <artifactId>jsp-apiartifactId>
      52. <version>2.0version>
      53. dependency>
      54. <dependency>
      55. <groupId>org.mybatisgroupId>
      56. <artifactId>mybatisartifactId>
      57. <version>3.5.5version>
      58. dependency>
      59. <dependency>
      60. <groupId>org.mybatisgroupId>
      61. <artifactId>mybatis-springartifactId>
      62. <version>1.3.1version>
      63. dependency>
      64. <dependency>
      65. <groupId>mysqlgroupId>
      66. <artifactId>mysql-connector-javaartifactId>
      67. <version>5.1.46version>
      68. dependency>
      69. <dependency>
      70. <groupId>c3p0groupId>
      71. <artifactId>c3p0artifactId>
      72. <version>0.9.1.2version>
      73. dependency>
      74. <dependency>
      75. <groupId>junitgroupId>
      76. <artifactId>junitartifactId>
      77. <version>4.13version>
      78. <scope>testscope>
      79. dependency>
      80. <dependency>
      81. <groupId>jstlgroupId>
      82. <artifactId>jstlartifactId>
      83. <version>1.2version>
      84. dependency>
      85. dependencies>
      86. project>
    • 编写实体类 Account.java

      1. package com.ruochen.domain;
      2. public class Account {
      3. private Integer id;
      4. private String name;
      5. private Double money;
      6. public Integer getId() {
      7. return id;
      8. }
      9. public void setId(Integer id) {
      10. this.id = id;
      11. }
      12. public String getName() {
      13. return name;
      14. }
      15. public void setName(String name) {
      16. this.name = name;
      17. }
      18. public Double getMoney() {
      19. return money;
      20. }
      21. public void setMoney(Double money) {
      22. this.money = money;
      23. }
      24. @Override
      25. public String toString() {
      26. return "Account{" +
      27. "id=" + id +
      28. ", name='" + name + '\'' +
      29. ", money=" + money +
      30. '}';
      31. }
      32. }
    • 编写 Mapper 接口

      1. package com.ruochen.mapper;
      2. import com.ruochen.domain.Account;
      3. import java.util.List;
      4. public interface AccountMapper {
      5. void save(Account account);
      6. List findAll();
      7. }
    • 编写 Service 接口

      1. package com.ruochen.service;
      2. import com.ruochen.domain.Account;
      3. import java.util.List;
      4. public interface AccountService {
      5. void save(Account account);
      6. List findAll();
      7. }
    • 编写 Service 接口实现

      1. package com.ruochen.service.impl;
      2. import com.ruochen.domain.Account;
      3. import com.ruochen.mapper.AccountMapper;
      4. import com.ruochen.service.AccountService;
      5. import org.apache.ibatis.io.Resources;
      6. import org.apache.ibatis.session.SqlSession;
      7. import org.apache.ibatis.session.SqlSessionFactory;
      8. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
      9. import org.springframework.stereotype.Service;
      10. import java.io.IOException;
      11. import java.io.InputStream;
      12. import java.util.List;
      13. @Service("accountService")
      14. public class AccountServiceImpl implements AccountService {
      15. @Override
      16. public void save(Account account) {
      17. try {
      18. InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
      19. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
      20. SqlSession sqlSession = sqlSessionFactory.openSession();
      21. AccountMapper mapper = sqlSession.getMapper(AccountMapper.class);
      22. mapper.save(account);
      23. sqlSession.commit();
      24. sqlSession.close();
      25. } catch (IOException e) {
      26. e.printStackTrace();
      27. }
      28. }
      29. @Override
      30. public List findAll() {
      31. try {
      32. InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
      33. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
      34. SqlSession sqlSession = sqlSessionFactory.openSession();
      35. AccountMapper mapper = sqlSession.getMapper(AccountMapper.class);
      36. List accountList = mapper.findAll();
      37. sqlSession.close();
      38. return accountList;
      39. } catch (IOException e) {
      40. e.printStackTrace();
      41. }
      42. return null;
      43. }
      44. }
    • 编写 Controller

      1. package com.ruochen.controller;
      2. import com.ruochen.domain.Account;
      3. import com.ruochen.service.AccountService;
      4. import org.springframework.beans.factory.annotation.Autowired;
      5. import org.springframework.stereotype.Controller;
      6. import org.springframework.web.bind.annotation.RequestMapping;
      7. import org.springframework.web.bind.annotation.ResponseBody;
      8. import org.springframework.web.servlet.ModelAndView;
      9. import java.util.List;
      10. @Controller
      11. @RequestMapping("/account")
      12. public class AccountController {
      13. @Autowired
      14. private AccountService accountService;
      15. // 保存
      16. @RequestMapping(value = "/save", produces = "text/html;charset=UTF-8")
      17. @ResponseBody
      18. public String save(Account account) {
      19. accountService.save(account);
      20. return "保存成功";
      21. }
      22. // 查询
      23. @RequestMapping("/findAll")
      24. public ModelAndView findAll() {
      25. List accountList = accountService.findAll();
      26. ModelAndView modelAndView = new ModelAndView();
      27. modelAndView.addObject("accountList", accountList);
      28. modelAndView.setViewName("accountList");
      29. return modelAndView;
      30. }
      31. }
    • 编写添加页面

      1. <%--
      2. Created by IntelliJ IDEA.
      3. User: ruochen
      4. Date: 2022/3/12
      5. Time: 21:31
      6. To change this template use File | Settings | File Templates.
      7. --%>
      8. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      9. <html>
      10. <head>
      11. <title>Titletitle>
      12. head>
      13. <body>
      14. <h1>添加账户信息表单h1>
      15. <form name="accountForm" action="${pageContext.request.contextPath}/account/save" method="post">
      16. 账户名称:<input type="text" name="name"><br/>
      17. 账户金额:<input type="text" name="money"><br/>
      18. <input type="submit" value="保存"><br/>
      19. form>
      20. body>
      21. html>
    • 编写列表页面

      1. <%--
      2. Created by IntelliJ IDEA.
      3. User: ruochen
      4. Date: 2022/3/12
      5. Time: 21:34
      6. To change this template use File | Settings | File Templates.
      7. --%>
      8. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      9. <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
      10. <html>
      11. <head>
      12. <title>Titletitle>
      13. head>
      14. <body>
      15. <h1>展示账户数据列表h1>
      16. <table border="1">
      17. <tr>
      18. <th>账户IDth>
      19. <th>账户名称th>
      20. <th>账户金额th>
      21. tr>
      22. <c:forEach items="${accountList}" var="account">
      23. <tr>
      24. <td>${account.id}td>
      25. <td>${account.name}td>
      26. <td>${account.money}td>
      27. tr>
      28. c:forEach>
      29. table>
      30. body>
      31. html>
    • 编写相应配置文件

      • Spring 配置文件:applicationContext.xml
      1. <beans xmlns="http://www.springframework.org/schema/beans"
      2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      3. xmlns:context="http://www.springframework.org/schema/context"
      4. xsi:schemaLocation="
      5. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
      6. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
      7. ">
      8. <context:component-scan base-package="com.ruochen">
      9. <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
      10. context:component-scan>
      11. beans>
      • SpringMVC 配置文件:spring-mvc.xml
      1. <beans xmlns="http://www.springframework.org/schema/beans"
      2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      3. xmlns:mvc="http://www.springframework.org/schema/mvc"
      4. xmlns:context="http://www.springframework.org/schema/context"
      5. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
      6. http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
      7. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
      8. <context:component-scan base-package="com.ruochen.controller"/>
      9. <mvc:annotation-driven/>
      10. <bean id="resourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
      11. <property name="prefix" value="/WEB-INF/pages/"/>
      12. <property name="suffix" value=".jsp"/>
      13. bean>
      14. <mvc:default-servlet-handler/>
      15. beans>
      • MyBatis 映射文件:AccountMapper.xml
      1. mapper
      2. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
      3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
      4. <mapper namespace="com.ruochen.mapper.AccountMapper">
      5. <insert id="save" parameterType="account">
      6. insert into account
      7. values (#{id}, #{name}, #{money})
      8. insert>
      9. <select id="findAll" resultType="account">
      10. select *
      11. from account
      12. select>
      13. mapper>
      • MyBatis 核心文件:sqlMapConfig.xml
      1. configuration
      2. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
      3. "http://mybatis.org/dtd/mybatis-3-config.dtd">
      4. <configuration>
      5. <properties resource="jdbc.properties"/>
      6. <typeAliases>
      7. <package name="com.ruochen.domain"/>
      8. typeAliases>
      9. <environments default="development">
      10. <environment id="development">
      11. <transactionManager type="JDBC"/>
      12. <dataSource type="POOLED">
      13. <property name="driver" value="${jdbc.driver}"/>
      14. <property name="url" value="${jdbc.url}"/>
      15. <property name="username" value="${jdbc.username}"/>
      16. <property name="password" value="${jdbc.password}"/>
      17. dataSource>
      18. environment>
      19. environments>
      20. <mappers>
      21. <package name="com.ruochen.mapper"/>
      22. mappers>
      23. configuration>
      • 数据库连接信息文件:jdbc.properties
      1. jdbc.driver=com.mysql.jdbc.Driver
      2. jdbc.url=jdbc:mysql://localhost:3306/ssm?useSSL=false&useServerPrepStmts=true&useUnicode=true&characterEncoding=UTF-8
      3. jdbc.username=root
      4. jdbc.password=ruochen666
      • Web.xml 文件:web.xml
      1. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
      2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      3. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
      4. version="4.0">
      5. <context-param>
      6. <param-name>contextConfigLocationparam-name>
      7. <param-value>classpath:applicationContext.xmlparam-value>
      8. context-param>
      9. <listener>
      10. <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
      11. listener>
      12. <servlet>
      13. <servlet-name>DispatcherServletservlet-name>
      14. <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
      15. <init-param>
      16. <param-name>contextConfigLocationparam-name>
      17. <param-value>classpath:spring-mvc.xmlparam-value>
      18. init-param>
      19. <load-on-startup>1load-on-startup>
      20. servlet>
      21. <servlet-mapping>
      22. <servlet-name>DispatcherServletservlet-name>
      23. <url-pattern>/url-pattern>
      24. servlet-mapping>
      25. <filter>
      26. <filter-name>CharacterEncodingFilterfilter-name>
      27. <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
      28. <init-param>
      29. <param-name>encodingparam-name>
      30. <param-value>UTF-8param-value>
      31. init-param>
      32. filter>
      33. <filter-mapping>
      34. <filter-name>CharacterEncodingFilterfilter-name>
      35. <url-pattern>/*url-pattern>
      36. filter-mapping>
      • 日志文件:log4j.xml
      1. ### direct log messages to stdout ###
      2. log4j.appender.stdout=org.apache.log4j.ConsoleAppender
      3. log4j.appender.stdout.Target=System.out
      4. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
      5. log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
      6. ### direct messages to file mylog.log ###
      7. log4j.appender.file=org.apache.log4j.FileAppender
      8. log4j.appender.file.File=c:/mylog.log
      9. log4j.appender.file.layout=org.apache.log4j.PatternLayout
      10. log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
      11. ### set log levels - for more verbose logging change 'info' to 'debug' ###
      12. log4j.rootLogger=debug, stdout

    MyBatis 整合 Spring 实现

    • sqlMapConfig.xml 修改如下

      1. configuration
      2. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
      3. "http://mybatis.org/dtd/mybatis-3-config.dtd">
      4. <configuration>
      5. <typeAliases>
      6. <package name="com.ruochen.domain"/>
      7. typeAliases>
      8. configuration>
    • applicationContext.xml 修改如下

      1. <beans xmlns="http://www.springframework.org/schema/beans"
      2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      3. xmlns:context="http://www.springframework.org/schema/context"
      4. xmlns:tx="http://www.springframework.org/schema/tx"
      5. xmlns:aop="http://www.springframework.org/schema/aop"
      6. xsi:schemaLocation="
      7. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
      8. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
      9. http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
      10. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
      11. ">
      12. <context:component-scan base-package="com.ruochen">
      13. <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
      14. context:component-scan>
      15. <context:property-placeholder location="classpath:jdbc.properties"/>
      16. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
      17. <property name="driverClass" value="${jdbc.driver}"/>
      18. <property name="jdbcUrl" value="${jdbc.url}"/>
      19. <property name="user" value="${jdbc.username}"/>
      20. <property name="password" value="${jdbc.password}"/>
      21. bean>
      22. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
      23. <property name="dataSource" ref="dataSource"/>
      24. <property name="configLocation" value="classpath:sqlMapConfig.xml"/>
      25. bean>
      26. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
      27. <property name="basePackage" value="com.ruochen.mapper"/>
      28. bean>
      29. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
      30. <property name="dataSource" ref="dataSource"/>
      31. bean>
      32. <tx:advice id="txAdvice">
      33. <tx:attributes>
      34. <tx:method name="*"/>
      35. tx:attributes>
      36. tx:advice>
      37. <aop:config>
      38. <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.ruochen.service.impl.*.*(..))"/>
      39. aop:config>
      40. beans>
    • AccountServiceImpl.java 修改如下

      1. package com.ruochen.service.impl;
      2. import com.ruochen.domain.Account;
      3. import com.ruochen.mapper.AccountMapper;
      4. import com.ruochen.service.AccountService;
      5. import org.springframework.beans.factory.annotation.Autowired;
      6. import org.springframework.stereotype.Service;
      7. import java.util.List;
      8. @Service("accountService")
      9. public class AccountServiceImpl implements AccountService {
      10. @Autowired
      11. private AccountMapper accountMapper;
      12. @Override
      13. public void save(Account account) {
      14. accountMapper.save(account);
      15. }
      16. @Override
      17. public List findAll() {
      18. return accountMapper.findAll();
      19. }
      20. }

    报错:Method com/mchange/v2/c3p0/impl/NewProxyResultSet.isClosed()Z is abstract 解决方法 在 pom.xml 文件中修改C3P0的依赖包

    1. <dependency>
    2. <groupId>com.mchangegroupId>
    3. <artifactId>c3p0artifactId>
    4. <version>0.9.5.2version>
    5. dependency>
  • 相关阅读:
    深入理解多线程(第三篇)
    win10蓝屏0xc000021a怎么修复?
    05【Redis的发布订阅】
    _jb_pytest_runner.py: error: unrecognized arguments: --cov报错
    Python面试题:在 Python 中,如何实现一个 LRU(最近最少使用)缓存?
    【计算机毕业设计】java开源项目——在线考试系统
    [ARM入门]ARM模式及其切换、异常
    cesium画的矩形不是方的?
    【opencv图像处理】--3.图像运算、基本变换、仿射变换
    docsify多页文档找不到文档404
  • 原文地址:https://blog.csdn.net/LBWNB_Java/article/details/126297433