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文件内容如下:
org.mybatis.spring.boot
mybatis-spring-boot-starter
1.3.0
mysql
mysql-connector-java
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
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;
}
}
MyBatis需要你为DAO提供一个接口,它称之为Mapper。然后具体的SQL语句可以注解在接口上,也可以单独保存在一个xml文件中,我这里使用的是前者,即将SQL语句注解在接口上。
代码如下:
@Mapper
public interface UserMapper {
@Select("select * from user")
List selectAll();
}
增、删、改、查各有一个注解。接口前的@Mapper注解表示它是一个Mapper。
(3) UserService类
代码如下:
@Service
public class UserService {
@Autowired
private UserMapper userMapperp;
public List listAll() {
return userMapperp.selectAll();
}
}
业务逻辑层的类需要加上@Service注解。
(4) UserController类
代码如下:
@RequestMapping("user")
@RestController
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/list/all")
public List 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,出现网页: