这一节让我们来做一个完整的案例。
我们将使用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语句注解在接口上。
代码如下:
-
-
public interface UserMapper {
-
-
List<User> selectAll();
-
}
增、删、改、查各有一个注解。接口前的@Mapper注解表示它是一个Mapper。
(3) UserService类
代码如下:
-
-
public class UserService {
-
-
private UserMapper userMapperp;
-
-
public List<User> listAll() {
-
return userMapperp.selectAll();
-
}
-
}
(4) UserController类
代码如下:
-
-
-
public class UserController {
-
-
private UserService userService;
-
-
-
public List<User> listAll() {
-
return userService.listAll();
-
}
-
}
@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注解的接口。
代码如下:
-
-
-
public class DemoApplication {
-
public static void main(String[] args) {
-
SpringApplication.run(DemoApplication.class, args);
-
}
-
}
至此,项目完成。
启动程序,并输入网址:http://localhost:8080/user/list/all,出现网页: