创数据库
create database ssmtestuse ssmtestcreate table booklist(id int primary key AUTO_INCREMENT,title varchar(50),writer varchar(30),price decimal(6,2),count int)insert booklist values(null,'百年孤独','雨果',23.4,3),(null,'斗破苍穹','天蚕土豆',29.9,12),(null,'遮天','辰东',34,39),(null,'雪中悍刀行','烽火戏诸侯',49.8,123)
项目目录结构
pom.xml
导入依赖和静态资源导出需要配置
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"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"><parent><artifactId>Spring</artifactId><groupId>org.lyd</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>demo6ssm</artifactId><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.0.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.2.0.RELEASE</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.7</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.7</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.3</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.8</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.1</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.80</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>RELEASE</version><scope>compile</scope></dependency></dependencies><!--静态资源导出问题--><build><resources><resource><directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>false</filtering></resource><resource><directory>src/main/resources</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>false</filtering></resource></resources></build></project>
mybatis配置文件
mybatis-config.xml
用spring来配置数据源了,mybatis的配置文件作用不大,但是还是象征性的写两个东西
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><!--配置数据源,交给Spring来做--><!--设置别名--><typeAliases><package name="com.lyd.pojo"/></typeAliases><!--引入映射文件--><mappers><package name="com.lyd.mapper"/></mappers></configuration>
mybatis.properties
jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/ssmtest?useUnicode=true&characterEncoding=utf8jdbc.username=rootjdbc.password=123456
spring配置文件
applicationContext.xml
Spring的配置文件
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsd"><import resource="classpath:spring-dao.xml"/><import resource="classpath:spring-service.xml"/><import resource="classpath:spring-mvc.xml"/></beans>
spring-dao.xml
也是spring的配置文件,不过是dao层的,用来配置数据访问的
<?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"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsd"><!--1.关连数据库配置文件--><context:property-placeholder location="classpath:mybatis.properties"/><!--2.连接池--><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="${jdbc.driver}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /></bean><!--3.sqlSessionFactory--><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /><!--绑定Mybatis配置文件--><property name="configLocation" value="classpath:mybatis-config.xml"/><property name="mapperLocations" value="classpath:com/lyd/mapper/*.xml"/></bean><!--4.配置dao接口扫描包,动态的实现dao接口可以注入到Spring容器中--><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!--注入sqlSessionFactory--><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/><!--要扫描的dao包--><property name="basePackage" value="com.lyd.dao"/></bean></beans>
spring-service.xml
这也是spring的配置文件,用来配置service层的
<?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:tx="http://www.springframework.org/schema/tx"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/txhttps://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/aophttps://www.springframework.org/schema/aop/spring-aop.xsd"><!--1.扫描service下的包--><context:component-scan base-package="com.lyd.service"/><!--2.将我们所有的业务类注入到Spring,可以通过配置,或者注解实现--><bean id="bookservice" class="com.lyd.service.BookListService"><property name="bookmapper" ref="IBookListMapper"/></bean><!--3. 配置声明式事务--><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/></bean><!--结合AOP实现事务的织入--><!--配置事务通知--><tx:advice id="txAdvice" transaction-manager="transactionManager"><!--给哪些方法配置事务--><!----><tx:attributes><tx:method name="queryBookById" propagation="REQUIRED"/><tx:method name="queryBooks"/></tx:attributes></tx:advice><!--配置事务的切入--><aop:config><aop:pointcut id="txPointCut" expression="execution(* com.lyd.dao.*.*(..))"/><aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"/></aop:config></beans>
spring-mvc.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:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsd"><!--1.注解驱动并且解决json乱码问题--><mvc:annotation-driven><mvc:message-converters><bean class="org.springframework.http.converter.StringHttpMessageConverter"><constructor-arg value="UTF-8"/></bean><bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"><property name="objectMapper"><bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean"><property name="failOnEmptyBeans" value="false"/></bean></property></bean></mvc:message-converters></mvc:annotation-driven><!--2.静态资源过滤--><mvc:default-servlet-handler/><!--3.扫描包--><context:component-scan base-package="com.lyd.*"/><!--4.视图解析器--><!--视图解析器--><bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver"><!--加上前后缀,就只用访问名字就行了,会主动拼接上前后缀的--><!--前缀--><property name="prefix" value="/WEB-INF/jsp/"/><!--后缀--><property name="suffix" value=".jsp"/></bean></beans>
Web配置
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"><!--配置DispatchServlet:这个是SpringMVC的核心,请求分发器,前端控制器--><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--DispatcherServlet要绑定Spring的配置文件--><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></init-param><!--启动级别:1.服务器一启动它就自己启动--><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping><!--配置SpingMVC的乱码过滤器--><filter><filter-name>encoding</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>utf-8</param-value></init-param></filter><filter-mapping><filter-name>encoding</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>
java
pojo|数据实体类
package com.lyd.pojo;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;@Data@AllArgsConstructor@NoArgsConstructorpublic class BookList {private int id;private String title;private String writer;private double price;private int count;}
dao|Mapper接口
package com.lyd.dao;import com.lyd.pojo.BookList;import org.apache.ibatis.annotations.Param;import java.util.List;public interface IBookListMapper {//增删改查int addBook(BookList book);int deleteBookById(@Param("id") int id);int updateBook(BookList book);BookList queryBookById(@Param("id") int id);List<BookList> queryBooks();}
service|业务层
service首先有接口,约定了某些方法,然后实现类实现了这些方法,service层调用dao层,需要注入到service层,可以用自动装配的注解
package com.lyd.service;import com.lyd.pojo.BookList;import java.util.List;public interface IBookListService {int addBook(BookList book);int deleteBookById(int id);int updateBook(BookList book);BookList queryBookById(int id);List<BookList> queryBooks();}
package com.lyd.service;import com.lyd.dao.IBookListMapper;import com.lyd.pojo.BookList;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import java.util.List;@Servicepublic class BookListService implements IBookListService{//service层调dao层IBookListMapper bookmapper;public void setBookmapper(IBookListMapper bookmapper) {this.bookmapper = bookmapper;}@Overridepublic int addBook(BookList book) {return bookmapper.addBook(book);}@Overridepublic int deleteBookById(int id) {return bookmapper.deleteBookById(id);}@Overridepublic int updateBook(BookList book) {return bookmapper.updateBook(book);}@Overridepublic BookList queryBookById(int id) {return bookmapper.queryBookById(id);}@Overridepublic List<BookList> queryBooks() {return bookmapper.queryBooks();}}
controller|控制器层
package com.lyd.controller;import com.alibaba.fastjson.JSON;import com.lyd.pojo.BookList;import com.lyd.service.BookListService;import com.lyd.service.IBookListService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.*;import java.util.List;@RestController@RequestMapping("/book")public class BookController {//controller层 调 service层@Autowired@Qualifier("bookservice")private BookListService bookserv;//查询全部书籍,并且返回全部书籍的json字符串@RequestMapping("/allbook")public String list(Model model){List<BookList> list = bookserv.queryBooks();return JSON.toJSONString(list);}@RequestMapping("/addbook")//加上@RequestBody注解表示,前端传过来的json值映射成这个对象,json值得键要和对象的属性名一致public int add(@RequestBody BookList booklist){return bookserv.addBook(booklist);}@RequestMapping("/updatebook")public int update(@RequestBody BookList booklist){return bookserv.updateBook(booklist);}@PostMapping("/deletebook")public int delete(@RequestParam("id") int id){return bookserv.deleteBookById(id);}@PostMapping("/selectbook")public String book(@RequestParam("id") int id){return JSON.toJSONString(bookserv.queryBookById(id));}}
