前言

这是我学习 Spring Boot 的第三篇文章,终于可以见到效果了。错过的同学可以看看之前的文章

我们为什么要学习 Spring Boot

Spring Boot 入门详细分析

在入门的基础上,我们现在已经能运行起来项目了,至少保证 Hello World 是正常的,下面直接进入正题。

准备数据库环境

创建表

CREATE TABLE `t_user` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
`name` varchar(50) DEFAULT NULL COMMENT '姓名',
`age` int(2) DEFAULT NULL COMMENT '年龄',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;

工程相关

项目目录结构

编辑配置文件 application.properties 、pom.xml

编辑 application.properties 文件

## 数据源配置
spring.datasource.url=jdbc:mysql://localhost:3306/spring_boot_test?useUnicode=true&characterEncoding=utf8
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=root ## Mybatis 配置
# 配置为 com.kris.entry 指向实体类包路径。
mybatis.typeAliasesPackage=com.kris.entry

编辑 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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.kris</groupId>
<artifactId>demo2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo2</name>
<description>Demo project for Spring Boot</description> <properties>
<java.version>1.8</java.version>
          <!-- 这个 mybatis 的版本不能太低,否则有问题,无法导入相关注解 -->
<mybatis-spring-boot>1.3.2</mybatis-spring-boot>
<mysql-connector>5.1.39</mysql-connector>
</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> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency> <dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis-spring-boot}</version>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector}</version>
</dependency> </dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

编写实体类

package com.kris.entry;

/**
* Created by Kris on 2019/3/20.
*/
public class User { private Integer id; private String name; private Integer age; 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 Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} @Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}

编写 DAO 接口

package com.kris.dao;

import com.kris.entry.User;
import org.apache.ibatis.annotations.*; /**
* Created by Kris on 2019/3/20.
*/
@Mapper
public interface UserDao { /**
* 新增用户
* @param user
*/
@Insert("insert into t_user(id,name,age) values (#{id},#{name},#{age})")
boolean add(User user); /**
* 删除用户
* @param id
*/
@Delete("delete from t_user where id = #{id} ")
boolean delete(Integer id); /**
* 根据用户 ID 修改用户
* @param user
*/
@Update("update t_user set name = #{name},age = #{age} where id = #{id} ")
boolean update(User user); /**
* 根据 ID 查找用户
* @param id
* @return
*/
@Select("select * from t_user where id = #{id}")
User select(Integer id);
}

@Mapper 的作用:实话说,都说有作用,但是我测试了一波,去掉这个也没有问题。谁知道 @Mapper 的作用,麻烦告诉我一声!

@Insert @Delete @Update @Select 对应数据库的增删改查操作。

另外,在绑定参数的过程中,因为只有一个参数,所以可以自动绑定,若是有多个参数,那就需要@Param("XXX") 与 SQL 语句中的参数绑定了。例如:

@Update("update t_user set name = #{name},age = #{age} where id = #{id} ")
boolean update(@Param("name")String name,@Param("age")Integer age,@Param("id")Integer id);

编写 Service 接口以及 Service 实现

这个模块和之前的 SSM 项目没有区别,当前就这个 Demo 来说,也可以不写这个层。

package com.kris.service;

import com.kris.entry.User;

/**
* Created by Kris on 2019/3/20.
*/
public interface UserService { boolean add(User user); boolean delete(Integer id); boolean update(User user); User select(Integer id);
}
package com.kris.service.impl;

import com.kris.dao.UserDao;
import com.kris.entry.User;
import com.kris.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; /**
* Created by Kris on 2019/3/20.
*/
@Service
public class UserServiceImpl implements UserService{ @Autowired
UserDao userDao; @Override
public boolean add(User user) {
return userDao.add(user);
} @Override
public boolean delete(Integer id) {
return userDao.delete(id);
} @Override
public boolean update(User user) {
return userDao.update(user);
} @Override
public User select(Integer id) {
return userDao.select(id);
}
}

编写 Controller 层

package com.kris.controller;

import com.kris.entry.User;
import com.kris.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController; /**
* Created by Kris on 2019/3/20.
*/
@RestController
@RequestMapping("/user")
public class UserController { @Autowired
private UserService userService; @RequestMapping(value = "/add",method = RequestMethod.POST)
public boolean addUser(User user){
return userService.add(user);
} @RequestMapping(value = "/delete",method = RequestMethod.DELETE)
public boolean deleteUser(Integer id){
return userService.delete(id);
} @RequestMapping(value = "/update",method = RequestMethod.PUT)
public boolean updateUser(User user){
return userService.update(user);
} @RequestMapping(value = "/select",method = RequestMethod.GET)
public User selectUser(Integer id){
return userService.select(id);
}
}

@RestController 这个注解等于 @Controller + @ResponseBody 访问结果以 JSON 格式返回,其它的都是以前的知识。

运行项目

package com.kris;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication
@MapperScan("com.kris.dao")
public class Demo2Application { public static void main(String[] args) {
SpringApplication.run(Demo2Application.class, args);
}
}

SpringBootApplication:开启组件扫描和自动配置。

到这里知道了为什么会有 @Mapper 这个注解了,在之前我们想要实现 Dao 层的实现,我们使用 Mapper 动态代理开发机制,但是外在表现就是在 DAO 接口上添加 @Mapper 即可。但是这样我们需要为每一个 Dao 文件添加注解,太麻烦,现在为了方便,简化操作我们可以直接使用 @MapperScan 进行扫描即可。另外,@MapperScan 这个注解还可以同时扫描多个文件,中间用逗号隔开。我们可以这样写

@MapperScan("com.kris.dao","com.yu.mapper")

测试

测试这里我使用的 Postman ,当然你也可以使用 Restlet 。呃呃,测试就自己来吧,我就不截图了。实在不行,你就用浏览器直接访问啊,但是注意设置请求的形式呦。

使用 Spring Boot 搭建一套增删改查(无多余代码)的更多相关文章

  1. Spring Boot实现学生信息增删改查

    上一篇博客写了如何初始化一个简单的Spring Boot项目,这次详细记录一下如何连接数据库并实现增删改查基本操作. 我使用的是MySQL 5.5+Navicat,MySQL量级比较轻,当然微软的SQ ...

  2. 上手spring boot项目(三)之spring boot整合mybatis进行增删改查的三种方式。

    1.引入依赖. <!--springboot的web起步依赖--><dependency> <groupId>org.springframework.boot< ...

  3. 上手spring boot项目(三)之spring boot整合mybatis进行增删改查

    使用mybatis框架进行增删改查大致有两种基础方式,一种扩展方式.两种基础方式分别是使用xml映射文件和使用方法注解.扩展方式是使用mybatis-plus的方式,其用法类似于spring-data ...

  4. Spring Boot GraphQL 实战 02_增删改查和自定义标量

    hello,大叫好,我是小黑,又和大家见面啦~ 今天我们来继续学习 Spring Boot GraphQL 实战,我们使用的框架是 https://github.com/graphql-java-ki ...

  5. spring boot集成mongodb的增删改查

    添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>sp ...

  6. Spring Boot使用Mybatis实现增删改查

    java.com.wms.model.Admin.java 1 package com.wms.model; 2 3 import java.sql.Timestamp; 4 5 public cla ...

  7. WCFRESTFul服务搭建及实现增删改查

    WCFRESTFul服务搭建及实现增删改查 RESTful Wcf是一种基于Http协议的服务架构风格,  RESTful 的服务通常是架构层面上的考虑. 因为它天生就具有很好的跨平台跨语言的集成能力 ...

  8. 在ASP.NET MVC4中实现同页面增删改查,无弹出框02,增删改查界面设计

    在上一篇"在ASP.NET MVC4中实现同页面增删改查,无弹出框01,Repository的搭建"中,已经搭建好了Repository层,本篇就剩下增删改查的界面了......今 ...

  9. 分享一个自己写的MVC+EF “增删改查” 无刷新分页程序

    分享一个自己写的MVC+EF “增删改查” 无刷新分页程序 一.项目之前得添加几个组件artDialog.MVCPager.kindeditor-4.0.先上几个效果图.      1.首先建立一个数 ...

随机推荐

  1. SpringMVC的JSON数据交互(七)-@Response,@RestController,@RequestBody用法

    1.@RequestBody   (自动将请求的数据封装为对象) 作用: @RequestBody注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConve ...

  2. Python3实现从文件中读取指定行的方法

    from:http://www.jb51.net/article/66580.htm 这篇文章主要介绍了Python3实现从文件中读取指定行的方法,涉及Python中linecache模块操作文件的使 ...

  3. How to scroll down with Phantomjs to load dynamic content

    page.open('http://example.com/?q=houston', function () { // Checks for bottom div and scrolls down f ...

  4. BZOJ 3498: PA2009 Cakes 一类经典的三元环计数问题

    首先引入一个最常见的经典三元环问题. #include <bits/stdc++.h> using namespace std; const int maxn = 100005; vect ...

  5. saltstack中如何实现多个master来管理minion

    背景: 公司有多个部门,有一些机器有本部门的业务,这些机器也有其他部门的业务,所以本部门需要一个master服务器来管理这批机器,其他部门也需要一个master服务器来管理这个机器,所以就需要多个ma ...

  6. 使用光盘搭建本地yum源

    刚装好的系统,想安装一些常用软件和一些包组的时候,就可以使用安装光盘搭建本地yum 第一步:挂载安装光盘 mount /dev/cdrom /mnt 第二步:编辑repo yum源文件 [root@l ...

  7. Nodejs 实现ESL内联FreeSWITCH设定说明

    一.背景说明: SIP Server IP (Centos):192.168.11.61  ,服务器IP(Windows):192.168.11.19 二.目的: 能够从192.168.11.19上通 ...

  8. Neural style transfer

    网络风格迁移 作者:无用 本文通过学习吴恩达视频所做笔记 目录 简介 可视化卷积层 构建风格迁移网络 一.网络风格迁移简介 二.可视化卷积层 可视化深层卷积网络???这个问题我看过一篇文章,我会在后补 ...

  9. js字符串转换成数字与数字转换成字符串的实现方法

    转载:点击查看地址 js字符串转换成数字 将字符串转换成数字,得用到parseInt函数.parseInt(string) : 函数从string的开始解析,返回一个整数. 举例:parseInt(' ...

  10. 《剑指offer》-表示数值的字符串

    请实现一个函数用来判断字符串是否表示数值(包括整数和小数).例如,字符串"+100","5e2","-123","3.1416&q ...