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;
    }
}

七. 结果

首先新增一条数据, 然后再查询出来, 没有啥问题. 然后调用同样的方法, 修改数据

时间: 2024-10-23 19:39:53

spring boot实现ssm(2)功能的相关文章

spring boot 开启Druid监控功能

1.配置yml 1 spring: 2 datasource: 3 # 数据源基本配置 4 username: song 5 password: 123456 6 driver-class-name: com.mysql.jdbc.Driver 7 url: jdbc:mysql://39.106.222.34:3306/mybatis 8 type: com.alibaba.druid.pool.DruidDataSource 9 # 数据源其他配置 10 initialSize: 5 11

集成maven和Spring boot的profile功能

思路:maven支持profile功能,当使用maven profile打包时,可以打包指定目录和指定文件,且可以修改文件中的变量.spring boot也支持profile功能,只要在application.properties文件中指定spring.profiles.active=xxx 即可,其中xxx是一个变量,当maven打包时,修改这个变量即可. 1.配置maven 的profile <!-- 不同环境查找不同配置文件 --> <profiles> <profil

Spring Boot入门(10)实现文件下载功能

??在这篇博客中,我们将展示如何在Spring Boot中实现文件的下载功能. ??还是遵循笔者写博客的一贯风格,简单又不失详细,实用又能让你学会. ??本次建立的Spring Boot项目的主要功能为文件下载,而且这也是唯一功能,当然,作为例子,要尽可能简单,所以,功能简化为只下载E盘music_eg目录下的某一个文件. ??该Spring Boot项目的名称为file_download,其具体结构如下: build.gradle文件的代码如下: buildscript { ext { spr

Spring Boot 学习笔记1---初体验之3分钟启动你的Web应用

前言 早在去年就简单的使用了一下Spring Boot,当时就被其便捷的功能所震惊.但是那是也没有深入的研究,随着其在业界被应用的越来越广泛,因此决定好好地深入学习一下,将自己的学习心得在此记录,本文主要围绕以下几点进行说明: Spring Boot 简介 使用Spring Boot快速搭建一个Web应用如有不对的地方,请指正. 1. Spring Boot简介 Spring Boot是一个基于Spring的衍生框架,其主要的目的是帮助我们快速构建独立.生产级别的Spring的应用,其崇尚的理念

Spring boot 提高篇

Spring boot 提高篇 上篇文章介绍了Spring boot初级教程:构建微服务:Spring boot 入门篇,方便大家快速入门.了解实践Spring boot特性:本篇文章接着上篇内容继续为大家介绍spring boot的其它特性(有些未必是spring boot体系桟的功能,但是是spring特别推荐的一些开源技术本文也会介绍),对了这里只是一个大概的介绍,特别详细的使用我们会在其它的文章中来展开说明. github博文地址,阅读更佳 web开发 spring boot web开发

Spring boot(4)-应用打包部署

摘自: http://blog.csdn.net/hguisu/article/details/51072683 1.Spring Boot内置web spring Boot 其默认是集成web容器的,启动方式由像普通Java程序一样,main函数入口启动.其内置Tomcat容器或Jetty容器,具体由配置来决定(默认Tomcat).当然你也可以将项目打包成war包,放到独立的web容器中(Tomcat.weblogic等等),当然在此之前你要对程序入口做简单调整. 对server的几个常用的配

Spring Boot 探索系列 - 自动化配置篇

26. Logging Prev  Part IV. Spring Boot features  Next 26. Logging Spring Boot uses Commons Logging for all internal logging, but leaves the underlying log implementation open. Default configurations are provided for Java Util Logging,Log4J, Log4J2 an

Spring Boot中使用AOP统一处理Web请求日志

AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是Spring框架中的一个重要内容,它通过对既有程序定义一个切入点,然后在其前后切入不同的执行内容,比如常见的有:打开数据库连接/关闭数据库连接.打开事务/关闭事务.记录日志等.基于AOP不会破坏原来程序逻辑,因此它可以很好的对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率.

161103、Spring Boot 入门

Spring Boot 入门 spring Boot是Spring社区较新的一个项目.该项目的目的是帮助开发者更容易的创建基于Spring的应用程序和服务,让更多人的人更快的对Spring进行入门体验,让Java开发也能够实现Ruby on Rails那样的生产效率.为Spring生态系统提供了一种固定的.约定优于配置风格的框架. Spring Boot具有如下特性: 为基于Spring的开发提供更快的入门体验 开箱即用,没有代码生成,也无需XML配置.同时也可以修改默认值来满足特定的需求. 提