SPRING August 20, 2018

Springboot学习

Words count 13k Reading time 12 mins. Read count 0

1利用IDEA创建springboot web 项目

1.1 新建项目

选择spring Initializr,然后点下一步。

1.2填写项目信息

1.3选择项目类型

1.4项目名和项目路径

1.5补充包目录

在com.springboot.demo下创建

controller包

entity包

jpa包

service包

1.6 依赖处理

在pom.xml里导入数据库依赖

<!--数据库相关依赖-->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
</dependency>

1.7项目配置

在resource下新建一个application.yml文件,并删除原有的application.properties文件

application.yml配置文件如下

spring:
 #配置数据库
 datasource:
   driver-class-name: com.mysql.jdbc.Driver
   url: jdbc:mysql://localhost:3306/springboot?useSSL=false
   username: root
   password: inspur
 #配置jpa
 jpa: 
  show-sql: true
  database: mysql
  hibernate:
    ddl-auto: update

2项目开发

2.1编写entity层

User

package com.springboot.demo.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

/**User entity
 * Created by shirukai on 2017/11/19.
 */
@Entity
public class User {
    @Id
    @GeneratedValue
    private Integer id;
    private String userName;
    private String password;
    //创建一个无参的构造方法(必须)
    public User(){}

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

2.2编写jpa

UserRepository

package com.springboot.demo.jpa;

import com.springboot.demo.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;

/**
 * 
 * Created by shirukai on 2017/11/19.
 */
public interface UserRepository extends JpaRepository<User,Integer> {
}

2.3编写service

package com.springboot.demo.service;

import com.springboot.demo.entity.User;

import java.util.List;

/**
 *
 * Created by shirukai on 2017/11/19.
 */
public interface UserService {
    /**
     * 新增用户
     * @param user user
     * @return user
     */
    User insertUser(User user);

    /**
     * 根据id删除用户
     * @param id
     */
    void deleteUser(int id);

    /**
     * 获取所有用户
     * @return
     */
    List<User> getAll();

    /**
     * 更新
     * @param user
     * @return
     */
    User updateUser(User user);

    /**
     * 根据id获取用户信息
     * @param id
     * @return
     */
    User getById(Integer id);
}

2.4编写service实现类

package com.springboot.demo.service.Impl;

import com.springboot.demo.entity.User;
import com.springboot.demo.jpa.UserRepository;
import com.springboot.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 *
 * Created by shirukai on 2017/11/19.
 */
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserRepository userRepository;

    @Override
    public User insertUser(User user) {
        return userRepository.save(user);
    }

    @Override
    public void deleteUser(int id) {
        userRepository.delete(id);
    }

    @Override
    public List<User> getAll() {
        return userRepository.findAll();
    }

    @Override
    public User updateUser(User user) {
        return userRepository.save(user);
    }

    @Override
    public User getById(Integer id) {
        return userRepository.getOne(id);
    }
}

2.5 编写controller

package com.springboot.demo.controller;

import com.springboot.demo.entity.User;
import com.springboot.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * Created by shirukai on 2017/11/19.
 */
@RestController
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping(value = "/insertuser", method = RequestMethod.POST)
    public User insertUser(
            User user
    ) {
        return userService.insertUser(user);
    }

    @RequestMapping(value = "/getAll", method = RequestMethod.GET)
    List<User> getAll() {
        return userService.getAll();
    }

    @RequestMapping(value = "/delete/{id}", method = RequestMethod.DELETE)
    void deleteById(
            @PathVariable("id") Integer id
    ) {
        userService.deleteUser(id);
    }

    @RequestMapping(value = "/update/{id}", method = RequestMethod.PUT)
    public User updateById(
            @PathVariable("id") Integer id,
            @RequestParam("password") String password
    ) {
        User user = userService.getById(id);
        user.setPassword(password);
        return userService.updateUser(user);
    }
}

3 运行 测试

3.1运行DemoApplication的main方法

3.2利用Postman进行测试

3.2.1 新增用户

3.2.2根据id删除用户

3.2.3更新用户

3.2.4获取用户列表

4补充:Controller

4.1 @Controller和@RestController的区别

在之前使用Springmvc的时候,当我们使用@Controller注解的controller层需要返回json数据时,需要在方法的前面加上@ResponseBody。

但是等我们使用RestController注解Controller层时,无需添加@ResponseBody直接就返回json类型的数据。

4.2 @RequestMapping

@RequestMapping是注解在Controller层方法前的。

通俗的讲,在Spring中使用@RequestMapping注解时,当访问指定url时,会调用的相应的方法。

4.3 @RequestMapping六种使用方法

4.3.1 基本的无参方法

@RequestMapping("/login)public String testFunction(){……} 

说明:访问http://localhost/xxxx/login的时候,就会调用testFunction方法

4.3.2 参数绑定

@RequestMapping("/login")public String testFunction(@RequestParam ("userId") String userId){System.out.println("用户id为:"+ userId);}}

说明:/login?userId=12 就可以触发调用testFunction方法

4.3.3 Rest风格的参数

@RequestMapping("/login/{userId}")public String testFunction(@PathVariable String userId){System.out.println("用户id为:"+userId);}

说明:

形如 /login/23 ,其中用PathVariable接受rest风格的参数

4.3.4 Rest风格参数绑定2

@RequestMapping ("/login/{userId}")public String testFunction(@ParhVariable("userId")String someUserId){System.out.println("用户id为:"+someUserId)}

说明:形如/login/23,会把23传入给userId,然后传值绑定给自定义的 someUserId,

在实际方法中调用someUserId值为23.

4.3.4 Url中同时绑定多个id

    @RequestMapping("/login/{userId}/password/{passwordId}")
    public String testFunction(@PathVariable String userId, @PathVariable String passwordId) {
        System.out.println("用户名Id:" + userId);
        System.out.println("密码Id:" + passwordId);
    }

说明:形如/login/23/password/46 ,调用testFunction方法,赋值给userId=23,passwordId=46

4.3.5 支持正则表达式

    @RequestMapping("/{textualPart:[a-z-]+}.{numericPart:[\d]+}")
    public String testFunction(@PathVariable String textualPart, @pathVariable String numericPart) {
        System.out.println("Textual part:" + textualPart + ",numeric part:" + numericPart);
    }

说明:形如/sometext.123则输出Textual part: sometext, numeric part: 123.

4.4 @GetMapping、@PostMapping

@GetMapping(“/get”) 相当于 @RequestMapping(value=”/get”,method.RequestMethod.GET)

@PostMapping (“/post”)相当于@RequestMapping(value=”/post”,method.RequestMethod.POST)

4.5 处理参数

4.5.1 @PathVariable

获取url里的参数,例如:

@RequestMapping(“/login/{userId}/password/{passwordId}”)

4.5.2 @RequetParam

获取请求中的参数

5 补充:Spring-Data-Jpa

6 补充:Springboot 通用配置、开发、生产环境配置

有时候,我们需要两套配置,比如开发的时候是一个配置,生产的时候是一个配置。这样我们就需要对Springboot的配置进行改造了。

首先复制原来的配置文件同样粘贴到相同目录下并且重名为application-dev.yml

然后在复制原来的配置文件,重名为application-pro.yml

最后清空application.yml里的配置,并添加如下内容:

spring:
  profiles:
   active: dev

active后为dev说明用的是application-dev.yml配置文件,如果改为pro则使用的是application-pro.yml文件

0%