内容简介:基于SpringBoot开发一个Restful服务,实现增删改查功能
在去年的时候,在各种渠道中略微的了解了SpringBoot,在开发web项目的时候是如何的方便、快捷。但是当时并没有认真的去学习下,毕竟感觉自己在Struts和SpringMVC都用得不太熟练。不过在看了很多关于SpringBoot的介绍之后,并没有想象中的那么难,于是开始准备学习SpringBoot。 在闲暇之余的时候,看了下SpringBoot实战以及一些大神关于SpringBoot的博客之后,开始写起了我的第一个SpringBoot的项目。在能够对SpringBoot进行一些简单的开发Restful风格接口实现CRUD功能之后,于是便有了本篇博文。
SpringBoot介绍
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 数据库和表
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相关依赖
springBoot最核心的jar
spring-boot-starter :核心模块,包括自动配置支持、日志和YAML;
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.RELEASE</version> <relativePath/> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.7</java.version> <mybatis-spring-boot>1.2.0</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-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> <build> <plugins> <!--运用SpringBoot 插件 使用spring-boot-devtools模块的应用,当classpath中的文件有改变时,会自动重启! --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <fork>true</fork> </configuration> </plugin> </plugins> </build>
二、工程说明
2.1工程结构图:
com.pancm.web - Controller 层 com.pancm.dao - 数据操作层 DAO com.pancm.bean - 实体类 com.pancm.bean.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 Pojo类User的编写
来到重点的代码这快了。
我们开始先编写pojo类,对应数据库中的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。
说明:
一般有两种方式实现与数据库实现CRUD:
第一种是xml的mapper配置。
第二种是使用注解,@Insert、@Select、@Update、@Delete 这些来完成。本篇使用的是第二种
import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Result; import org.apache.ibatis.annotations.Results; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; import org.springframework.data.repository.query.Param; import com.pancm.bean.User; @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") // 返回 Map 结果集 @Results({ @Result(property = "id", column = "id"), @Result(property = "name", column = "name"), @Result(property = "age", column = "age"), }) User findByName(@Param("name") String userName); /** * 根据用户ID查询用户信息 * */ @Select("SELECT id,name,age FROM t_user") User findById(@Param("id") int userId); /** * 根据用户age查询用户信息 */ @Select("SELECT id,name,age FROM t_user where age = #{userAge}") User findByAge( int userAge); }
这个接口使用的注解个人理解:
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 * @date 2018年1月9日 */ 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); /** * 根据用户ID查询用户信息 * @param userId */ User findUserById(int userId); /** * 根据用户ID查询用户信息 * @param userAge */ User findUserByAge(int userAge); }
实现类
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.pancm.bean.User; import com.pancm.dao.UserDao; import com.pancm.service.UserService; /** * * Title: UserServiceImpl * Description: * 用户操作实现类 * Version:1.0.0 * @author pancm * @date 2018年1月9日 */ @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 User findUserById(int userId) { return userDao.findById(userId); } @Override public User findUserByAge(int userAge) { return userDao.findByAge(userAge); } }
3.4 Controller 控制层
控制层这块和springMVC很像,但是相比而言要简洁不少。
关于控制层的注解个人的理解如下:
RestController:默认类中的方法都会以json的格式返回。
RequestMapping: 接口路径配置。
method : 请求格式。
RequestParam: 请求参数。
具体实现如下:
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.RequestParam; import org.springframework.web.bind.annotation.RestController; import com.pancm.bean.User; import com.pancm.service.UserService; /** * * Title: UserRestController * Description: * 用户数据操作接口 * Version:1.0.0 * @author pancm * @date 2018年1月9日 */ @RestController @RequestMapping(value = "/api/user") public class UserRestController { @Autowired private UserService userService; @RequestMapping(value = "/addUser", method = RequestMethod.POST) public boolean addUser( User user) { System.out.println("开始新增..."); return userService.addUser(user); } @RequestMapping(value = "/updateUser", method = RequestMethod.PUT) public boolean updateUser( User user) { System.out.println("开始更新..."); return userService.updateUser(user); } @RequestMapping(value = "/deleteUser", method = RequestMethod.DELETE) public boolean delete(@RequestParam(value = "userName", required = true) int userId) { System.out.println("开始删除..."); return userService.deleteUser(userId); } @RequestMapping(value = "/userName", method = RequestMethod.GET) public User findByUserName(@RequestParam(value = "userName", required = true) String userName) { System.out.println("开始查询..."); return userService.findUserByName(userName); } @RequestMapping(value = "/userId", method = RequestMethod.GET) public User findByUserId(@RequestParam(value = "userId", required = true) int userId) { System.out.println("开始查询..."); return userService.findUserById(userId); } @RequestMapping(value = "/userAge", method = RequestMethod.GET) public User findByUserAge(@RequestParam(value = "userAge", required = true) int userAge) { System.out.println("开始查询..."); return userService.findUserById(userAge); } }
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 接口类扫描包配置
代码如下:
import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * * Title: Application * Description: * springBoot 主程序 * Version:1.0.0 * @author pancm * @date 2018年1月5日 */ @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/2017/04/24/pancm12/
测试结果如下:
如果觉得不错,希望顺便给个star。
到此,本文结束,谢谢阅读。
版权声明:
作者:虚无境
博客园出处: http://www.cnblogs.com/xuwujing
CSDN出处: http://blog.csdn.net/qazwsxpcm
个人博客出处: http://www.panchengming.com
原创不易,转载请标明出处,谢谢!
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- JDBC实现简单增删改查
- Mybatis实现数据的增删改查(CRUD)
- Mybatis实现数据的增删改查(CRUD)
- 使用Kibana实现基本的增删改查操作
- 一行代码整合 Quartz 实现定时任务动态增删改
- Node编写API接口,ajax实现增删改查
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Text Processing in Python
David Mertz / Addison-Wesley Professional / 2003-6-12 / USD 54.99
Text Processing in Python describes techniques for manipulation of text using the Python programming language. At the broadest level, text processing is simply taking textual information and doing som......一起来看看 《Text Processing in Python》 这本书的介绍吧!