这一节让我们来做一个完整的案例。

  我们将使用MyBatis作为ORM框架,并以非常简单的方式来使用MyBatis,完成一个完整的MVC案例。

  此案例承接上一节,请先搭建好上一节案例。

  一、数据库准备

  我们使用MySQL作为数据存储,使用开发工具创建一个数据库demo,并在demo数据库中创建一张表user,创建语句如下:

  1.  
    CREATE TABLE `user` (
  2.  
    `id` int(11) NOT NULL COMMENT '主键',
  3.  
    `name` varchar(64) NOT NULL COMMENT '姓名',
  4.  
    `birthday` date DEFAULT NULL COMMENT '生日',
  5.  
    `address` varchar(256) DEFAULT NULL COMMENT '地址',
  6.  
    PRIMARY KEY (`id`)
  7.  
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

  在这个表中写入一些测试数据,例如:

  二、编写项目代码

  1. 修改pom文件,添加两个依赖项:

  (1) mysql驱动包

  (2) mybatis支持(MyBatis公司为spring boot编写了一个mybatis-spring-boot-starter项目)

  pom文件内容如下:

  1.  
    <dependency>
  2.  
    <groupId>org.mybatis.spring.boot</groupId>
  3.  
    <artifactId>mybatis-spring-boot-starter</artifactId>
  4.  
    <version>1.3.0</version>
  5.  
    </dependency>
  6.  
     
  7.  
    <dependency>
  8.  
    <groupId>mysql</groupId>
  9.  
    <artifactId>mysql-connector-java</artifactId>
  10.  
    </dependency>

  2. 修改application.properties,内容如下:

  1.  
    spring.datasource.url=jdbc:mysql://localhost:3306/demo?characterEncoding=utf8
  2.  
    spring.datasource.username=root
  3.  
    spring.datasource.password=root
  4.  
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
  5.  
     
  6.  
    mybatis.typeAliasesPackage=com.hanhf.demo.domain

  此处配置了数据库URL、用户名、密码、驱动类,另外,还配置了实体类所在的包。

  3. 具体代码:

  先来看一下项目的包结构:

  这里,创建了三个包:

  web:存放控制器

  service:存放业务逻辑层对象

  domain:存放实体类和DAO类

  (1) User类(很普通的POJO类):

  1.  
    public class User {
  2.  
    private int id;
  3.  
    private String name;
  4.  
    private Date birthday;
  5.  
    private String address;
  6.  
     
  7.  
    // 构造方法
  8.  
     
  9.  
    public User() {
  10.  
    super();
  11.  
    }
  12.  
     
  13.  
    public User(int id, String name, Date birthday, String address) {
  14.  
    super();
  15.  
    this.id = id;
  16.  
    this.name = name;
  17.  
    this.birthday = birthday;
  18.  
    this.address = address;
  19.  
    }
  20.  
     
  21.  
    // getter & setter
  22.  
     
  23.  
    public int getId() {
  24.  
    return id;
  25.  
    }
  26.  
     
  27.  
    public void setId(int id) {
  28.  
    this.id = id;
  29.  
    }
  30.  
     
  31.  
    public String getName() {
  32.  
    return name;
  33.  
    }
  34.  
     
  35.  
    public void setName(String name) {
  36.  
    this.name = name;
  37.  
    }
  38.  
     
  39.  
    public Date getBirthday() {
  40.  
    return birthday;
  41.  
    }
  42.  
     
  43.  
    public void setBirthday(Date birthday) {
  44.  
    this.birthday = birthday;
  45.  
    }
  46.  
     
  47.  
    public String getAddress() {
  48.  
    return address;
  49.  
    }
  50.  
     
  51.  
    public void setAddress(String address) {
  52.  
    this.address = address;
  53.  
    }
  54.  
    }

  (2) UserMapper接口:

  MyBatis需要你为DAO提供一个接口,它称之为Mapper。然后具体的SQL语句可以注解在接口上,也可以单独保存在一个xml文件中,我这里使用的是前者,即将SQL语句注解在接口上。

  代码如下:

  1.  
    @Mapper
  2.  
    public interface UserMapper {
  3.  
    @Select("select * from user")
  4.  
    List<User> selectAll();
  5.  
    }

  增、删、改、查各有一个注解。接口前的@Mapper注解表示它是一个Mapper。

  (3) UserService类

  代码如下:

  1.  
    @Service
  2.  
    public class UserService {
  3.  
    @Autowired
  4.  
    private UserMapper userMapperp;
  5.  
     
  6.  
    public List<User> listAll() {
  7.  
    return userMapperp.selectAll();
  8.  
    }
  9.  
    }

  业务逻辑层的类需要加上@Service注解。

  (4) UserController类

  代码如下:

  1.  
    @RequestMapping("user")
  2.  
    @RestController
  3.  
    public class UserController {
  4.  
    @Autowired
  5.  
    private UserService userService;
  6.  
     
  7.  
    @GetMapping("/list/all")
  8.  
    public List<User> listAll() {
  9.  
    return userService.listAll();
  10.  
    }
  11.  
    }

  控制器类前可以加@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注解的接口。

  代码如下:

  1.  
    @SpringBootApplication
  2.  
    @MapperScan("com.hanhf.demo.domain")
  3.  
    public class DemoApplication {
  4.  
    public static void main(String[] args) {
  5.  
    SpringApplication.run(DemoApplication.class, args);
  6.  
    }
  7.  
    }

  至此,项目完成。

  启动程序,并输入网址:http://localhost:8080/user/list/all,出现网页:

 

SpringBoot系列之三_一个完整的MVC案例的更多相关文章

  1. 【ABAP系列】SAP 一个完整的SAP的Abap例子(idoc,edi文件的相互转换)

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP 一个完整的SAP的Aba ...

  2. SpringBoot系列——状态机(附完整源码)

    1. 简单介绍状态机 2. 状态机的本质 3. 状态机应用场景 1. 简单介绍状态机 状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作.完成特定 ...

  3. Jenkins进阶系列之——16一个完整的JENKINS下的ANT BUILD.XML文件

    网上看见的,确实很全,该有的基本都覆盖到了.自己拿来稍微改改就可以用了. 注:property中的value是你自己的一些本地变量.需要改成自己的 <?xml version="1.0 ...

  4. 转:helloworld:一个完整的WCF案例

    原文地址:http://blog.csdn.net/mane_yao/article/details/5852845 WCF的ABC: A代表Address-where(对象在哪里)B代表Bindin ...

  5. helloworld:一个完整的WCF案例

    服务端 1.创建一个空的解决方案:WCFDemo: 2.创建一个宿主控制台程序:Host 3.右击Host项目,选择“添加”--“新建项”,选择“WCF服务”创建名为“Service1.cs”的服务 ...

  6. Selenium私房菜系列5 -- 第一个Selenium RC测试案例

    <Selenium简介>中讲过,Selenium RC支持多种语言编写测试案例,如:C#,Python.在工作中,我倾向于是用Python这类动态语言编写测试案例,因为这样的测试案例无需编 ...

  7. ASP.NET MVC案例教程(一) 准备

    ASP.NET MVC案例教程(一) 前言 ASP.NET MVC作为微软官方的MVC解决方案,推出有一段时间了.可以说自动推出以来,一直广受关注.在经历了漫长的Preview之后,前几天终于推出了其 ...

  8. ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第一篇:准备工作

    摘要      本文将简要介绍这个文章系列的目的.形式及大体内容.并且完成开始学习这个系列前所必要的准备工作. 前言      ASP.NET MVC作为微软官方的MVC解决方案,推出有一段时间了.可 ...

  9. [渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:建立一个EF数据模型

    英文渣水平,大伙凑合着看吧…… 这是微软官方教程Getting Started with Entity Framework 6 Code First using MVC 5 系列的翻译,这里是第一篇: ...

随机推荐

  1. java——初识

    java是现在最火的高级编程语言之一,功能强,应用广. java可以做什么? 1. 开发桌面应用程序 2. 开发面向Internet的应用程序 开发java程序的基本步骤: 1. 编写源程序:mypr ...

  2. mapper代理查询

    对于查询来说,要根据具体的业务,来指定mapper接口中方法的返回值类型1:如果只返回一条记录,mapper接口中方法的返回值类型应指定为pojo类型或其他简单类型,这样mybatis内部就会使用se ...

  3. idea代码提示,不区分大小写

    idea代码提示,不区分大小写:File-->Settings-->Editor-->General-->Code Completion-->Case sensitive ...

  4. 微信小程序之发送模板消息(通过openid推送消息给用户)

    一.获取access_token access_token是接口调用的凭证,目前有效期为两个小时,需要定时刷新,重复获取将导致上次获取的access_token失效.(注:不建议每次调用需要acces ...

  5. IO学习二(节点流)

    1.流的分类 按照数据流向的不同:输入流和输出流 按照处理数据的单位不同:字节流((非文本文件)视频.音频.图像).字符流(文本文件) 按照角色的不同:节点流和处理流 2.IO体系 抽象基类 节点流 ...

  6. 26.Odoo产品分析 (三) – 人力资源板块(6) – 工资表(2)

    查看Odoo产品分析系列--目录 接上一篇Odoo产品分析 (三) – 人力资源板块(6) – 工资表(1) 4. 缴纳登记册 在"缴纳登记册"菜单中可以查看所有的登记册并新建:  ...

  7. Python __exit__,__enter__函数with语句的组合应用

    __exit__,__enter__函数with语句的组合应用   by:授客 QQ:1033553122 简介 设计对象类时,我们可以为对象类新增两个方法,一个是__enter(self)__,一个 ...

  8. (后台)SQL Server 数据库定时自动备份(转)

    转自博客园: SQL Server 数据库定时自动备份[转]   在SQL Server中出于数据安全的考虑,所以需要定期的备份数据库.而备份数据库一般又是在凌晨时间基本没有数据库操作的时候进行,所以 ...

  9. Orchard详解--第九篇 拓展模块及引用的处理

    在分析Orchard的模块加载之前,先简要说一下因为Orchard中的模块并不是都被根(启动)项目所引用的,所以当Orchard需要加载一个模块时首先需要保证该模块所依赖的其它程序集能够被找到,那么才 ...

  10. Redis数据类型及命令

    Redis简介 Redis是一个完全开源免费的, 是一个高性能的key-value数据库. Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久化,可以将内存 ...