版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/girlgolden/article/details/82866752
- 加入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">--> <!--<!–日志异步到数据库 –>--> <!--<connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">--> <!--<!–连接池 –>--> <!--<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"
}