這一節讓我們來做一個完整的案例。
我們將使用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,出現網頁: