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)功能的更多相关文章

  1. spring boot实现ssm(1)功能

    前面完成了ssm的整合, 整个过程可以说很繁杂, 各种配置, 很容易让人晕掉. 这里使用spring boot 的方式来实现ssm(1)中的功能. 一. 建项目 1. 使用 idea 来创建 spri ...

  2. 自我救赎 → 利用 IDEA 和 Spring Boot 搭建 SSM

    前言 开心一刻 儿子读高中放学回来了,一向不管他学习的我突然来了兴趣,想看看他的学习他的状况,抄起他的数学习题看了起来,当看到 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x ...

  3. spring Boot 简单的登录功能,利用了jdbcTemplate.class完成sql语句的执行,无需service层、dao层和.xml文件

    1.搭建SpringBoot项目首先我们先在IDEA上创建一个SpringBoot的Web项目(1)file ——> new ——> project——> Spring Initia ...

  4. spring boot集成spring-boot-starter-mail邮件功能

    前情提要 以目前IT系统功能来看,邮件功能是非常重要的一个功能.例如:找回密码.邮箱验证,邮件动态码.忘记密码,邮件营销等,都需要用到邮件功能.结合当下最流行的spring boot微服务,推出了sp ...

  5. Spring Boot 实现看门狗功能 (调用 Shell 脚本)

    需要实现看门狗功能,定时检测另外一个程序是否在运行,使用 crontab 仅可以实现检测程序是否正在运行,无法做到扩展,如:手动重启.程序升级(如果只需要实现自动升级功能可以使用 inotify)等功 ...

  6. spring boot 开启Druid监控功能

    1.配置yml spring: datasource: # 数据源基本配置 username: song password: 123456 driver-class-name: com.mysql.j ...

  7. Spring Boot Admin 日志查看功能

    按照官方配置POM和配置文件后,能够结合Eureka查看各微服务状态,但是日志始终查看不了,出现406等错误. 最后偶然发现,是在在从官方网站拷贝配置的时候,出现的问题. logging.file=* ...

  8. [Spring Boot 系列] 集成maven和Spring boot的profile功能

    由于项目的需要, 今天给spirng boot项目添加了profile功能.再网上搜索了一圈,也没有找到满意的参考资料,其实配置并不难,就是没有一个one stop(一站式)讲解的地方,所以有了写这篇 ...

  9. Spring Boot入门(11)实现文件下载功能

      在这篇博客中,我们将展示如何在Spring Boot中实现文件的下载功能.   还是遵循笔者写博客的一贯风格,简单又不失详细,实用又能让你学会.   本次建立的Spring Boot项目的主要功能 ...

随机推荐

  1. (转)Application, Session, Cookie, Viewstate, Cache对象用法和区别

    ================================================================================         1.Applicati ...

  2. (最大m子段和) Max Sum Plus Plus (Hdu 1024)

    http://acm.hdu.edu.cn/showproblem.php?pid=1024     Max Sum Plus Plus Time Limit: 2000/1000 MS (Java/ ...

  3. web-day15

    第15章WEB15-AJAX和JQuery案例篇 今日任务 使用AJAX完成用户名的异步校验 使用JQuery完成用户名异步校验 使用JQuery完成商品信息模糊显示 使用JQuery完成省市联动效果 ...

  4. 安装部署Ceph Calamari

    根据http://ovirt-china.org/mediawiki/index.php/%E5%AE%89%E8%A3%85%E9%83%A8%E7%BD%B2Ceph_Calamari 原文如下: ...

  5. Android-Kotlin-抽象类与多态的表现

    选择包名,然后右键: 选择Class类型,会有class:  选择File类型,不会自动有class: 目录结构: 定义描述抽象类 Person人类: package cn.kotlin.kotlin ...

  6. Android-Java-同步方法-synchronized

    1.方法具有封装性: /** * 1.方法具有封装性: */ public void addMoney(double moneyAsset) { this.moneyAsset += moneyAss ...

  7. Network in Network 2

    <Network in Network>论文笔记 1.综述 这篇文章有两个很重要的观点: 1×1卷积的使用 文中提出使用mlpconv网络层替代传统的convolution层.mlp层实际 ...

  8. Power BI Embedded 与 Bot Framework 结合的AI报表系统

    最近最热门的话题莫过于AI了,之前我做过一片讲 BOTFRAMEWORK和微信 相结合的帖子 如何将 Microsoft Bot Framework 链接至微信公共号 我想今天基于这个题目扩展一下,P ...

  9. CentOS 7通过Firewall开放防火墙端口

    发现在CentOS 7上开放端口用iptables没效果(或者是sodino没找到正确的命令,传说Centos7 下默认的防火墙是 Firewall,替代了之前的 iptables)… 使用firew ...

  10. wpf 水波进度条 用户控件

    之前看公司web前端做了个 圆形的水波纹 进度条,就想用wpf 做一个,奈何自己太菜 一直做不出来,在看过 “普通的地球人” 的 “ WPF实现三星手机充电界面 博客之后 我也来照葫芦画个瓢. 废话不 ...