Spring+SpringMVC+MyBatis 框架整合
文章目录
- 一、环境准备
-
- 1.1、环境要求
- 1.2、搭建数据据库环境
- 二、基本环境搭建
-
- 2.1、新建普通Maven项目,添加web的支持
- 2.2、导入依赖
- 2.3、Maven资源过滤问题设置
- 2.4、maven扫描xml文件编码问题
- 2.5、建立基本结构和配置框架
- 三、Mybatis层编写
-
- 3.1、编写数据库配置文件 db.properties
- 3.2、编写MyBatis的核心配置文件
- 3.3、编写实体类
- 3.4、编写Dao层
-
- 3.4.1、编写Dao层的Mapper接口
- 3.4.2、编写Mapper接口对应的Mapper.xml
- 3.5、编写Service层
-
- 3.5.1、编写Service层的接口
- 3.5.1、编写Service层的接口实现类
- 四、Spring层编写
-
- 4.1、Spring整合Dao层
- 4.2、Spring整合service层
- 4.3、对底层Dao进行测试
- 五、SpringMVC层编写
-
- 5.1、配置web.xml
- 5.2、编写spring-mvc.xml配置文件
- 5.3、Spring整合配置文件
- 5.4、编写Controller
- 5.5、编写视图层
-
- 5.5.1、编写首页 index.jsp
- 5.5.2、书籍列表页面 allbook.jsp
- 5.5.3、添加书籍页面addBook.jsp
- 5.5.4、修改书籍页面 updateBook.jsp
一、环境准备 1.1、环境要求
1.2、搭建数据据库环境 创建一个存放书籍数据的数据库表【SSM框架|[超详细]SSM框架整合教程--入门级(图书增删改查)】项目架构图:
- IDEA 2020.1 + MySQL 8.0.21+Tomcat 9.0.53 + Maven 3.8.2
- 前端:jsp+css+bootstrap
文章图片
CREATE DATABASE `ssmbuild`;
USE `ssmbuild`;
DROP TABLE IF EXISTS `books`;
CREATE TABLE `books` (
`bookID` INT(10) NOT NULL AUTO_INCREMENT COMMENT '书id',
`bookName` VARCHAR(100) NOT NULL COMMENT '书名',
`bookCounts` INT(11) NOT NULL COMMENT '数量',
`detail` VARCHAR(200) NOT NULL COMMENT '描述',
KEY `bookID` (`bookID`)
) ENGINE=INNODB DEFAULT CHARSET=utf8INSERT INTO `books` VALUES
(1, 'Java从入门到精通', 13, '从入门到放弃'),
(2, 'MySQL', 12, '从删库到跑路'),
(3, 'Linux', 23, '从进门到进牢'),
(4, 'C++程序设计基础', 13, '从开门到锁门'),
(5, '网页设计基础', 11, '从好看到难看');
数据库表如图:
文章图片
二、基本环境搭建 2.1、新建普通Maven项目,添加web的支持
文章图片
依赖:2.2、导入依赖
junit 数据库驱动 连接池 servlet jsp jstl mybatis mybatis-spring springMVC spring-jdbc lombok
junit
junit
4.12
mysql
mysql-connector-java
8.0.21
com.mchange
c3p0
0.9.5.2
javax.servlet
servlet-api
2.5
javax.servlet.jsp
jsp-api
2.2
javax.servlet
jstl
1.2
org.mybatis
mybatis
3.5.2
org.mybatis
mybatis-spring
2.0.6
org.springframework
spring-webmvc
5.3.14
org.springframework
spring-jdbc
5.3.14
org.projectlombok
lombok
1.18.10
2.3、Maven资源过滤问题设置
src/main/resources
**/*.properties
**/*.xml
false
src/main/java
**/*.properties
**/*.xml
false
2.4、maven扫描xml文件编码问题
少数人会遇这个问题
java 解决异常 2 字节的 UTF-8 序列的字节2 无效的问题
UTF-8
2.5、建立基本结构和配置框架
文章图片
- 在resource目录下新建
mybatis-config.xml
- 在resource目录下新建
applicationContext.xml
三、Mybatis层编写 3.1、编写数据库配置文件 db.properties
- 注意MySQL8.0以上要设置时区,最后加上
serverTimezone=Asia/Shanghai
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssmbuild?useSSL=true&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
jdbc.username=root
jdbc.password=123456
数据库时区解决办法:https://blog.csdn.net/weixin_53168000/article/details/117260079
3.2、编写MyBatis的核心配置文件
>name="logImpl" value="https://www.it610.com/article/STDOUT_LOGGING"/>
3.3、编写实体类 包名:
com.seig.pojo.Books
这里使用了lombok
插件@Data
@AllArgsConstructor
@NoArgsConstructor
public class Books {private int bookID;
private String bookName;
private int bookCounts;
private String detail;
}
没有安装Lombok插件的小伙伴们可以自己写
Getter and Setter
和 Constructor(无参和有参构造方法)
3.4、编写Dao层 3.4.1、编写Dao层的Mapper接口
public interface BookMapper {//增加一本书
int addBook(Books books);
//删除一本书
int deleteBookById(@Param("bookId") int id);
//更新一本书
int updateBook(Books books);
//查询一本书
Books queryBookById(@Param("bookId") int id);
//查询所有书
List queryAllBook();
//根据书籍名称模糊查询
List queryBookName(@Param("keyword") String keyword);
}
3.4.2、编写Mapper接口对应的Mapper.xml
一个Mapper.xml
对应一个Mapper接口
,要用namespace
绑定上述接口 需要导入MyBatis的包!
insert into books (bookName,bookCounts,detail) values (#{bookName},#{bookCounts},#{detail})
delete from books where bookID = #{bookId}
update books set bookName=#{bookName},bookCounts=#{bookCounts},detail=#{detail} where bookID=#{bookID} ;
id="queryBookById" resultType="Books">
select * from books where bookID = #{bookId}
id="queryAllBook" resultType="Books">
select * from books
id="queryBookName" resultType="Books">
select * from books where bookName like "%"#{keyword}"%"
3.5、编写Service层 3.5.1、编写Service层的接口
public interface BookService {//增加一本书
int addBook(Books books);
//删除一本书
int deleteBookById(int id);
//更新一本书
int updateBook(Books books);
//查询一本书
Books queryBookById(int id);
//查询所有书
List queryAllBook();
//根据书籍名称模糊查询
List queryBookName(String keyword);
}
3.5.1、编写Service层的接口实现类
public class BookServiceImpl implements BookService{//service 调dao层:组合Dao
private BookMapper bookMapper;
public void setBookMapper(BookMapper bookMapper) {
this.bookMapper = bookMapper;
}public int addBook(Books books) {
return bookMapper.addBook(books);
}public int deleteBookById(int id) {
return bookMapper.deleteBookById(id);
}public int updateBook(Books books) {
return bookMapper.updateBook(books);
}public Books queryBookById(int id) {
return bookMapper.queryBookById(id);
}public List queryAllBook() {
return bookMapper.queryAllBook();
}public List queryBookName(String keyword) {
return bookMapper.queryBookName(keyword);
}
}
OK,到此,底层需求操作编写完毕!
四、Spring层编写 4.1、Spring整合Dao层
在resource目录下新建spring-dao.xml
1、关联数据库配置文件
db.properties
,要引入context
约束2、配置
MyBatis
数据源,这里使用第三方的c3p0
,还可以附加一些私有属性文章图片
3、创建
sqlSessionFactory
,在 MyBatis-Spring
中,则使用 SqlSessionFactoryBean
来创建,要配置两个重要属性?
configLocation
绑定MyBatis核心配置文件
?
dataSource
指定数据源(必要)4、配置自动扫描包
dao
,动态实现了dao
层接口可以注入到Spring
容器中? (在原来我们是创建
sqlSessionTemplate
对象,然后再创建一个Mapper
接口实现类,其中内置sqlSessionTemplate
私有对象,通过该对象进行操作)4.2、Spring整合service层
在resource目录下新建spring-service.xml
Spring层搞定!
4.3、对底层Dao进行测试 首先将配置文件整合到
applicationContext.xml
中
在test包下的java包下新建一个类
MyTest.java
这里使用Junit
单元测试框架public class MyTest {@Test
public void test1(){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
BookService bookServiceImpl = (BookService) context.getBean("BookServiceImpl");
for (Books books : bookServiceImpl.queryAllBook()) {
System.out.println(books);
}
}
}
测试结果:
文章图片
证明我们的底层代码没有问题! 我们开始SpringMVC层的编写吧~
五、SpringMVC层编写 5.1、配置web.xml
>
>DispatcherServlet
>org.springframework.web.servlet.DispatcherServlet
contextConfigLocationclasspath:applicationContext.xml
1
>
>DispatcherServlet
/
encodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
utf-8
encodingFilter
/*
>
>15
5.2、编写spring-mvc.xml配置文件
5.3、Spring整合配置文件
在applicationContext.xml
中 整合dao层的spring-dao.xml
、service层的spring-service.xml
和SpringMVC层的spring-mvc.xml
因此Spring可以用于团队开发!
配置文件,暂时结束!我们开始Controller 和 视图层编写了~
5.4、编写Controller BookController中实现了5个业务
- 查询全部书籍
- 新增书籍
- 修改书籍
- 删除书籍
- 根据书籍名称查询书籍
@Controller
@RequestMapping("/book")
public class BookController {
//controller 调service层
@Autowired
@Qualifier("BookServiceImpl") //用来指定别名
private BookService bookService;
//查询全部书籍,并且返回到一个书籍展示页面
@RequestMapping("/allBook")
public String list(Model model){
List list = bookService.queryAllBook();
model.addAttribute("list",list);
return "allBook";
}//跳转到新增书籍页面
@RequestMapping("/toAddBook")
public String toAddPage(Model model){
return "addBook";
}//新增书籍
@RequestMapping("/addBook")
public String addPaper(Books books) {
System.out.println("addBook==>"+books);
bookService.addBook(books);
return "redirect:/book/allBook";
}//跳转到修改书籍页面
@RequestMapping("/toUpdateBook")
public String toUpdateBook(Model model, int id) {
Books books = bookService.queryBookById(id);
System.out.println("toUpdateBook==>"+books);
model.addAttribute("book",books );
return "updateBook";
}//修改书籍
@RequestMapping("/updateBook")
public String updateBook(Model model, Books book) {
System.out.println("UpdateBook==>"+book);
bookService.updateBook(book);
Books books = bookService.queryBookById(book.getBookID());
model.addAttribute("books", books);
return "redirect:/book/allBook";
}//删除书籍 RestFul风格回顾
@RequestMapping("/del/{bookId}")
public String deleteBook(@PathVariable("bookId") int id) {
bookService.deleteBookById(id);
return "redirect:/book/allBook";
}//根据书籍名称模糊查询书籍
@RequestMapping("/queryBook")
public String queryBook(String keyword,Model model){
List list = bookService.queryBookName(keyword);
System.err.println("queryBook=>"+list);
if (list.isEmpty()){
list = bookService.queryAllBook();
model.addAttribute("error","未查到该书籍");
}model.addAttribute("list",list);
return "allBook";
}
5.5、编写视图层
在5.5.1、编写首页 index.jspweb/WEB-INF/
目录下新建jsp
包,用来存放我们自定义视图页面
文章图片
首页 - 锐客网
="text/css">
a {
text-decoration: none;
color: black;
font-size: 18px;
}
h3 {
width: 180px;
height: 38px;
margin: 100px auto;
text-align: center;
line-height: 38px;
background: deepskyblue;
border-radius: 4px;
}
点击进入图书展示页
文章图片
5.5.2、书籍列表页面 allbook.jsp
书籍列表 - 锐客网
文章图片
5.5.3、添加书籍页面addBook.jsp
新增书籍 - 锐客网
>新增书籍
文章图片
5.5.4、修改书籍页面 updateBook.jsp
修改信息 - 锐客网
>修改信息
文章图片
模糊查询:
文章图片
到此位置,SSM整合项目到此结束了!`
推荐阅读
- 中间件|Redis从入门到精通
- java|Java小白从入门到精通,Java零基础入门看这一篇就够了
- 程序员|Redis从入门到精通,至少要看看这篇,几乎囊括了Java的所有知识点
- 深入理解Spring生态|Spring第三讲(SpringMVC 从入门到精通)
- Spring-data-JPA详细介绍,增删改查实现
- 面试官(如何保证用户模块的数据安全(说说你的解决方案))
- Java/Spring/Dubbo三种SPI机制,到底谁更好()
- Apple 史上以来最大的bootstrap漏洞
- 人工智能|Pokémon AI,使用DALL-E生成神奇宝贝图鉴