SpringBoot系列之三_一个完整的MVC案例
这一节让我们来做一个完整的案例。
我们将使用MyBatis作为ORM框架,并以非常简单的方式来使用MyBatis,完成一个完整的MVC案例。
此案例承接上一节,请先搭建好上一节案例。
一、数据库准备
我们使用MySQL作为数据存储,使用开发工具创建一个数据库demo,并在demo数据库中创建一张表user,创建语句如下:
- CREATE TABLE `user` (
- `id` int(11) NOT NULL COMMENT '主键',
- `name` varchar(64) NOT NULL COMMENT '姓名',
- `birthday` date DEFAULT NULL COMMENT '生日',
- `address` varchar(256) DEFAULT NULL COMMENT '地址',
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
在这个表中写入一些测试数据,例如:
二、编写项目代码
1. 修改pom文件,添加两个依赖项:
(1) mysql驱动包
(2) mybatis支持(MyBatis公司为spring boot编写了一个mybatis-spring-boot-starter项目)
pom文件内容如下:
- <dependency>
- <groupId>org.mybatis.spring.boot</groupId>
- <artifactId>mybatis-spring-boot-starter</artifactId>
- <version>1.3.0</version>
- </dependency>
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- </dependency>
2. 修改application.properties,内容如下:
- spring.datasource.url=jdbc:mysql://localhost:3306/demo?characterEncoding=utf8
- spring.datasource.username=root
- spring.datasource.password=root
- spring.datasource.driver-class-name=com.mysql.jdbc.Driver
- mybatis.typeAliasesPackage=com.hanhf.demo.domain
此处配置了数据库URL、用户名、密码、驱动类,另外,还配置了实体类所在的包。
3. 具体代码:
先来看一下项目的包结构:
这里,创建了三个包:
web:存放控制器
service:存放业务逻辑层对象
domain:存放实体类和DAO类
(1) User类(很普通的POJO类):
- public class User {
- private int id;
- private String name;
- private Date birthday;
- private String address;
- // 构造方法
- public User() {
- super();
- }
- public User(int id, String name, Date birthday, String address) {
- super();
- this.id = id;
- this.name = name;
- this.birthday = birthday;
- this.address = address;
- }
- // getter & setter
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public Date getBirthday() {
- return birthday;
- }
- public void setBirthday(Date birthday) {
- this.birthday = birthday;
- }
- public String getAddress() {
- return address;
- }
- public void setAddress(String address) {
- this.address = address;
- }
- }
(2) UserMapper接口:
MyBatis需要你为DAO提供一个接口,它称之为Mapper。然后具体的SQL语句可以注解在接口上,也可以单独保存在一个xml文件中,我这里使用的是前者,即将SQL语句注解在接口上。
代码如下:
- @Mapper
- public interface UserMapper {
- @Select("select * from user")
- List<User> selectAll();
- }
增、删、改、查各有一个注解。接口前的@Mapper注解表示它是一个Mapper。
(3) UserService类
代码如下:
- @Service
- public class UserService {
- @Autowired
- private UserMapper userMapperp;
- public List<User> listAll() {
- return userMapperp.selectAll();
- }
- }
业务逻辑层的类需要加上@Service注解。
(4) UserController类
代码如下:
- @RequestMapping("user")
- @RestController
- public class UserController {
- @Autowired
- private UserService userService;
- @GetMapping("/list/all")
- public List<User> listAll() {
- return userService.listAll();
- }
- }
控制器类前可以加@Controller注解,也可以加@RestController注解,如果是前者,则控制器方法返回的是一个页面的代称,如果是后者,则控制器方法返回的是JSON数据。
@RequestMapping用于指定请求的URL,它还有几个子注解:@GetMapping、@PostMapping、@PutMapping、@DeleteMapping,分别表示请求的GET、POST、PUT、DELETE等操作,这是为RESTFUL应用设置的新注解。
如果类上有@RequestMapper("user"),方法上又有@GetMapping("/list/all"),则要访问listAll()方法,请求的URL应为:http://localhost:8080/user/list/all。
(5) 主应用程序
最后,在主应用程序的类前加一个注解:
@MapperScan("com.hanhf.demo.domain")
这个注解表示扫描MyBatis的Mapper接口所在的包,找出所有加了@Mapper注解的接口。
代码如下:
- @SpringBootApplication
- @MapperScan("com.hanhf.demo.domain")
- public class DemoApplication {
- public static void main(String[] args) {
- SpringApplication.run(DemoApplication.class, args);
- }
- }
至此,项目完成。
启动程序,并输入网址:http://localhost:8080/user/list/all,出现网页:
SpringBoot系列之三_一个完整的MVC案例的更多相关文章
- 【ABAP系列】SAP 一个完整的SAP的Abap例子(idoc,edi文件的相互转换)
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP 一个完整的SAP的Aba ...
- SpringBoot系列——状态机(附完整源码)
1. 简单介绍状态机 2. 状态机的本质 3. 状态机应用场景 1. 简单介绍状态机 状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作.完成特定 ...
- Jenkins进阶系列之——16一个完整的JENKINS下的ANT BUILD.XML文件
网上看见的,确实很全,该有的基本都覆盖到了.自己拿来稍微改改就可以用了. 注:property中的value是你自己的一些本地变量.需要改成自己的 <?xml version="1.0 ...
- 转:helloworld:一个完整的WCF案例
原文地址:http://blog.csdn.net/mane_yao/article/details/5852845 WCF的ABC: A代表Address-where(对象在哪里)B代表Bindin ...
- helloworld:一个完整的WCF案例
服务端 1.创建一个空的解决方案:WCFDemo: 2.创建一个宿主控制台程序:Host 3.右击Host项目,选择“添加”--“新建项”,选择“WCF服务”创建名为“Service1.cs”的服务 ...
- Selenium私房菜系列5 -- 第一个Selenium RC测试案例
<Selenium简介>中讲过,Selenium RC支持多种语言编写测试案例,如:C#,Python.在工作中,我倾向于是用Python这类动态语言编写测试案例,因为这样的测试案例无需编 ...
- ASP.NET MVC案例教程(一) 准备
ASP.NET MVC案例教程(一) 前言 ASP.NET MVC作为微软官方的MVC解决方案,推出有一段时间了.可以说自动推出以来,一直广受关注.在经历了漫长的Preview之后,前几天终于推出了其 ...
- ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第一篇:准备工作
摘要 本文将简要介绍这个文章系列的目的.形式及大体内容.并且完成开始学习这个系列前所必要的准备工作. 前言 ASP.NET MVC作为微软官方的MVC解决方案,推出有一段时间了.可 ...
- [渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:建立一个EF数据模型
英文渣水平,大伙凑合着看吧…… 这是微软官方教程Getting Started with Entity Framework 6 Code First using MVC 5 系列的翻译,这里是第一篇: ...
随机推荐
- Java静态数据的初始化
Java中无论创建多少对象,静态数据都只占一份存储区域. 下面程序示例静态存储区域的初始化: //: initialization/StaticInitialization.java // Speci ...
- 有哪些Java性能优化方法?
面试官:"有性能优化经验没?" 应聘者:"有一点." 面试官:"那你们从哪些方面做了优化?" 应聘者:"sql优化.JV ...
- java框架之spring
一.HelloWorld程序 导入四个核心包(core.beans.expression.context)和一个logging的包: 写一个类并在 xml 中配置相应的bean(两个重要属性 id 和 ...
- 前端了解即可:OSS客户端如何使用,以实现资源分离
前一阵,应为项目需要,才简单整理了一下oss客户端的使用,做静态资源分离,及在项目中引入路径.接下来讲解记录一下,阿里云对象存储(Object Storage Service,简称OSS)客户端的基础 ...
- html 获取数据并发送给后端方式
一.方式一 使用ajax提交 function detailed() { var date = $("#asset_ip").text() $.ajax({ url: " ...
- 我写的Angular相关的文章
此文正在更新中... Angular6的变化 Angular7的变化 No value accessor for form control with path的解决方案
- PHP对接淘宝客api完成APP引流优惠券
淘宝客现在对多数人来说已经耳熟能详了,属于CPS(Cost Per Sale),一种网络广告收费标准,以实际销售产品数量来换算广告刊登金额.其他收费标准还有常见的CPC(Cost Per Click ...
- SuperMap-iServer过滤请求返回值
目的: iServer发布的arcgis地图服务中,由于tileinfo参数为null,导致用arcgis-ios客户端开发的APP闪退.通过过滤器将get请求的返回值修改 代码: package c ...
- python 标准类库-并行执行之subprocess-子进程管理
标准类库-并行执行之subprocess-子进程管理 by:授客QQ:1033553122 1.使用subprocess模块 以下函数是调用子进程的推荐方法,所有使用场景它们都能处理.也可用Popen ...
- C# 实现连连看功能
本文是利用C#实现连连看的小例子,以供学习分享使用.如有不足之处,还望指正. 思路: 初始化布局(横竖十行十列,共100个单元格,每一个格一个按钮,背景图为水果图片,随机生成) . 初始化对应棋盘(用 ...