SpringBoot系列之三_一个完整的MVC案例

时间:2023-03-10 04:10:53
SpringBoot系列之三_一个完整的MVC案例

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

  我们将使用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;

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

SpringBoot系列之三_一个完整的MVC案例

  二、编写项目代码

  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. <dependency>
  7. <groupId>mysql</groupId>
  8. <artifactId>mysql-connector-java</artifactId>
  9. </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. mybatis.typeAliasesPackage=com.hanhf.demo.domain

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

  3. 具体代码:

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

SpringBoot系列之三_一个完整的MVC案例

  这里,创建了三个包:

  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. public User() {
  8. super();
  9. }
  10. public User(int id, String name, Date birthday, String address) {
  11. super();
  12. this.id = id;
  13. this.name = name;
  14. this.birthday = birthday;
  15. this.address = address;
  16. }
  17. // getter & setter
  18. public int getId() {
  19. return id;
  20. }
  21. public void setId(int id) {
  22. this.id = id;
  23. }
  24. public String getName() {
  25. return name;
  26. }
  27. public void setName(String name) {
  28. this.name = name;
  29. }
  30. public Date getBirthday() {
  31. return birthday;
  32. }
  33. public void setBirthday(Date birthday) {
  34. this.birthday = birthday;
  35. }
  36. public String getAddress() {
  37. return address;
  38. }
  39. public void setAddress(String address) {
  40. this.address = address;
  41. }
  42. }

  (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. public List<User> listAll() {
  6. return userMapperp.selectAll();
  7. }
  8. }

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

  (4) UserController类

  代码如下:

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

  控制器类前可以加@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案例