我们整合ssm三个框架通过一个小项目来实现。
一个项目从零开始写,基本步骤便要想好我们的需求,设计出我们的数据库,完善我们的业务,构建出我们的前端页面。
我们写一个简单的图书管理项目,数据库只存在一张books的表格,包含(`bookID`,`boodName`,`bookCounts`,`detail`)数据库脚本如下:
CREATE DATABASE `ssmbuild`
USE `ssmbuild`
DROP TABLE IF EXISTS `book`
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` VARBINARY(200) NOT NULL COMMENT '描述',
KEY `bookID` (`bookID`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
INSERT INTO `books` ( `bookID`,`boodName`,`bookCounts`,`detail`) VALUES
(1,'Java',1,'从入门到放弃'),
(2,'MySQL',10,'从删库到跑路'),
(3,'Linux',5,'从进门到进牢')
数据库设计好了后打开idea创建我们的maven项目,把基本的几个包建立好,例如mapper(数据库层)、controller(控制层)、service(业务层)、pojo(实体类)
接下来便是引入我们的maven依赖,我们用到的有
依赖 junit,数据库驱动,连接池,servlet,jsp,mybatis,mybatis-spring,spring
junit依赖:
<!--junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
mysql依赖(注意版本要对应):
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.27</version>
</dependency>
数据库连接池(这里用到的是c3p0,也可以使用其他):
<!--数据库连接池: c3p0:dbcp-->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.4</version>
</dependency>
然后便是servlet和JSP依赖:
<!--Servlet - JSP-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
还有我们mybatis的依赖:
<!--mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.8</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.3</version>
</dependency>
最后便是我们spring中要用到的万能spring-webmvc依赖:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.15</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.3.RELEASE</version>
</dependency>
注意!
各种依赖的版本请自行更改至使用的对应版本!
然后把我们的配置文件也都创建好,方便后续直接编写。
这里列出mybatis和Spring配置的头部内容,官网较慢,日后可直接来博客获取。
mybaits:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 相关配置 -->
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
spring:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="..." class="...">
<!-- collaborators and configuration for this bean go here -->
</bean>
<bean id="..." class="...">
<!-- collaborators and configuration for this bean go here -->
</bean>
<!-- more bean definitions go here -->
</beans>
在写我们的数据库配置,建议使用外部properties文件,后续可以交给sping托管。
(若mysql版本在8.0以上,需在Driver前加cj,并且修改时区serverTimezone=Asia/Shanghai)
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/ssmbuild?useSSL=true&useUnicode=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai
user=root
password=Yj0717
配置了properties文件后,在mybatis-config.xml中导入使用
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="db.properties"/>
<typeAliases>
<package name="com.chenxi.pojo"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${user}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper class="com.chenxi.mapper.BookMapper.xml"/>
</mappers>
</configuration>
接下来便可以讲配置放一段落,开始我们实体、mapper、业务层的代码编写。
首先是我们的实体类books(尽量与数据库名相同):
package com.chenxi.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author chenxi
* @Date 2022/9/23
* @Description 实体类
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Books {
private int bookID;
private String bookName;
private int bookCounts;
private String detail;
}
上方三个注解是博主使用了lombok进行偷懒(lombok YYDS)
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
</dependency>
然后就是我们的BookMapper接口,定义了基本的CRUD方法:
package com.chenxi.mapper;
import com.chenxi.pojo.Books;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.context.annotation.ComponentScan;
import java.util.List;
//@ComponentScan(value = "com.chenxi.mapper")
public interface BookMapper {
//CRUD
int addBook(Books books);
int deleteBookById(@Param("bookID") int id);
int updateBook(Books books);
Books queryBookById(@Param("bookID") int id);
List<Books> queryAllBook();
}
再创建BookMapper.xml进行对数据库的具体操作(一定要记得namespace注册):
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.chenxi.mapper.BookMapper">
<insert id="addBood" parameterType="Books">
insert into ssmbuild.books (bookName,bookCounts,detail)
values(#{bookName},#{bookCounts},#{detail});
</insert>
<delete id="deleteBookById" parameterType="int">
delete from ssmbuild where bookID = #{bookID} ;
</delete>
<update id="updateBook" parameterType="Books">
update ssmbuild.books set bookName=#{bookName},bookCounts=#{bookCounts},detail=#{detail} = where bookID = #{bookID} ;
</update>
<select id="queryBookById" resultType="Books">
select * from ssmbuild.books where bookID=#{bookID} ;
</select>
<select id="queryAllBook" resultType="Books">
select * from ssmbuild.books ;
</select>
</mapper>
如果你对上方CRUD的语句不熟悉且写sql语句时没有具体提示的话,参考下方博客:
http://t.csdn.cn/svSVghttp://t.csdn.cn/svSVg
接下来就要再业务层实现我们的业务(业务层调用Mapper层对数据库进行操作):
package com.chenxi.service;
import com.chenxi.pojo.Books;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
public interface BookService {
//CRUD
int addBook(Books books);
int deleteBookById(int id);
int updateBook(Books books);
Books queryBookById(int id);
List<Books> queryAllBook();
}
实现类:
package com.chenxi.service;
import com.chenxi.mapper.BookMapper;
import com.chenxi.pojo.Books;
import java.util.List;
/**
* @author chenxi
* @Date 2022/9/23
* @Description
*/
public class BookServiceImpl implements BookService{
//service调用mapper层: 组合mapper层
private BookMapper bookMapper;
public void setBookMapper(BookMapper bookMapper) {
this.bookMapper = bookMapper;
}
@Override
public int addBook(Books books) {
return bookMapper.addBook(books);
}
@Override
public int deleteBookById(int id) {
return bookMapper.deleteBookById(id);
}
@Override
public int updateBook(Books books) {
return bookMapper.updateBook(books);
}
@Override
public Books queryBookById(int id) {
return bookMapper.queryBookById(id);
}
@Override
public List<Books> queryAllBook() {
return bookMapper.queryAllBook();
}
}
这样我们项目再mabatis框架下和数据库层面就撰写的差不多啦!!!
然后就是把我们的spring框架和springmvc框架整合进来!http://t.csdn.cn/MdjRS