《SpringBoot》学习笔记-1

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/girlgolden/article/details/82866752
  1. 加入maven依赖包
        <dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.49</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-jdbc -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
			<version>2.0.5.RELEASE</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>8.0.12</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-redis -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-redis</artifactId>
			<version>1.4.7.RELEASE</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
			<version>2.0.5.RELEASE</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>2.9.7</version>
		</dependency>

2. 配置mysql和jdbc参数(在application.properties中添加)

# mysql properties
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/lcntest?serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=qwerty
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.jdbc-interceptors=ConnectionState;SlowQueryReport(threshold=0)

# Specify the DBMS
spring.jpa.database = MYSQL
# Show or not log for each sql query
spring.jpa.show-sql = true
# Hibernate ddl auto (create, create-drop, update)
spring.jpa.hibernate.ddl-auto = update
# Naming strategy
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy

# stripped before adding them to the entity manager)
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect

3.  配置日志

  • 创建logFile文件夹,并在resources文件夹下创建logback.xml文件。

最后项目结构如下:

  • logback.xml文件内容如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration debug="false">
        <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
        <property name="LOG_HOME" value="demo/Java/location-scenario-process/logFile" />
        <!-- 控制台输出 -->
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            </encoder>
        </appender>
        <!-- 按照每天生成日志文件 -->
        <appender name="FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender">
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!--日志文件输出的文件名-->
                <FileNamePattern>${LOG_HOME}/location-scenario-process.log.%d{yyyy-MM-dd}.log</FileNamePattern>
                <!--日志文件保留天数-->
                <MaxHistory>30</MaxHistory>
            </rollingPolicy>
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            </encoder>
            <!--日志文件最大的大小-->
            <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                <MaxFileSize>10MB</MaxFileSize>
            </triggeringPolicy>
        </appender>
        <!-- show parameters for hibernate sql 专为 Hibernate 定制 -->
        <logger name="org.hibernate.type.descriptor.sql.BasicBinder"  level="TRACE" />
        <logger name="org.hibernate.type.descriptor.sql.BasicExtractor"  level="DEBUG" />
        <logger name="org.hibernate.SQL" level="DEBUG" />
        <logger name="org.hibernate.engine.QueryParameters" level="DEBUG" />
        <logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" />
    
        <!--myibatis log configure-->
        <logger name="com.apache.ibatis" level="TRACE"/>
        <logger name="java.sql.Connection" level="DEBUG"/>
        <logger name="java.sql.Statement" level="DEBUG"/>
        <logger name="java.sql.PreparedStatement" level="DEBUG"/>
    
        <!-- 日志输出级别 -->
        <root level="INFO">
            <appender-ref ref="STDOUT" />
            <appender-ref ref="FILE" />
        </root>
        <!--日志异步到数据库 -->
        <!--<appender name="DB" class="ch.qos.logback.classic.db.DBAppender">-->
        <!--&lt;!&ndash;日志异步到数据库 &ndash;&gt;-->
        <!--<connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">-->
        <!--&lt;!&ndash;连接池 &ndash;&gt;-->
        <!--<dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource">-->
        <!--<driverClass>com.mysql.jdbc.Driver</driverClass>-->
        <!--<url>jdbc:mysql://127.0.0.1:3306/databaseName</url>-->
        <!--<user>root</user>-->
        <!--<password>root</password>-->
        <!--</dataSource>-->
        <!--</connectionSource>-->
        <!--</appender>-->
    </configuration>

4. 创建UserInfo实体(相当于创建表user_info)

package com.example.locationscenarioprocess.entity;


import org.springframework.stereotype.Component;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import java.util.Date;

@Entity
@Component
public class UserInfo {
    public UserInfo() {
    }

    @Id
    @GeneratedValue
    private  Long id; //ID
    @Column(nullable = true)
    private  String name; //姓名
    @Column(nullable = true)
    private  String jobNumber; //工号
    private Date createTime; //创建时间
// 一下对任意字段的get或set方法不能漏一个,否则会导致无法写入或返回

    @Override
    public String toString() {
        return String.format(
                "UserInfo [id=%d, name='%s', jobNumber='%s', createTime='%s']",
                id, name, jobNumber, createTime);
    }
    public Long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


    public String getJobNumber() {
        return this.jobNumber;
    }

    public void setJobNumber(String jobNumber) {
        this.jobNumber = jobNumber;
    }

    public Date getCreateTime() {
        return this.createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }


}

4. 定义UserRepository(继承自JpaRepositiory)

package com.example.locationscenarioprocess.repository;

import com.example.locationscenarioprocess.entity.UserInfo;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;


public interface UserRepository extends JpaRepository<UserInfo,Long> {
    Page<UserInfo> findAll(Pageable pageable);
    UserInfo findByName(String name); //如果查到多个结果,会报错;返回的只能是一个实体对象
    List<UserInfo> findAllByName(String name); //findFirstBy......等方法
    void deleteById(Long id);
}

5. 写一个提供UserService的接口

package com.example.locationscenarioprocess.service;

import com.example.locationscenarioprocess.entity.UserInfo;
import org.springframework.data.domain.Page;

import java.util.List;

public interface UserService {
    List<UserInfo> getUserList();
    UserInfo getUserByName(String name);
    List<UserInfo>getUsersByName(String name);
    Page<UserInfo> getPageUserList(Integer pageSize, Integer pageNum);
    UserInfo addUserInfo(UserInfo userInfo);
    UserInfo updateUserInfoById(UserInfo userInfo);
    void deleteUserInfoById(Long Id);
}

6. 填写对接口的具体实现UserServiceImpl

package com.example.locationscenarioprocess.service;

import com.example.locationscenarioprocess.entity.UserInfo;
import com.example.locationscenarioprocess.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class UserServiceImpl implements UserService{
    @Autowired
    private UserRepository userRepository;

    /**
     * 获取所有用户列表
     * @return
     */
    public List<UserInfo> getUserList(){
        List<UserInfo> userList=new ArrayList<UserInfo>();
        userList=userRepository.findAll();
        return  userList;
    }

    /**
     * 通过姓名获取用户信息
     * @param name 用户姓名
     * @return
     */
    public UserInfo getUserByName(String name) {
        return userRepository.findByName(name);
    }
    public List<UserInfo> getUsersByName(String name){
        return userRepository.findAllByName(name);
    }

    /**
     * 新增用户信息
     * @param userInfo 用户信息
     * @return
     */
    public UserInfo addUserInfo(UserInfo userInfo) {
        return userRepository.save(userInfo);
    }

    /**
     * 更新用户信息
     * @param userInfo 用户信息
     * @return
     */
    public UserInfo updateUserInfoById(UserInfo userInfo) {
        return userRepository.saveAndFlush(userInfo);
    }

    /**
     * 删除用户信息
     * @param id 主键Id
     */
    public void deleteUserInfoById(Long id) {
        userRepository.deleteById(id);
    }


    /**
     * 分页获取用户信息
     * @return
     */
    public Page<UserInfo> getPageUserList(Integer pageSize,Integer pageNum) {
        Sort sort=new Sort(Sort.Direction.DESC,"createTime");
        Pageable pageable=new PageRequest(pageNum,pageSize,sort);
        return userRepository.findAll(pageable);
    }

}

7. 编写响应web http请求的处理函数

package com.example.locationscenarioprocess.controller;

import com.alibaba.fastjson.JSON;
import com.example.locationscenarioprocess.entity.UserInfo;
import com.example.locationscenarioprocess.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.TimeZone;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@RestController
@RequestMapping(value = "/test")
public class HttpMsgProc {
    private final static Logger logger = LoggerFactory.getLogger(HttpMsgProc.class);

    @Autowired
    private UserInfo userInfo;

    @Resource
    private UserService userService;

    /**
     * 获取所有用户
     *
     * @return
     */
    @GetMapping(value = "/getUserList")
    public List<UserInfo> getUserList() {
        logger.info("[getUserList] " + userService.getUserList().toString() );
        return userService.getUserList();
    }

    @GetMapping(value = "/getPageUserList")
    public Page<UserInfo> getPageUserList(@RequestParam("pageSize")int pageSize, @RequestParam("pageNum")int pageNum) {
        return userService.getPageUserList(pageSize, pageNum);
    }

    @GetMapping(value = "/getUserInfoS")
    public List<UserInfo> getUserInfoSByName(@RequestParam("name") String name) {
        return userService.getUsersByName(name);
    }
    @GetMapping(value = "/getUserInfo")
    public UserInfo getUserInfoByName(@RequestParam("name") String name) {
        return userService.getUserByName(name);
    }

    @PutMapping(value = "/addUserInfo")
    @ResponseBody
    public UserInfo addUserInfo(@RequestBody UserInfo userInfo) {
        logger.info("[addUserInfo] : " + userInfo.toString());
        return userService.addUserInfo(userInfo);
    }

    @PostMapping(value = "/updateUserInfo")
    public UserInfo updateUserInfo(@RequestBody UserInfo userInfo) {
        return userService.updateUserInfoById(userInfo);
    }

    @PostMapping(value = "/deleteUserInfo")
    public void deleteUserInfo(@RequestParam("id") Long id) {
        userService.deleteUserInfoById(id);
    }

    @InitBinder
    protected void init(HttpServletRequest request, ServletRequestDataBinder binder) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));/*TimeZone时区,解决差8小时的问题*/
        binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));
    }
}

8. 运行主程序。利用Postman发送Put请求 即可得到结果:

url: http://localhost:8080/test/addUserInfo

headers: "Content-Type"  /"application/json"

body:  {
    "name": "A",
    "jobNumber": "1",
    "createdTime": "2018-09-27 12:32:20"
}

猜你喜欢

转载自blog.csdn.net/girlgolden/article/details/82866752