spring boot实现ssm(2)功能
spring 和 mybatis 整合的那篇: ssm(2) . 配置文件比ssm(1) 更多, 在做项目的时候, 配置文件是一个让人头大的事情.
那么在spring boot中, 实现相同功能, 需不需要做那么多配置呢.
一. 从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">
<modelVersion>4.0.0</modelVersion> <groupId>org.elvin</groupId>
<artifactId>boot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging> <name>boot</name>
<description>Demo project for Spring Boot</description> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency> <!--view : thymeleaf模板-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency> <!--db : 数据库相关-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency> <!--tools : joda-time-->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.6</version>
</dependency>
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> </project>
pom.xml文件, 直观的感觉, 就是非常的短, 非常的少. 简洁
二. 配置文件
#配置项目端口和根路径
server:
port: 8080
context-path: /boot spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql:///test?useUnicode=true&characterEncoding=utf-8
username: root
password: root
jpa:
hibernate:
ddl-auto: update
show-sql: true
thymeleaf:
cache: false
logging:
level: warn
file: ./boot.log
三. 实体类
package org.elvin.boot.pojo; import javax.persistence.*; /**
* author: Elvin
* Date: 2017/12/4 15:37
* Description:
*/
@Entity
@Table(name="book")
public class Book { @Id
@GeneratedValue
private Integer id; private String name; private String publishTime; private Integer price; @Override
public String toString() {
return "Book{" +
"id=" + id +
", name='" + name + '\'' +
", publishTime='" + publishTime + '\'' +
", price=" + price +
'}';
} public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getPublishTime() {
return publishTime;
} public void setPublishTime(String publishTime) {
this.publishTime = publishTime;
} public Integer getPrice() {
return price;
} public void setPrice(Integer price) {
this.price = price;
}
}
通过注解, 可以映射到数据中的表. 由于在前面设置了 ddl-auto:update , 那么在每次启动的时候, 都会去检测数据库, 是否有这张表, 如果没有, 则会新增, 如果有, 则会修改表.
四. Repository
package org.elvin.boot.repository; import org.elvin.boot.pojo.Book;
import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; /**
* author: Elvin
* Date: 2017/12/5 16:58
* Description:
*/
public interface BookRepository extends JpaRepository<Book, Integer> {
/*
@Query()
public Page<Book> myQuery();*/
}
这里使用的并不是 mybatis 的写sql的方式, 但是很大一部分的表操作, jpa 标准 都可以完成, 如果想写自定义sql, 可以通过方法上加 @Query 注解的方式来写.
五. service 和实现类
package org.elvin.boot.service; import org.elvin.boot.pojo.Book; import java.util.List; public interface BookService { public List<Book> findAll(); public Book findOne(Integer id); public void put(Book book); public void remove(Integer id); }
package org.elvin.boot.serviceimpl; import org.elvin.boot.pojo.Book;
import org.elvin.boot.pojo.PageInfo;
import org.elvin.boot.repository.BookRepository;
import org.elvin.boot.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Service; import java.util.List; /**
* author: Elvin
* Date: 2017/12/5 17:03
* Description:
*/
@Service
public class BookServiceImpl implements BookService { @Autowired
private BookRepository bookRepository; @Override
public List<Book> findAll(){
List<Book> list = bookRepository.findAll();
return list;
} @Override
public Book findOne(Integer id){
Book book = bookRepository.findOne(id);
return book;
} @Override
public void put(Book book) {
bookRepository.save(book);
} @Override
public void remove(Integer id) {
bookRepository.delete(id);
} }
put在这里, 承担 新增 和 修改 的责任. 不管是新增还是修改, 都是调用的 jpa的save方法.
区别在于, 是否传入了id.
没有传id -> 直接新增
传入了id -> 根据id进行查询 -> 没有数据 -> 新增
|-> 有数据 -> 修改
六. controller
返回数据格式, 稍微做了一下封装.
package org.elvin.boot.pojo; public interface ResStatus {
String SUCCESS = "success";
String FAIL = "fail";
String ERROR = "error";
}
package org.elvin.boot.pojo; /**
* author: Elvin
* Date: 2017/12/6 10:40
* Description:
*/
public class ResObj {
private String msg; private Integer Code; private Object obj; public ResObj() {
} public ResObj(String msg, Integer code, Object obj) {
this.msg = msg;
Code = code;
this.obj = obj;
} @Override
public String toString() {
return "ResObj{" +
"msg='" + msg + '\'' +
", Code=" + Code +
", obj=" + obj +
'}';
} public String getMsg() {
return msg;
} public void setMsg(String msg) {
this.msg = msg;
} public Integer getCode() {
return Code;
} public void setCode(Integer code) {
Code = code;
} public Object getObj() {
return obj;
} public void setObj(Object obj) {
this.obj = obj;
}
}
再来看controller.
package org.elvin.boot.controller; import org.elvin.boot.pojo.Book;
import org.elvin.boot.pojo.ResObj;
import org.elvin.boot.pojo.ResStatus;
import org.elvin.boot.service.BookService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; /**
* author: Elvin
* Date: 2017/12/6 10:36
* Description:
*/
@RestController
@RequestMapping("third")
public class ThirdController { private Logger logger = LoggerFactory.getLogger(ThirdController.class); @Autowired
private BookService bookService; @PostMapping("put")
public ResObj put(Book book){
ResObj res = new ResObj(ResStatus.FAIL, 0, null);
try{
bookService.put(book);
res.setMsg(ResStatus.SUCCESS);
res.setCode(1);
res.setObj(book);
}
catch (Exception e){
logger.error(e.getMessage());
} return res;
} @PostMapping("delete/{id}")
public ResObj delete(@PathVariable Integer id){
ResObj res = new ResObj(ResStatus.FAIL, 0, null);
try{
bookService.remove(id);
res.setMsg(ResStatus.SUCCESS);
res.setCode(1);
}
catch (Exception e){
logger.error(e.getMessage());
} return res;
} @RequestMapping(value = "getAll", method = {RequestMethod.GET, RequestMethod.POST })
public ResObj getAll(){
ResObj res = new ResObj(ResStatus.FAIL, 0, null);
try{
res.setObj(bookService.findAll());
res.setMsg(ResStatus.SUCCESS);
res.setCode(1);
}
catch (Exception e){
logger.error(e.getMessage());
} return res;
} @RequestMapping(value = "getById/{id}", method = {RequestMethod.GET, RequestMethod.POST })
public ResObj getById(@PathVariable Integer id){
ResObj res = new ResObj("fail", 0, null);
try{
res.setObj(bookService.findOne(id));
res.setMsg(ResStatus.SUCCESS);
res.setCode(1); /*int a = 0;
int c = 1 / a;*/
}
catch (Exception e){
logger.error(e.getMessage());
} return res;
}
}
七. 结果
首先新增一条数据, 然后再查询出来, 没有啥问题. 然后调用同样的方法, 修改数据
spring boot实现ssm(2)功能的更多相关文章
- spring boot实现ssm(1)功能
前面完成了ssm的整合, 整个过程可以说很繁杂, 各种配置, 很容易让人晕掉. 这里使用spring boot 的方式来实现ssm(1)中的功能. 一. 建项目 1. 使用 idea 来创建 spri ...
- 自我救赎 → 利用 IDEA 和 Spring Boot 搭建 SSM
前言 开心一刻 儿子读高中放学回来了,一向不管他学习的我突然来了兴趣,想看看他的学习他的状况,抄起他的数学习题看了起来,当看到 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x ...
- spring Boot 简单的登录功能,利用了jdbcTemplate.class完成sql语句的执行,无需service层、dao层和.xml文件
1.搭建SpringBoot项目首先我们先在IDEA上创建一个SpringBoot的Web项目(1)file ——> new ——> project——> Spring Initia ...
- spring boot集成spring-boot-starter-mail邮件功能
前情提要 以目前IT系统功能来看,邮件功能是非常重要的一个功能.例如:找回密码.邮箱验证,邮件动态码.忘记密码,邮件营销等,都需要用到邮件功能.结合当下最流行的spring boot微服务,推出了sp ...
- Spring Boot 实现看门狗功能 (调用 Shell 脚本)
需要实现看门狗功能,定时检测另外一个程序是否在运行,使用 crontab 仅可以实现检测程序是否正在运行,无法做到扩展,如:手动重启.程序升级(如果只需要实现自动升级功能可以使用 inotify)等功 ...
- spring boot 开启Druid监控功能
1.配置yml spring: datasource: # 数据源基本配置 username: song password: 123456 driver-class-name: com.mysql.j ...
- Spring Boot Admin 日志查看功能
按照官方配置POM和配置文件后,能够结合Eureka查看各微服务状态,但是日志始终查看不了,出现406等错误. 最后偶然发现,是在在从官方网站拷贝配置的时候,出现的问题. logging.file=* ...
- [Spring Boot 系列] 集成maven和Spring boot的profile功能
由于项目的需要, 今天给spirng boot项目添加了profile功能.再网上搜索了一圈,也没有找到满意的参考资料,其实配置并不难,就是没有一个one stop(一站式)讲解的地方,所以有了写这篇 ...
- Spring Boot入门(11)实现文件下载功能
在这篇博客中,我们将展示如何在Spring Boot中实现文件的下载功能. 还是遵循笔者写博客的一贯风格,简单又不失详细,实用又能让你学会. 本次建立的Spring Boot项目的主要功能 ...
随机推荐
- (转)忘记wamp-mysql数据库root用户密码重置方法
转自:http://www.jb51.net/article/28883.htm 1.打开任务管理器,结束进程 mysqld-nt.exe . 2.运行命令窗口 1)进行php服务管理器安装目录中的 ...
- 如何更改linux文件的拥有者及用户组(chown和chgrp)
http://blog.csdn.net/hudashi/article/details/7797393 一.基本知识 在Linux中,创建一个文件时,该文件的拥有者都是创建该文件的用户.该文件用 ...
- XXX is not mapped
这个问题绊了我两次跟头,作为一个3年多开发经验的人,甚是尴尬 java.lang.IllegalArgumentException: org.hibernate.hql.ast.QuerySyntax ...
- POJ3104--Drying(Binary Search)
It is very hard to wash and especially to dry clothes in winter. But Jane is a very smart girl. She ...
- POJ2385--Apple Catching(动态规划)
It is a little known fact that cows love apples. Farmer John has two apple trees (which are convenie ...
- Django URLs error: view must be a callable or a list/tuple in the case of include()
Django 1.10 no longer allows you to specify views as a string (e.g. 'myapp.views.home') in your URL ...
- 13.2.DataGrid增、删、改、查后台实现
一.UserServlet: 二:Dao接口: 三:Dao接口的实现类:
- 二分图学习——基础dfs判断二分图
#include <iostream> #include <cstdio> #include <string.h> #include <vector> ...
- 关于DFS和BFS的理解 以及坐标的定义
http://blog.csdn.net/bool_isprime/article/details/5803018DFS: 1: 坐标类型搜索 :这种类型的搜索题目通常来说简单的比较简单,复杂的通常在 ...
- Android-Java-Lock
此篇博客已售票例子为例,所以首先看一个synchronized(同步锁机制)的案例 synchronized(同步锁机制)的案例 package android.java.thread19; /** ...