SSMM(spring+springmvc+maven+mybatis)框架整合
总体流程
- 启动mysql
- 启动mysql server(docker版)
- 启动mysql client(这里使用navicat)
- 建库
- 建表
- 创建mvn项目
- 手工创建mvn项目
- 引入spring、springmvc、mybatis以及json相关依赖(即jar)
- 引入mysql库配置(src/main/resources)
- 引入spring配置文件(src/main/resources)
- 创建基本包结构(controller、service、dao、mapper、model)
- 创建src/main/resources/mapper包,用于放置*Mapper.xml
- 配置web.xml,使spring生效
- 使用mybatis-generator创建mybatis的xml文件、mapper层接口、model层
-
下载mybatis-generator-core-1.3.2.jar和mysql-connector-java-5.1.37.jar,并放置在同一个包例如"mybatis-generator"下
- 在该包下创建generatorConfig.xml文件并编写
- 执行生成命令
- 将model层生成的类拷贝到项目中的model包里
- 将mapper层生成的接口拷贝到项目中的mapper包里
- 将生成的xml文件拷贝到src/main/resources/mapper包下
-
- 编写dao、service、controller
- 浏览器或postman测试
一、启动mysql
1、启动docker引擎
- 双击Docker图标(应用程序)
2、启动mysql server(docker容器)
- 先删除容器
-
1 docker rm -f mysql:5.7
- 再启动容器
-
1 docker run --name mysql5.7 -e MYSQL_ROOT_PASSWORD=123456 -v /Users/wangna/Desktop/docker-data/mysql/data:/var/lib/mysql -v /Users/wangna/Desktop/docker-data/mysql/file/my.cnf:/etc/my.cnf -p 3306:3306 -d mysql:5.7
或者用
-
docker start mysql5.7
- 检查是否已经启动容器
-
docker ps -a
3、启动mysql client(即打开navicat,连接mysql server)
- 双击"navicat for mysql"图标(应用程序)
4、创建数据库
- 打开连接(即双击连接)
- 在连接上右击,创建数据库(前提,该连接内没有该数据库)
5、创建数据表
二、创建mvn项目
1、手工创建mvn项目
- 创建后,先使用mvn clean install构建项目,之后引入eclipse
注意点:
- war包(即必须有web.xml),这个在之后的springboot中可以去掉(springboot可以直接使用jar包启动web项目)
- 引入eclipse出错后,查看Problems窗口的提示,一步一步进行修改
- pom.xml中需要引入properties中需要引入
-
1 <properties> 2 <java.version>1.8</java.version> 3 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 4 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 5 </properties>
-
第一条:指定jdk版本
- 后两条:处理中文问题
-
- pom.xml中需要引入jdk1.8的maven编译插件
-
1 <build> 2 <plugins> 3 <plugin> 4 <groupId>org.apache.maven.plugins</groupId> 5 <artifactId>maven-compiler-plugin</artifactId> 6 <configuration> 7 <source>1.8</source> 8 <target>1.8</target> 9 <encoding>utf-8</encoding> 10 </configuration> 11 </plugin> 12 </plugins> 13 </build>
2、在pom.xml文件中引入spring、springmvc、mybatis以及json相关依赖(即jar)
- spring核心包:core、bean、context
-
1 <dependency> 2 <groupId>org.springframework</groupId> 3 <artifactId>spring-core</artifactId> 4 <version>${spring.version}</version> 5 </dependency> 6 <dependency> 7 <groupId>org.springframework</groupId> 8 <artifactId>spring-beans</artifactId> 9 <version>${spring.version}</version> 10 </dependency> 11 <dependency> 12 <groupId>org.springframework</groupId> 13 <artifactId>spring-context</artifactId> 14 <version>${spring.version}</version> 15 </dependency> 16 </dependencies>
别忘了版本:
-
<spring.version>4.2.4.RELEASE</spring.version>
- springmvc:web、webmvc
-
1 <!-- spring mvc --> 2 <dependency> 3 <groupId>org.springframework</groupId> 4 <artifactId>spring-web</artifactId> 5 <version>${spring.version}</version> 6 </dependency> 7 <dependency> 8 <groupId>org.springframework</groupId> 9 <artifactId>spring-webmvc</artifactId> 10 <version>${spring.version}</version> 11 </dependency>
- 数据库相关
- spring-jdbc
-
1 <dependency> 2 <groupId>org.springframework</groupId> 3 <artifactId>spring-jdbc</artifactId> 4 <version>${spring.version}</version> 5 </dependency>
-
mysql-connector-java(Java连接mysql的必须包)
-
1 <dependency> 2 <groupId>mysql</groupId> 3 <artifactId>mysql-connector-java</artifactId> 4 <version>5.1.27</version> 5 <scope>runtime</scope> 6 </dependency>
- tomcat-jdbc(数据源,更好的开源实现是druid)
-
1 <dependency> 2 <groupId>org.apache.tomcat</groupId> 3 <artifactId>tomcat-jdbc</artifactId> 4 <version>7.0.47</version> 5 </dependency>
- mybatis:
- mybatis
-
1 <dependency> 2 <groupId>org.mybatis</groupId> 3 <artifactId>mybatis</artifactId> 4 <version>${mybatis.version}</version> 5 </dependency>
版本:
-
<mybatis.version>3.2.8</mybatis.version>
- mybatis-spring:mybatis与spring进行集成的包
-
1 <dependency> 2 <groupId>org.mybatis</groupId> 3 <artifactId>mybatis-spring</artifactId> 4 <version>${mybatis-spring.version}</version> 5 </dependency>
版本:
-
<mybatis-spring.version>1.2.2</mybatis-spring.version>
- json相关(使用Jackson)
- core
- annotations
- databind
-
1 <!-- json --> 2 <dependency> 3 <groupId>com.fasterxml.jackson.core</groupId> 4 <artifactId>jackson-annotations</artifactId> 5 <version>${jackson.version}</version> 6 </dependency> 7 <dependency> 8 <groupId>com.fasterxml.jackson.core</groupId> 9 <artifactId>jackson-core</artifactId> 10 <version>${jackson.version}</version> 11 </dependency> 12 <dependency> 13 <groupId>com.fasterxml.jackson.core</groupId> 14 <artifactId>jackson-databind</artifactId> 15 <version>${jackson.version}</version> 16 </dependency>
版本:
-
<jackson.version>2.6.4</jackson.version>
3、引入mysql库配置(src/main/resources)
jdbc.properties
1 jdbc.driverClassName = com.mysql.jdbc.Driver 2 jdbc.url = jdbc:mysql://localhost:3306/wangna?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8 3 jdbc.username = root 4 jdbc.password = 123456
- jdbc.driverClassName:数据库驱动(Java连接数据库必须有的),其中com.mysql.jdbc.Driver来源于mysql-connector-java这个依赖包
- jdbc.url:
- 格式:jdbc:mysql://ip:port/数据库名
- 例:jdbc:mysql://localhost:3306/wn
- localhost即本地ip,等于127.0.0.1
- 格式:jdbc:mysql://ip:port/数据库名
- jdbc.username:数据库用户名,默认是root
- jdbc.password:数据库密码,就是启动mysql容器的命令中的MYSQL_ROOT_PASSWORD的值
4、引入spring配置文件(src/main/resources)
spring.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:context="http://www.springframework.org/schema/context" 5 xmlns:mvc="http://www.springframework.org/schema/mvc" 6 xsi:schemaLocation="http://www.springframework.org/schema/beans 7 http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 8 http://www.springframework.org/schema/context 9 http://www.springframework.org/schema/context/spring-context-3.2.xsd 10 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd"> 11 12 <!-- 注解扫描 --> 13 <context:component-scan base-package="com.wn"/> 14 <!-- 启动jackson --> 15 <mvc:annotation-driven /> 16 <!-- 引入属性文件 --> 17 <context:property-placeholder location="classpath:jdbc.properties"/> 18 19 <!-- 引入数据源 --> 20 <bean id="xxxDataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close"> 21 <property name="driverClassName" value="${jdbc.driverClassName}" /> 22 <property name="url" value="${jdbc.url}" /> 23 <property name="username" value="${jdbc.username}" /> 24 <property name="password" value="${jdbc.password}" /> 25 </bean> 26 27 <!-- 引入mybatis --> 28 <bean id="xxxSqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 29 <property name="dataSource" ref="xxxDataSource" /> 30 <property name="mapperLocations"> 31 <list> 32 <value>classpath*:mapper/*Mapper.xml</value> 33 </list> 34 </property> 35 </bean> 36 <bean id="xxxMapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 37 <property name="basePackage" value="com.wn.mapper" /> 38 <property name="sqlSessionFactoryBeanName" value="xxxSqlSessionFactory" /> 39 </bean> 40 </beans>
- <context:component-scan>:扫描基础包,用于使注解生效,eg.com.wn,那么com.wn及其子包com.wn.*下的注解都会生效
-
<mvc:annotation-driven />:启动jackson,这里注意springmvc自动返回json数据的三步
- 引入jackson的三个包
- 启动该注解
- 在controller层中类或方法上添加@ResponseBody注解
-
context:property-placeholder:将外部文件引入到该文件中,进而在后续的配置中使用外部文件的配置属性,例如:引入jdbc.properties,之后数据源的配置就可以使用jdbc.properties中的属性
- <bean>
- 数据源:使用jdbc.properties中的四个属性进行构建,其中org.apache.tomcat.jdbc.pool.DataSource来源于tomcat-jdbc这个依赖包
- sqlSessionFactory:mybatis的部分,需要根据之前创建的数据源以及将要扫描的Mapper.xml来创建,其中org.mybatis.spring.SqlSessionFactoryBean来源于mybatis-spring依赖包
- MapperScannerConfigurer:mybatis的部分,需要根据之前创建的sqlSessionFactory和mapper层接口的包(见5)
5、创建基本包(package)结构(controller、service、dao、mapper、model)
- eg.com.wn.controller,这里的基础包com.wn与spring.xml中的<context:component-scan>一样
6、创建src/main/resources/mapper的folder包,用于放置*Mapper.xml
- 这里的src/main/resources/mapper/*Mapper.xml与spring.xml中的xxxSqlSessionFactory的mapperLocations的值classpath*:mapper/*Mapper.xml一样
7、配置web.xml,使spring生效
1 <servlet> 2 <servlet-name>dispatcherServlet</servlet-name> 3 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 4 <init-param> 5 <param-name>contextConfigLocation</param-name> 6 <param-value>classpath*:spring*.xml</param-value> 7 </init-param> 8 <load-on-startup>1</load-on-startup> 9 </servlet> 10 <servlet-mapping> 11 <servlet-name>dispatcherServlet</servlet-name> 12 <url-pattern>/</url-pattern> 13 </servlet-mapping> 14 15 <filter> 16 <filter-name>encodingFilter</filter-name> 17 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 18 <init-param> 19 <param-name>encoding</param-name> 20 <param-value>UTF-8</param-value> 21 </init-param> 22 <init-param> 23 <param-name>forceEncoding</param-name> 24 <param-value>true</param-value> 25 </init-param> 26 </filter> 27 <filter-mapping> 28 <filter-name>encodingFilter</filter-name> 29 <url-pattern>/*</url-pattern> 30 </filter-mapping>
- 设置DispatcherServlet
- 指定spring配置文件(即上述的spring.xml)所在的位置与名称
- 指定该servlet的扫描路径为根路径"/",即该项目下的所有请求都会被DispatcherServlet所拦截并分发到相应的controller类中的方法上
- 配置CharacterEncodingFilter:处理中文问题
三、使用mybatis-generator创建mybatis的xml文件、mapper层接口、model层
1、下载mybatis-generator-core-1.3.2.jar和mysql-connector-java-5.1.37.jar,并放置在同一个包例如"mybatis-generator"下
2、在该包下创建generatorConfig.xml文件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE generatorConfiguration 3 PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" 4 "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> 5 <generatorConfiguration> 6 <!--数据库驱动--> 7 <classPathEntry location="mysql-connector-java-5.1.37.jar"/> 8 <context id="mysql"> 9 <!-- 用于防止生成大量注释 --> 10 <commentGenerator> 11 <property name="suppressDate" value="true"/> 12 <property name="suppressAllComments" value="true"/> 13 </commentGenerator> 14 <!--数据库链接地址账号密码--> 15 <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/wn" userId="root" password="123456"> 16 </jdbcConnection> 17 <javaTypeResolver> 18 <property name="forceBigDecimals" value="false"/> 19 </javaTypeResolver> 20 <!--生成Model类存放位置--> 21 <javaModelGenerator targetPackage="com.wn.model" targetProject="xxx"> 22 <property name="enableSubPackages" value="true"/> 23 <property name="trimStrings" value="true"/> 24 </javaModelGenerator> 25 <!--生成映射文件存放位置--> 26 <sqlMapGenerator targetPackage="njkj" targetProject="xxx"> 27 <property name="enableSubPackages" value="true"/> 28 </sqlMapGenerator> 29 <!--生成mapper接口存放位置--> 30 <javaClientGenerator type="XMLMAPPER" targetPackage="com.wn.mapper" targetProject="xxx"> 31 <property name="enableSubPackages" value="true"/> 32 </javaClientGenerator> 33 <!--生成对应表及类名--> 34 <table tableName="t_book" domainObjectName="Book" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"> 35 </table> 36 37 </context> 38 </generatorConfiguration>
说明:每一条的含义参见http://www.cnblogs.com/java-zhao/p/5569714.html
3、执行命令(在"mybatis-generator"包下)
- 进入"mybatis-generator"包
- 创建xxx包
- java -jar mybatis-generator-core-1.3.2.jar -configfile generatorConfig.xml -overwrite
4、将生成的类、接口、xml拷贝到项目中
- 将model层生成的类拷贝到项目中的model包里
-
1 package com.wn.model; 2 3 import java.util.Date; 4 5 public class Book { 6 private Integer id; 7 8 private String bookName; 9 10 private String author; 11 12 private Date publishDate; 13 14 public Integer getId() { 15 return id; 16 } 17 18 public void setId(Integer id) { 19 this.id = id; 20 } 21 22 public String getBookName() { 23 return bookName; 24 } 25 26 public void setBookName(String bookName) { 27 this.bookName = bookName == null ? null : bookName.trim(); 28 } 29 30 public String getAuthor() { 31 return author; 32 } 33 34 public void setAuthor(String author) { 35 this.author = author == null ? null : author.trim(); 36 } 37 38 public Date getPublishDate() { 39 return publishDate; 40 } 41 42 public void setPublishDate(Date publishDate) { 43 this.publishDate = publishDate; 44 } 45 }
- 将mapper层生成的接口拷贝到项目中的mapper包里
-
1 package com.wn.mapper; 2 3 import com.wn.model.Book; 4 5 public interface BookMapper { 6 int deleteByPrimaryKey(Integer id); 7 8 int insert(Book record); 9 10 int insertSelective(Book record); 11 12 Book selectByPrimaryKey(Integer id); 13 14 int updateByPrimaryKeySelective(Book record); 15 16 int updateByPrimaryKey(Book record); 17 }
- 将生成的xml文件拷贝到src/main/resources/mapper包下
-
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > 3 <mapper namespace="com.wn.mapper.BookMapper"> 4 <resultMap id="BaseResultMap" type="com.wn.model.Book"> 5 <id column="id" property="id" jdbcType="INTEGER" /> 6 <result column="book_name" property="bookName" jdbcType="VARCHAR" /> 7 <result column="author" property="author" jdbcType="VARCHAR" /> 8 <result column="publish_date" property="publishDate" jdbcType="TIMESTAMP" /> 9 </resultMap> 10 <sql id="Base_Column_List"> 11 id, book_name, author, publish_date 12 </sql> 13 <select id="selectByPrimaryKey" resultMap="BaseResultMap" 14 parameterType="java.lang.Integer"> 15 select 16 <include refid="Base_Column_List" /> 17 from t_book 18 where id = #{id,jdbcType=INTEGER} 19 </select> 20 <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer"> 21 delete from t_book 22 where id = #{id,jdbcType=INTEGER} 23 </delete> 24 <insert id="insert" parameterType="com.wn.model.Book"> 25 insert into t_book (id, book_name, author, 26 publish_date) 27 values (#{id,jdbcType=INTEGER}, #{bookName,jdbcType=VARCHAR}, 28 #{author,jdbcType=VARCHAR}, 29 #{publishDate,jdbcType=TIMESTAMP}) 30 </insert> 31 <insert id="insertSelective" parameterType="com.wn.model.Book"> 32 insert into t_book 33 <trim prefix="(" suffix=")" suffixOverrides=","> 34 <if test="id != null"> 35 id, 36 </if> 37 <if test="bookName != null"> 38 book_name, 39 </if> 40 <if test="author != null"> 41 author, 42 </if> 43 <if test="publishDate != null"> 44 publish_date, 45 </if> 46 </trim> 47 <trim prefix="values (" suffix=")" suffixOverrides=","> 48 <if test="id != null"> 49 #{id,jdbcType=INTEGER}, 50 </if> 51 <if test="bookName != null"> 52 #{bookName,jdbcType=VARCHAR}, 53 </if> 54 <if test="author != null"> 55 #{author,jdbcType=VARCHAR}, 56 </if> 57 <if test="publishDate != null"> 58 #{publishDate,jdbcType=TIMESTAMP}, 59 </if> 60 </trim> 61 </insert> 62 <update id="updateByPrimaryKeySelective" parameterType="com.wn.model.Book"> 63 update t_book 64 <set> 65 <if test="bookName != null"> 66 book_name = #{bookName,jdbcType=VARCHAR}, 67 </if> 68 <if test="author != null"> 69 author = #{author,jdbcType=VARCHAR}, 70 </if> 71 <if test="publishDate != null"> 72 publish_date = #{publishDate,jdbcType=TIMESTAMP}, 73 </if> 74 </set> 75 where id = #{id,jdbcType=INTEGER} 76 </update> 77 <update id="updateByPrimaryKey" parameterType="com.wn.model.Book"> 78 update t_book 79 set book_name = #{bookName,jdbcType=VARCHAR}, 80 author = #{author,jdbcType=VARCHAR}, 81 publish_date = #{publishDate,jdbcType=TIMESTAMP} 82 where id = #{id,jdbcType=INTEGER} 83 </update> 84 </mapper>
- namespace="com.wn.mapper.BookMapper":namespace的值必须是生成的mapper接口的全类名
- resultMap
- 作用:对应数据库表与生成的model类的属性对应关系
- resultMap下的type="com.wn.model.Book"必须是生成的model类的全类名
- select
- id:一定是mapper接口的方法名,eg。也就是说,当dao调用mapper接口中的selectByPrimaryKey的时候,该方法会自动调用BookMapper.xml中的id=selectByPrimaryKey下的语句,或者说,BookMapper.xml就是BookMapper接口的实现类
- resultMap:返回值类型,还有一个是resultType(作业?)
- parameterType:参数(入参)类型
- 获取入参用#{id}
- delete
- id:同上
- insert
- update
- updateSelective
- <set>标签:做了两件事
- 添加了set
- 去掉尾部的","
- <set>标签:做了两件事
四、编写dao、service、controller
1、BookDao
1 package com.wn.dao; 2 3 import org.springframework.beans.factory.annotation.Autowired; 4 import org.springframework.stereotype.Repository; 5 6 import com.wn.mapper.BookMapper; 7 import com.wn.model.Book; 8 9 @Repository 10 public class BookDao { 11 @Autowired 12 private BookMapper bookMapper; 13 14 // 添加 15 public boolean add(Book book) { 16 return bookMapper.insert(book) == 1 ? true : false; 17 } 18 19 // 显示 20 public Book selectById(Integer id) { 21 return bookMapper.selectByPrimaryKey(id); 22 } 23 24 // 删除 25 public boolean deleteById(Integer id) { 26 return bookMapper.deleteByPrimaryKey(id) == 1 ? true : false; 27 } 28 29 // 修改 30 public boolean updateById(Book book) { 31 return bookMapper.updateByPrimaryKey(book) == 1 ? true : false; 32 } 33 }
2、BookService
1 package com.wn.service; 2 3 import java.util.Date; 4 5 import org.springframework.beans.factory.annotation.Autowired; 6 import org.springframework.stereotype.Service; 7 8 import com.wn.dao.BookDao; 9 import com.wn.model.Book; 10 11 @Service 12 public class BookService { 13 @Autowired 14 private BookDao bookDao; 15 16 // 添加 17 public boolean addBook(String bookName, String author, Date publishDate) { 18 Book book = new Book(); 19 book.setBookName(bookName); 20 book.setAuthor(author); 21 book.setPublishDate(publishDate); 22 23 return bookDao.add(book); 24 } 25 26 // 显示 27 public Book getBook(Integer id) { 28 return bookDao.selectById(id); 29 } 30 31 // 删除 32 public boolean deleteBook(Integer id) { 33 return bookDao.deleteById(id); 34 } 35 36 // 修改 37 public boolean updateBook(Integer id, String bookName, String author, Date publishDate) { 38 Book book = getBook(id); 39 book.setBookName(bookName); 40 book.setAuthor(author); 41 book.setPublishDate(publishDate); 42 43 return bookDao.updateById(book); 44 } 45 }
3、BookController
1 package com.wn.controller; 2 3 import java.text.ParseException; 4 import java.util.Date; 5 6 import org.apache.commons.lang3.time.DateFormatUtils; 7 import org.apache.commons.lang3.time.DateUtils; 8 import org.springframework.beans.factory.annotation.Autowired; 9 import org.springframework.format.annotation.DateTimeFormat; 10 import org.springframework.web.bind.annotation.PathVariable; 11 import org.springframework.web.bind.annotation.RequestMapping; 12 import org.springframework.web.bind.annotation.RequestMethod; 13 import org.springframework.web.bind.annotation.RequestParam; 14 import org.springframework.web.bind.annotation.RestController; 15 16 import com.wn.model.Book; 17 import com.wn.resp.BookResp; 18 import com.wn.service.BookService; 19 20 @RestController 21 @RequestMapping("/book") 22 public class BookController { 23 @Autowired 24 private BookService bookService; 25 26 // 添加 27 @RequestMapping(value = "/add", method = RequestMethod.POST) 28 public boolean addBook(@RequestParam("bookName") String bookName, @RequestParam("author") String author, 29 @RequestParam("publishDate") String publishDateStr) { 30 try { 31 Date publishDate = DateUtils.parseDate(publishDateStr, "yyyy-MM-dd HH:mm:ss"); 32 return bookService.addBook(bookName, author, publishDate); 33 } catch (ParseException e) { 34 e.printStackTrace(); 35 } 36 return false; 37 } 38 39 @RequestMapping(value = "/add2", method = RequestMethod.POST) 40 public boolean addBook2(@RequestParam("bookName") String bookName, @RequestParam("author") String author, 41 @RequestParam("publishDate") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date publishDate) { 42 return bookService.addBook(bookName, author, publishDate); 43 } 44 45 // 显示 46 @RequestMapping(value = "/{id}", method = RequestMethod.GET) 47 public BookResp getBook(@PathVariable("id") Integer id) { 48 Book book = bookService.getBook(id); 49 String dateStr = DateFormatUtils.format(book.getPublishDate(), "yyyy-MM-dd HH:mm:ss"); 50 BookResp resp = new BookResp(); 51 resp.setId(book.getId()); 52 resp.setAuthor(book.getAuthor()); 53 resp.setBookName(book.getBookName()); 54 resp.setPublishDate(dateStr); 55 return resp; 56 } 57 58 // 删除 被注释的是删除方法一 59 // @RequestMapping(value = "/delete", method = RequestMethod.DELETE) 60 // public boolean deleteBook(@RequestParam("id") Integer id) { 61 // return bookService.deleteBook(id); 62 // } 63 64 @RequestMapping(value = "/delete/{id}", method = RequestMethod.DELETE) 65 public boolean deleteBook(@PathVariable("id") Integer id) { 66 return bookService.deleteBook(id); 67 } 68 69 // 修改 70 @RequestMapping(value = "/update", method = RequestMethod.PUT) 71 public boolean updateBook(@RequestParam("id") Integer id, @RequestParam("bookName") String bookName, 72 @RequestParam("author") String author, 73 @RequestParam("publishDate") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date publishDate) { 74 return bookService.updateBook(id, bookName, author, publishDate); 75 } 76 }
为了解决日期问题
1 package com.wn.resp; 2 3 public class BookResp { 4 private Integer id; 5 6 private String bookName; 7 8 private String author; 9 10 private String publishDate; 11 12 public Integer getId() { 13 return id; 14 } 15 16 public void setId(Integer id) { 17 this.id = id; 18 } 19 20 public String getBookName() { 21 return bookName; 22 } 23 24 public void setBookName(String bookName) { 25 this.bookName = bookName == null ? null : bookName.trim(); 26 } 27 28 public String getAuthor() { 29 return author; 30 } 31 32 public void setAuthor(String author) { 33 this.author = author == null ? null : author.trim(); 34 } 35 36 public String getPublishDate() { 37 return publishDate; 38 } 39 40 public void setPublishDate(String publishDate) { 41 this.publishDate = publishDate; 42 } 43 }
五、浏览器或postman测试(举例用postman测试)
1、添加
成功会返回true
2、显示
成功返回json串:
1 { 2 "id": 3, 3 "bookName": "PE", 4 "author": "dawei", 5 "publishDate": "2014-11-08 11:11:11" 6 }
3、删除
成功返回true,另一种方法如下:
4、修改