针对上一篇文章详细介绍了SSM框架的搭建,这篇文章使用SSM给大家举一个栗子;希望对大家有所帮助。
一开始想就这样结束教程,但是发现其实很多人都还不会把这个SSM框架用起来,特别是mybatis部分。那我现在就以最常见的“图书管理系统”中【查询图书】和【预约图书】业务来做一个demo吧!
首先新建数据库名为ssm
,再创建两张表:图书表book
和预约图书表appointment
,并且为book
表初始化一些数据,sql如下。
schema.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<code
class
=
"language-sql hljs "
>-- 创建图书表
CREATE TABLE `book` (
`book_id` bigint(
20
) NOT NULL AUTO_INCREMENT COMMENT
'图书ID'
,
`name` varchar(
100
) NOT NULL COMMENT
'图书名称'
,
`number`
int
(
11
) NOT NULL COMMENT
'馆藏数量'
,
PRIMARY KEY (`book_id`)
) ENGINE=InnoDB AUTO_INCREMENT=
1000
DEFAULT CHARSET=utf8 COMMENT=
'图书表'
-- 初始化图书数据
INSERT INTO `book` (`book_id`, `name`, `number`)
VALUES
(
1000
,
'Java程序设计'
,
10
),
(
1001
,
'数据结构'
,
10
),
(
1002
,
'设计模式'
,
10
),
(
1003
,
'编译原理'
,
10
)
-- 创建预约图书表
CREATE TABLE `appointment` (
`book_id` bigint(
20
) NOT NULL COMMENT
'图书ID'
,
`student_id` bigint(
20
) NOT NULL COMMENT
'学号'
,
`appoint_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT
'预约时间'
,
PRIMARY KEY (`book_id`, `student_id`),
INDEX `idx_appoint_time` (`appoint_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=
'预约图书表'
</code>
|
在entity
包中添加两个对应的实体,图书实体Book.java
和预约图书实体Appointment.java
。
Book.java
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<code
class
=
"language-java hljs "
>
package
com.soecode.lyf.entity;
public
class
Book {
private
long
bookId;
// 图书ID
private
String name;
// 图书名称
private
int
number;
// 馆藏数量
// 省略构造方法,getter和setter方法,toString方法
}</code>
|
Appointment.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
<code
class
=
"language-java hljs "
>
package
com.soecode.lyf.entity;
import
java.util.Date;
/**
* 预约图书实体
*/
public
class
Appointment {
private
long
bookId;
// 图书ID
private
long
studentId;
// 学号
private
Date appointTime;
// 预约时间
// 多对一的复合属性
private
Book book;
// 图书实体
// 省略构造方法,getter和setter方法,toString方法
}</code>
|
在dao
包新建接口BookDao.java
和Appointment.java
BookDao.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
<code
class
=
"language-java hljs "
>
package
com.soecode.lyf.dao;
import
java.util.List;
import
com.soecode.lyf.entity.Book;
public
interface
BookDao {
/**
* 通过ID查询单本图书
*
* @param id
* @return
*/
Book queryById(
long
id);
/**
* 查询所有图书
*
* @param offset 查询起始位置
* @param limit 查询条数
* @return
*/
List<book> queryAll(
@Param
(
"offset"
)
int
offset,
@Param
(
"limit"
)
int
limit);
/**
* 减少馆藏数量
*
* @param bookId
* @return 如果影响行数等于>1,表示更新的记录行数
*/
int
reduceNumber(
long
bookId);
}
</book></code>
|
AppointmentDao.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
<code
class
=
"language-java hljs "
>
package
com.soecode.lyf.dao;
import
org.apache.ibatis.annotations.Param;
import
com.soecode.lyf.entity.Appointment;
public
interface
AppointmentDao {
/**
* 插入预约图书记录
*
* @param bookId
* @param studentId
* @return 插入的行数
*/
int
insertAppointment(
@Param
|