之前使用SSM+Maven写后端的接口,创建了不少Maven工程。一开始还觉得SSM+Maven是十分简便的,但是后来审美疲劳,渐渐感觉这种固定化地创建NewMavenProject是一件体力操作。
比如那些wexml、dispatch-Servlet.xml、applicationContext.xml、mybatis-confixml等大同小异,一开始还会老老实实从0开始写,后来烦了直接复制粘贴之前的代码。
SpringBoot就解决这个硬伤,很快建立工程,使用SpringData封装数据库访问层基本CURD接口,一个简单的applicatioyml配置就搞定前面的所有配置,一手轻巧的注解取代了之前大量的代码。这次根据SpringBoot官方API文档等,测试一下基于SpringBoot的CURD,同时启用Restful风格,编写起代码来,十分具有美感~
RESTfulAPI:RESTfulAPI目前是前后端分离最佳实践轻量,直接通过http,不需要额外的协议面向资源,一目了然,具有自解释性数据描述简单,一般通过json或xml做数据通信
依旧是简单的CRUD,后台的基本
代码结构
总体来说,还是采用了标准的编程模式,建立entity、dao、service、controller包进行分类包装,部分接口采用interface+implements。命名方面也有注意。代码应该是很规范的。
实体
package com.cun.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.validator.constraints.NotEmpty;
@Entity // 实体
@Table(name = 't_student') // 数据库表名
public class Student {
@Id // 主键
@GeneratedValue // 自增
private Integer id;
@NotEmpty(message = '学生姓名不能为空') // 表单验证
@Column(length = 20) // 字段长度
private String t_name;
@Column(length = 20) // 字段长度
private String major;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getT_name() {
return t_name;
}
public void setT_name(String t_name) {
this.t_name = t_name;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
}
dao接口实现类都不用写了,SpringData-JPA自动帮你实现,里边虽然空空,但是单表基本CRUD接口都写好了
package com.cun.dao;
import org.springframework.data.jpa.repository.JpaRepository;
import com.cun.entity.Student;
/**
* 简单的dao层只需要继承JpaRepository接口,即可,
* 两个参数,分别表示 —— 实体类型、主键类型
* 复杂sql语句再自己增加接口
* @author linhongcun
*
*/
public interface StudentDao extends JpaRepository{
}
事务处接口
package com.cun.service;
import java.util.List;
import com.cun.entity.Student;
public interface StudentService {
public void addStudent(Student student);
public void deleteStudent(Integer id);
public void updateStudent(Student student);
public Student findStudent(Integer id);
public List findAllStudent();
}
事务处接口实现类
package com.cun.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.cun.dao.StudentDao;
import com.cun.entity.Student;
import com.cun.service.StudentService;
@Service
public class StudentServiceImpl implements StudentService {
@Autowired
private StudentDao studentDao;
@Override
public void addStudent(Student student) {
// TODO Auto-generated method stub
studentDao.save(student);
}
@Override
public void deleteStudent(Integer id) {
// TODO Auto-generated method stub
studentDao.delete(id);
}
@Override
public void updateStudent(Student student) {
// TODO Auto-generated method stub
studentDao.save(student);
}
@Override
public Student findStudent(Integer id) {
// TODO Auto-generated method stub
return studentDao.findOne(id);
}
@Override
public List findAllStudent() {
// TODO Auto-generated method stub
return studentDao.findAll();
}
}
控制层
package com.cun.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.cun.entity.Student;
import com.cun.service.StudentService;
//@RestController 代替 @Controller,省略以后的 @ResponseBody
@RestController
@RequestMapping('/student')
public class StudentController {
@Autowired
private StudentService studentservice;
/**
* 显示所有
* url:'http://localhost/student/findall'
*
* @return
*/
@RequestMapping(value = '/findall')
public List findAllStudent() {
return studentservice.findAllStudent();
}
/**
* 查找 restful 风格
* url:'http://localhost/student/findone/1'
*
* @param id
* @return
*/
// == @RequestMapping(value = '/findone/{id}', method = RequestMethod.GET)
@GetMapping('/findone/{id}')
public Student findStudentRestful(@PathVariable('id') Integer id) {
return studentservice.findStudent(id);
}
/**
* 删除 restful 风格
* url:'http://localhost/student/deleteone/4'
* 注意无法通过浏览器的链接来模拟检验,可以通过 jquery的 $.ajax方法,并type='delete'
*
* @param id
*/
// == @RequestMapping(value = '/deleteone/{id}', method = RequestMethod.DELETE)
@DeleteMapping('/deleteone/{id}')
public void deleteStudentRestful(@PathVariable('id') Integer id) {
studentservice.deleteStudent(id);
}
/**
* 增加 restful 风格
* url:'http://localhost/student/addone'
* 通过
接口测试,这里写得有点简陋,不过还是可以正确测试接口写得是否有问题
select request
配置,算是很简单了,下面几个配置是最常用的
server:
port: 80 #为了以后访问项目不用写端口号
context-path: / #为了以后访问项目不用写项目名
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/testspring
username: root
password: 123
jpa:
hibernate:
ddl-auto: update #数据库同步代码
show-sql: true #dao操作时,显示sql语句
在eclipse创建SpringBoot工程时加入以后再加入mysql、jpa、web就好了,并且可以通过Alt+/=>EditStarter加入
小结
SpringBoot官方中文参考文档
【思考:SpringBoot自动配置】这是基于Spring4+版本的采用注解bean的方式进行配置习惯优于配置,自动加载了大量的常用的配置方式,如SpringMVC+Spring,视解析器、控制器等又可更改,如修改SpringMVC,@Configuration+@Bean,修改上述自动配置。
018/8/4更新:RESTful风格理解
本文的接口不是真正意义上的rest风格,具体可以看如下
理解RESTful架构——阮一峰RESTfulAPI设计指南——阮一峰
018/9/5更新:汤小洋SpringBoot0小结
在网上发现了一篇SpringBoot总结得很好的文章,且是最新版本的,而本文是x的,有必要分享【2018版】最新最全的SpringBoot0入门笔记
文章为作者独立观点,不代表股票配资公司观点
游龙2023-05-17
私募做多热情高涨。据第三方机构私募排排网组合大师数据显示,截至5月5日,股票私募仓位指数为33%,相比此前一周略微下降0.27%,这也是年内股票私募仓位指数首次连续两周超过80%。多家私募表示,市场做多情绪及风险偏好正逐步回暖,机构投资者普遍看好后市行情。阿汤哥2023-04-01
所谓的概念就是庄家的道贝,庄就是用道具玩木偶或用道具玩魔术直接骗小散。股票里的每一分钱不是天上跌下来的,你赢的就总得有个二哈为这埋单。股币里没有全部赢,也没有全部输。你想赚别人的今浅,别人更想赚你的钱