三沣开发知识 购物 网址 游戏 小说 歌词 地图 快照 开发 股票 美女 新闻 笑话 | 汉字 软件 日历 阅读 下载 图书馆 编程 租车 短信 China
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
vbs/VBScript DOS/BAT hta htc python perl 游戏相关 VBA 远程脚本 ColdFusion ruby专题
autoit seraphzone PowerShell linux shell Lua Golang Erlang 其它教程 CSS/HTML/Xhtml
html5 CSS XML/XSLT Dreamweaver教程 经验交流 开发者乐园 Android开发资料
站长资讯 .NET新手 ASP.NET C# WinForm Silverlight WCF CLR WPF XNA VisualStudio ASP.NET-MVC .NET控件开发 EntityFramework WinRT-Metro Java C++ PHP Delphi Python Ruby C语言 Erlang Go Swift Scala R语言 Verilog 其它语言 架构设计 面向对象 设计模式 领域驱动 Html-Css JavaScript jQuery HTML5 SharePoint GIS技术 SAP OracleERP DynamicsCRM K2 BPM 信息安全 企业信息 Android开发 iOS开发 WindowsPhone WindowsMobile 其他手机 敏捷开发 项目管理 软件工程 SQLServer Oracle MySQL NoSQL 其它数据库 Windows7 WindowsServer Linux
  IT知识库 -> 架构设计 -> spring boot实现ssm(2)功能 -> 正文阅读
 

[架构设计]spring boot实现ssm(2)功能

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)功能
java 企业站源码 兼容手机平板PC 自适应响应
Serverless无服务应用架构纵横谈
理论篇:关注点分离(Separation of concern
Struts 2 入门
spring boot实现ssm(1)功能
孢子框架(微服务)成熟度模型.
ABP(现代ASP.NET样板开发框架)系列之23、AB
搭建JEESZ分布式架构10
java快速开发平台源码
上一篇文章           查看所有文章
加:2017-12-09 23:29:37  更:2017-12-09 23:29:40 
 
技术频道: 站长资讯 .NET新手区 ASP.NET C# WinForm Silverlight WCF CLR WPF XNA Visual Studio ASP.NET MVC .NET控件开发 Entity Framework WinRT/Metro Java C++ PHP Delphi Python Ruby C语言 Erlang Go Swift Scala R语言 Verilog 其它语言 架构设计 面向对象 设计模式 领域驱动设计 Html/Css JavaScript jQuery HTML5 SharePoint GIS技术 SAP Oracle ERP Dynamics CRM K2 BPM 信息安全 企业信息化其他 Android开发 iOS开发 Windows Phone Windows Mobile 其他手机开发 敏捷开发 项目与团队管理 软件工程其他 SQL Server Oracle MySQL NoSQL 其它数据库 Windows 7 Windows Server Linux
脚本语言: vbs/VBScript DOS/BAT hta htc python perl 游戏相关 VBA 远程脚本 ColdFusion ruby专题 autoit seraphzone PowerShell linux shell Lua Golang Erlang 其它教程
网站开发: CSS/HTML/Xhtml html5 CSS XML/XSLT Dreamweaver教程 经验交流 开发者乐园 Android开发资料
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 美食菜谱 新闻资讯 电影视频 小游戏 Chinese Culture 股票 租车
生肖星座 三丰软件 视频 开发 短信 中国文化 网文精选 搜图网 美图 阅读网 多播 租车 短信 看图 日历 万年历 2018年5日历
2018-5-25 18:36:19
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT知识库