创数据库

  1. create database ssmtest
  2. use ssmtest
  3. create table booklist(
  4. id int primary key AUTO_INCREMENT,
  5. title varchar(50),
  6. writer varchar(30),
  7. price decimal(6,2),
  8. count int
  9. )
  10. insert booklist values
  11. (null,'百年孤独','雨果',23.4,3),
  12. (null,'斗破苍穹','天蚕土豆',29.9,12),
  13. (null,'遮天','辰东',34,39),
  14. (null,'雪中悍刀行','烽火戏诸侯',49.8,123)

项目目录结构

下面的项目构建都看这个目录
image.png

pom.xml

导入依赖和静态资源导出需要配置

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <parent>
  6. <artifactId>Spring</artifactId>
  7. <groupId>org.lyd</groupId>
  8. <version>1.0-SNAPSHOT</version>
  9. </parent>
  10. <modelVersion>4.0.0</modelVersion>
  11. <artifactId>demo6ssm</artifactId>
  12. <properties>
  13. <maven.compiler.source>8</maven.compiler.source>
  14. <maven.compiler.target>8</maven.compiler.target>
  15. </properties>
  16. <dependencies>
  17. <dependency>
  18. <groupId>org.springframework</groupId>
  19. <artifactId>spring-webmvc</artifactId>
  20. <version>5.2.0.RELEASE</version>
  21. </dependency>
  22. <dependency>
  23. <groupId>org.springframework</groupId>
  24. <artifactId>spring-jdbc</artifactId>
  25. <version>5.2.0.RELEASE</version>
  26. </dependency>
  27. <dependency>
  28. <groupId>junit</groupId>
  29. <artifactId>junit</artifactId>
  30. <version>4.12</version>
  31. <scope>test</scope>
  32. </dependency>
  33. <dependency>
  34. <groupId>org.mybatis</groupId>
  35. <artifactId>mybatis</artifactId>
  36. <version>3.5.7</version>
  37. </dependency>
  38. <dependency>
  39. <groupId>org.mybatis</groupId>
  40. <artifactId>mybatis-spring</artifactId>
  41. <version>2.0.7</version>
  42. </dependency>
  43. <dependency>
  44. <groupId>mysql</groupId>
  45. <artifactId>mysql-connector-java</artifactId>
  46. <version>5.1.3</version>
  47. </dependency>
  48. <dependency>
  49. <groupId>com.alibaba</groupId>
  50. <artifactId>druid</artifactId>
  51. <version>1.2.8</version>
  52. </dependency>
  53. <dependency>
  54. <groupId>org.aspectj</groupId>
  55. <artifactId>aspectjweaver</artifactId>
  56. <version>1.9.1</version>
  57. </dependency>
  58. <dependency>
  59. <groupId>javax.servlet</groupId>
  60. <artifactId>javax.servlet-api</artifactId>
  61. <version>3.1.0</version>
  62. </dependency>
  63. <dependency>
  64. <groupId>com.alibaba</groupId>
  65. <artifactId>fastjson</artifactId>
  66. <version>1.2.80</version>
  67. </dependency>
  68. <dependency>
  69. <groupId>org.projectlombok</groupId>
  70. <artifactId>lombok</artifactId>
  71. <version>RELEASE</version>
  72. <scope>compile</scope>
  73. </dependency>
  74. </dependencies>
  75. <!--静态资源导出问题-->
  76. <build>
  77. <resources>
  78. <resource>
  79. <directory>src/main/java</directory>
  80. <includes>
  81. <include>**/*.properties</include>
  82. <include>**/*.xml</include>
  83. </includes>
  84. <filtering>false</filtering>
  85. </resource>
  86. <resource>
  87. <directory>src/main/resources</directory>
  88. <includes>
  89. <include>**/*.properties</include>
  90. <include>**/*.xml</include>
  91. </includes>
  92. <filtering>false</filtering>
  93. </resource>
  94. </resources>
  95. </build>
  96. </project>

mybatis配置文件

mybatis-config.xml

用spring来配置数据源了,mybatis的配置文件作用不大,但是还是象征性的写两个东西

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6. <!--配置数据源,交给Spring来做-->
  7. <!--设置别名-->
  8. <typeAliases>
  9. <package name="com.lyd.pojo"/>
  10. </typeAliases>
  11. <!--引入映射文件-->
  12. <mappers>
  13. <package name="com.lyd.mapper"/>
  14. </mappers>
  15. </configuration>

mybatis.properties

  1. jdbc.driver=com.mysql.jdbc.Driver
  2. jdbc.url=jdbc:mysql://localhost:3306/ssmtest?useUnicode=true&characterEncoding=utf8
  3. jdbc.username=root
  4. jdbc.password=123456

spring配置文件

applicationContext.xml

Spring的配置文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans
  5. https://www.springframework.org/schema/beans/spring-beans.xsd">
  6. <import resource="classpath:spring-dao.xml"/>
  7. <import resource="classpath:spring-service.xml"/>
  8. <import resource="classpath:spring-mvc.xml"/>
  9. </beans>

spring-dao.xml

也是spring的配置文件,不过是dao层的,用来配置数据访问的

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. https://www.springframework.org/schema/beans/spring-beans.xsd
  7. http://www.springframework.org/schema/context
  8. https://www.springframework.org/schema/context/spring-context.xsd">
  9. <!--1.关连数据库配置文件-->
  10. <context:property-placeholder location="classpath:mybatis.properties"/>
  11. <!--2.连接池-->
  12. <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
  13. <property name="driverClassName" 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. </bean>
  18. <!--3.sqlSessionFactory-->
  19. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  20. <property name="dataSource" ref="dataSource" />
  21. <!--绑定Mybatis配置文件-->
  22. <property name="configLocation" value="classpath:mybatis-config.xml"/>
  23. <property name="mapperLocations" value="classpath:com/lyd/mapper/*.xml"/>
  24. </bean>
  25. <!--4.配置dao接口扫描包,动态的实现dao接口可以注入到Spring容器中-->
  26. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  27. <!--注入sqlSessionFactory-->
  28. <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
  29. <!--要扫描的dao包-->
  30. <property name="basePackage" value="com.lyd.dao"/>
  31. </bean>
  32. </beans>

spring-service.xml

这也是spring的配置文件,用来配置service层的

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:tx="http://www.springframework.org/schema/tx"
  6. xmlns:aop="http://www.springframework.org/schema/aop"
  7. xsi:schemaLocation="http://www.springframework.org/schema/beans
  8. https://www.springframework.org/schema/beans/spring-beans.xsd
  9. http://www.springframework.org/schema/context
  10. https://www.springframework.org/schema/context/spring-context.xsd
  11. http://www.springframework.org/schema/tx
  12. https://www.springframework.org/schema/tx/spring-tx.xsd
  13. http://www.springframework.org/schema/aop
  14. https://www.springframework.org/schema/aop/spring-aop.xsd">
  15. <!--1.扫描service下的包-->
  16. <context:component-scan base-package="com.lyd.service"/>
  17. <!--2.将我们所有的业务类注入到Spring,可以通过配置,或者注解实现-->
  18. <bean id="bookservice" class="com.lyd.service.BookListService">
  19. <property name="bookmapper" ref="IBookListMapper"/>
  20. </bean>
  21. <!--3. 配置声明式事务-->
  22. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  23. <property name="dataSource" ref="dataSource"/>
  24. </bean>
  25. <!--结合AOP实现事务的织入-->
  26. <!--配置事务通知-->
  27. <tx:advice id="txAdvice" transaction-manager="transactionManager">
  28. <!--给哪些方法配置事务-->
  29. <!---->
  30. <tx:attributes>
  31. <tx:method name="queryBookById" propagation="REQUIRED"/>
  32. <tx:method name="queryBooks"/>
  33. </tx:attributes>
  34. </tx:advice>
  35. <!--配置事务的切入-->
  36. <aop:config>
  37. <aop:pointcut id="txPointCut" expression="execution(* com.lyd.dao.*.*(..))"/>
  38. <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"/>
  39. </aop:config>
  40. </beans>

spring-mvc.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:mvc="http://www.springframework.org/schema/mvc"
  5. xmlns:context="http://www.springframework.org/schema/context"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans
  7. https://www.springframework.org/schema/beans/spring-beans.xsd
  8. http://www.springframework.org/schema/mvc
  9. http://www.springframework.org/schema/mvc/spring-mvc.xsd
  10. http://www.springframework.org/schema/context
  11. https://www.springframework.org/schema/context/spring-context.xsd">
  12. <!--1.注解驱动并且解决json乱码问题-->
  13. <mvc:annotation-driven>
  14. <mvc:message-converters>
  15. <bean class="org.springframework.http.converter.StringHttpMessageConverter">
  16. <constructor-arg value="UTF-8"/>
  17. </bean>
  18. <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
  19. <property name="objectMapper">
  20. <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
  21. <property name="failOnEmptyBeans" value="false"/>
  22. </bean>
  23. </property>
  24. </bean>
  25. </mvc:message-converters>
  26. </mvc:annotation-driven>
  27. <!--2.静态资源过滤-->
  28. <mvc:default-servlet-handler/>
  29. <!--3.扫描包-->
  30. <context:component-scan base-package="com.lyd.*"/>
  31. <!--4.视图解析器-->
  32. <!--视图解析器-->
  33. <bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
  34. <!--加上前后缀,就只用访问名字就行了,会主动拼接上前后缀的-->
  35. <!--前缀-->
  36. <property name="prefix" value="/WEB-INF/jsp/"/>
  37. <!--后缀-->
  38. <property name="suffix" value=".jsp"/>
  39. </bean>
  40. </beans>

Web配置

给项目添加web框架,称为一个web项目

web.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  5. version="4.0">
  6. <!--配置DispatchServlet:这个是SpringMVC的核心,请求分发器,前端控制器-->
  7. <servlet>
  8. <servlet-name>springmvc</servlet-name>
  9. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  10. <!--DispatcherServlet要绑定Spring的配置文件-->
  11. <init-param>
  12. <param-name>contextConfigLocation</param-name>
  13. <param-value>classpath:applicationContext.xml</param-value>
  14. </init-param>
  15. <!--启动级别:1.服务器一启动它就自己启动-->
  16. <load-on-startup>1</load-on-startup>
  17. </servlet>
  18. <servlet-mapping>
  19. <servlet-name>springmvc</servlet-name>
  20. <url-pattern>/</url-pattern>
  21. </servlet-mapping>
  22. <!--配置SpingMVC的乱码过滤器-->
  23. <filter>
  24. <filter-name>encoding</filter-name>
  25. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  26. <init-param>
  27. <param-name>encoding</param-name>
  28. <param-value>utf-8</param-value>
  29. </init-param>
  30. </filter>
  31. <filter-mapping>
  32. <filter-name>encoding</filter-name>
  33. <url-pattern>/*</url-pattern>
  34. </filter-mapping>
  35. </web-app>

java

pojo|数据实体类

  1. package com.lyd.pojo;
  2. import lombok.AllArgsConstructor;
  3. import lombok.Data;
  4. import lombok.NoArgsConstructor;
  5. @Data
  6. @AllArgsConstructor
  7. @NoArgsConstructor
  8. public class BookList {
  9. private int id;
  10. private String title;
  11. private String writer;
  12. private double price;
  13. private int count;
  14. }

dao|Mapper接口

  1. package com.lyd.dao;
  2. import com.lyd.pojo.BookList;
  3. import org.apache.ibatis.annotations.Param;
  4. import java.util.List;
  5. public interface IBookListMapper {
  6. //增删改查
  7. int addBook(BookList book);
  8. int deleteBookById(@Param("id") int id);
  9. int updateBook(BookList book);
  10. BookList queryBookById(@Param("id") int id);
  11. List<BookList> queryBooks();
  12. }

service|业务层

service首先有接口,约定了某些方法,然后实现类实现了这些方法,service层调用dao层,需要注入到service层,可以用自动装配的注解

  1. package com.lyd.service;
  2. import com.lyd.pojo.BookList;
  3. import java.util.List;
  4. public interface IBookListService {
  5. int addBook(BookList book);
  6. int deleteBookById(int id);
  7. int updateBook(BookList book);
  8. BookList queryBookById(int id);
  9. List<BookList> queryBooks();
  10. }
  1. package com.lyd.service;
  2. import com.lyd.dao.IBookListMapper;
  3. import com.lyd.pojo.BookList;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.stereotype.Service;
  6. import java.util.List;
  7. @Service
  8. public class BookListService implements IBookListService{
  9. //service层调dao层
  10. IBookListMapper bookmapper;
  11. public void setBookmapper(IBookListMapper bookmapper) {
  12. this.bookmapper = bookmapper;
  13. }
  14. @Override
  15. public int addBook(BookList book) {
  16. return bookmapper.addBook(book);
  17. }
  18. @Override
  19. public int deleteBookById(int id) {
  20. return bookmapper.deleteBookById(id);
  21. }
  22. @Override
  23. public int updateBook(BookList book) {
  24. return bookmapper.updateBook(book);
  25. }
  26. @Override
  27. public BookList queryBookById(int id) {
  28. return bookmapper.queryBookById(id);
  29. }
  30. @Override
  31. public List<BookList> queryBooks() {
  32. return bookmapper.queryBooks();
  33. }
  34. }

controller|控制器层

  1. package com.lyd.controller;
  2. import com.alibaba.fastjson.JSON;
  3. import com.lyd.pojo.BookList;
  4. import com.lyd.service.BookListService;
  5. import com.lyd.service.IBookListService;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.beans.factory.annotation.Qualifier;
  8. import org.springframework.stereotype.Controller;
  9. import org.springframework.ui.Model;
  10. import org.springframework.web.bind.annotation.*;
  11. import java.util.List;
  12. @RestController
  13. @RequestMapping("/book")
  14. public class BookController {
  15. //controller层 调 service层
  16. @Autowired
  17. @Qualifier("bookservice")
  18. private BookListService bookserv;
  19. //查询全部书籍,并且返回全部书籍的json字符串
  20. @RequestMapping("/allbook")
  21. public String list(Model model){
  22. List<BookList> list = bookserv.queryBooks();
  23. return JSON.toJSONString(list);
  24. }
  25. @RequestMapping("/addbook")
  26. //加上@RequestBody注解表示,前端传过来的json值映射成这个对象,json值得键要和对象的属性名一致
  27. public int add(@RequestBody BookList booklist){
  28. return bookserv.addBook(booklist);
  29. }
  30. @RequestMapping("/updatebook")
  31. public int update(@RequestBody BookList booklist){
  32. return bookserv.updateBook(booklist);
  33. }
  34. @PostMapping("/deletebook")
  35. public int delete(@RequestParam("id") int id){
  36. return bookserv.deleteBookById(id);
  37. }
  38. @PostMapping("/selectbook")
  39. public String book(@RequestParam("id") int id){
  40. return JSON.toJSONString(bookserv.queryBookById(id));
  41. }
  42. }