SpringBoot实现增删改查-Restful-风格

4次阅读

共计 7255 个字符,预计需要花费 19 分钟才能阅读完成。

前言

在去年的时候,在各种渠道中略微的了解了 Spring Boot,在开发 web 项目的时候是如何的方便、快捷。但是当时并没有认真的去学习下,毕竟感觉自己在 Struts 和 Spring MVC 都用得不太熟练。不过在看了很多关于 Spring Boot 的介绍之后,并没有想象中的那么难,于是开始准备学习 Spring Boot。

在闲暇之余的时候,看了下 Spring Boot 实战以及一些大神关于 Spring Boot 的博客之后,开始写起了我的第一个 Spring Boot 的项目。在能够对 Spring Boot 进行一些简单的开发 Restful 风格接口实现 CRUD 功能之后,于是便有了本篇博文。

Spring Boot 介绍

Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。

简单的来说就是,只需几个 jar 和一些简单的配置,就可以快速开发项目。

假如我就想简单的开发一个对外的接口,那么只需要以下代码就可以了。

一个主程序启动 springBoot

  

  @SpringBootApplication
        public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);
         }
        }
       

控制层

        @RestController
        public class HelloWorldController {@RequestMapping("/hello")
         public String index() {return "Hello World";}
         }
       

成功启动主程序之后,编写控制层,然后在浏览器输入 http://localhost:8080//hello 便可以查看信息。

感觉使用 SpringBoot 开发程序是不是非常的简单呢!

用 SpringBoot 实战的话来说:

这里没有配置,没有 web.xml,没有构建说明,甚至没有应用服务器,但这就是整个应用程序了。SpringBoot 会搞定执行应用程序所需的各种后勤工作,你只要搞定应用程序的代码就好。

基于 SpringBoot 开发一个 Restful 服务

一、开发准备

1.1 数据库和表

首先,我们需要在 MySql 中创建一个数据库和一张表

数据库的名称为 springboot,表名称为 t_user

脚本如下:

        CREATE DATABASE `springboot`;
        


        USE `springboot`;
        


        DROP TABLE IF EXISTS `t_user`;
        


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

1.2 maven 相关依赖

因为我们使用 Maven 创建的,所以需要添加 SpringBoot 的相关架包。

这里 Maven 的配置如下:

springBoot 最核心的 jar
spring-boot-starter:核心模块,包括自动配置支持、日志和 YAML;


       <dependencies>
         <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
         <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-thymeleaf</artifactId>
         </dependency>
         <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-data-jpa</artifactId>
         </dependency>
        


         <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-devtools</artifactId>
         <optional>true</optional>
         </dependency>
        


         <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
         </dependency>
        


        


         <!-- Spring Boot Mybatis 依赖 -->
         <dependency>
         <groupId>org.mybatis.spring.boot</groupId>
         <artifactId>mybatis-spring-boot-starter</artifactId>
         <version>${mybatis-spring-boot}</version>
         </dependency>
        


         <!-- MySQL 连接驱动依赖 -->
         <dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
         <version>${mysql-connector}</version>
         </dependency>
         </dependencies>
       

二、工程说明

成功创建好数据库以及下载好相应架包之后。

我们来正式开发 SpringBoot 项目。

2.1 工程结构图:

首先确定工程结构,这里我就简单的说明下了。

com.pancm.web – Controller 层
com.pancm.dao – 数据操作层 DAO
com.pancm.bean – 实体类
com.pancm.service – 业务逻辑层
Application – 应用启动类
application.properties – 应用配置文件,应用启动会自动读取配置

2.2 自定义配置文件

一般我们需要一些自定义的配置,例如配置 jdbc 的连接配置,在这里我们可以用 application.properties 进行配置。数据源实际的配置以各位的为准。

        ## 数据源配置
        spring.datasource.url=jdbc:mysql://localhost:3306/springBoot?useUnicode=true&characterEncoding=utf8
        spring.datasource.username=root
        spring.datasource.password=123456
        spring.datasource.driver-class-name=com.mysql.jdbc.Driver

        ## Mybatis 配置
        # 配置为 com.pancm.bean 指向实体类包路径。mybatis.typeAliasesPackage=com.pancm.bean
        # 配置为 classpath 路径下 mapper 包下,* 代表会扫描所有 xml 文件。mybatis.mapperLocations=classpath\:mapper/*.xml
       

三、代码编写

在创建好相关工程目录之后,我们开始来编写相应的代码。

3.1 实体类编写

由于我们这里只是用于测试,只在数据库中创建了一张 t_user 表,所以这里我们就只创建一个 User 实体类,里面的字段对应 t_user 表的字段。

示例代码如下:

         public class User {
         /** 编号 */
         private int id;
         /** 姓名 */
         private String name; 
         /** 年龄 */
         private int age;
        
         public User(){}
         public class User {
         /** 编号 */
         private int id;
         /** 姓名 */
         private String name; 
         /** 年龄 */
         private int age;
        
         public User(){}
        // getter 和 setter 略 
        }
       


3.2 Dao 层编写

在以前的 Dao 层这块,hibernate 和 mybatis 都可以使用注解或者使用 mapper 配置文件。在这里我们使用 spring 的 JPA 来完成基本的增删改查。

说明:

一般有两种方式实现与数据库实现 CRUD:
第一种是 xml 的 mapper 配置。
第二种是使用注解,@Insert、@Select、@Update、@Delete 这些来完成。本篇使用的是第二种。

      

       @Mapper
       public interface UserDao {
       
        /**
        * 用户数据新增
        */
        @Insert("insert into t_user(id,name,age) values (#{id},#{name},#{age})")
        void addUser(User user); 

        /**
        * 用户数据修改
        */
        @Update("update t_user set name=#{name},age=#{age} where id=#{id}")
        void updateUser(User user);

        /**
        * 用户数据删除
        */
        @Delete("delete from t_user where id=#{id}")
        void deleteUser(int id);
       
        /**
        * 根据用户名称查询用户信息
        *
        */
        @Select("SELECT id,name,age FROM t_user where name=#{userName}")
        User findByName(@Param("userName") String userName);
       
        /**
        * 查询所有
        */
        @Select("SELECT id,name,age FROM t_user") 
        List<User> findAll();}
      

说明:

mapper : 在接口上添加了这个注解表示这个接口是基于注解实现的 CRUD。
Results: 返回的 map 结果集,property 表示 User 类的字段,column 表示对应数据库的字段。
Param:sql 条件的字段。
Insert、Select、Update、Delete: 对应数据库的增、查、改、删。

3.3 Service 业务逻辑层

这块和 hibernate、mybatis 的基本一样。

代码如下:

接口

import com.pancm.bean.User;/** * * Title: UserService* Description: 用户接口 * Version:1.0.0 * @author pancm */public interface UserService {/** * 新增用户 * @param user * @return */ boolean addUser(User user); /** * 修改用户 * @param user * @return */ boolean updateUser(User user); /** * 删除用户 * @param id * @return */ boolean deleteUser(int id); /** * 根据用户名字查询用户信息 * @param userName */ User findUserByName(String userName); /** * 查询所有 * @return */ List<User> findAll();}

实现类

@Service
public class UserServiceImpl implements UserService {

 @Autowired 
 private UserDao userDao;

 @Override 
 public boolean addUser(User user) { 
     boolean flag=false; 
     try{userDao.addUser(user); 
         flag=true; 
     }catch(Exception e){e.printStackTrace(); 
     } 
     return flag; 
 }

 @Override 
 public boolean updateUser(User user) {
     boolean flag=false; 
      try{userDao.updateUser(user); 
          flag=true; 
      }catch(Exception e){e.printStackTrace(); 
      } 
      return flag; 
 }

 @Override 
 public boolean deleteUser(int id) { 
     boolean flag=false; 
     try{userDao.deleteUser(id); 
         flag=true; 
     }catch(Exception e){e.printStackTrace(); 
     } 
     return flag; 
 }

 @Override 
 public User findUserByName(String userName) {return userDao.findByName(userName); 
 }

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

}

3.4 Controller 控制层

控制层这块和 springMVC 很像,但是相比而言要简洁不少。

说明:
RestController:默认类中的方法都会以 json 的格式返回。
RequestMapping: 接口路径配置。
method : 请求格式。
RequestParam: 请求参数。
具体实现如下:

@RestController
@RequestMapping(value = "/api/user")
public class UserRestController { 
    @Autowired 
    private UserService userService;

     @RequestMapping(value = "/user", method = RequestMethod.POST) 
     public boolean addUser(User user) {System.out.println("开始新增..."); 
        return userService.addUser(user); 
    }

    @RequestMapping(value = "/user", method = RequestMethod.PUT) 
    public boolean updateUser(User user) {System.out.println("开始更新..."); 
        return userService.updateUser(user); 
    }

    @RequestMapping(value = "/user", method = RequestMethod.DELETE) 
    public boolean delete(@RequestParam(value = "userName", required = true) int userId) {System.out.println("开始删除..."); 
        return userService.deleteUser(userId); 
    }

    @RequestMapping(value = "/user", method = RequestMethod.GET) 
    public User findByUserName(@RequestParam(value = "userName", required = true) String userName) {System.out.println("开始查询..."); 
        return userService.findUserByName(userName); 
    }

    @RequestMapping(value = "/userAll", method = RequestMethod.GET) 
    public List<User> findByUserAge() {System.out.println("开始查询所有数据..."); 
        return userService.findAll();}
}

3.5 Application 主程序

SpringApplication 则是用于从 main 方法启动 Spring 应用的类。

默认,它会执行以下步骤:

  1. 创建一个合适的 ApplicationContext 实例(取决于 classpath)。
  2. 注册一个 CommandLinePropertySource,以便将命令行参数作为 Spring properties。
  3. 刷新 application context,加载所有单例 beans。
  4. 激活所有 CommandLineRunner beans。

直接使用 main 启动该类,SpringBoot 便自动化配置了。

ps: 即使是现在我依旧觉得这个实在是太厉害了。

该类的一些注解说明:

SpringBootApplication:开启组件扫描和自动配置。
MapperScan: mapper 接口类扫描包配置

代码如下:

@SpringBootApplication@MapperScan("com.pancm.dao")
public class Application {public static void main(String[] args) { 
    // 启动嵌入式的 Tomcat 并初始化 Spring 环境及其各 Spring 组件         
    SpringApplication.run(Application.class, args); 
    System.out.println("程序正在运行..."); 
    }
}

四、代码测试

代码编写完之后,我们进行代码的测试。

启动 Application 之后,使用 postman 工具进行接口的测试。

postman 的使用教程可以看这篇博客:

http://www.panchengming.com/2…

测试结果如下:


这里只使用了一个 get 和 post 测试,实际方法都测试过了。

正文完
 0