以一个简单的图书CRUD为例
一、新建数据库表
CREATE DATABASE intergration;
USE intergration;
CREATE TABLE books
(
book_id INT NOT NULL AUTO_INCREMENT COMMENT '书id',
book_name VARCHAR(100) NOT NULL COMMENT '书名',
book_count INT NOT NULL COMMENT '数量',
book_detail VARCHAR(200) NOT NULL COMMENT '描述',
KEY book_id (book_id)
) ENGINE = INNODB
DEFAULT CHARSET = utf8;
INSERT INTO books(book_id, book_name, book_count, book_detail)
VALUES (1, 'Java', 100, 'JavaDetail'),
(2, 'MySQL', 105, 'MySQLDetail'),
(3, 'Linux', 500, 'LinuxDetail')
二、新建Maven项目
三、配置pom.xml
添加依赖
<dependencies>
<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet.jsp/jsp-api -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.4</version>
</dependency>
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>jsr250-api</artifactId>
<version>1.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.75</version>
</dependency>
</dependencies>
配置静态资源导出问题
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
编码问题
在<properties>
里新增一行:
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
四、整合Mybatis
1、为数据库表创建实体类
放在包pojo
下
编写实体类Books
package pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Books {
private int bookId;
private String bookName;
private int bookCount;
private String bookDetail;
}
2、编写dao层
新建dao包
编写接口BooksMapper
package dao;
import org.apache.ibatis.annotations.Param;
import pojo.Books;
import java.util.List;
public interface BooksMapper {
//查询所有书籍
List<Books> queryAllBook();
//添加一本书籍
void addBook(Books book);
//删除一本书籍
void deleteBookById(@Param("bookId") int id);
//修改一本书籍
void updateBook(Books book);
//根据id查询一本书籍
Books queryBookById(@Param("bookId") int id);
}
编写映射文件BookMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="dao.BooksMapper">
<resultMap id="bookMap" type="Books" >
<result property="bookId" column="book_id"/>
<result property="bookName" column="book_name"/>
<result property="bookCount" column="book_count"/>
<result property="bookDetail" column="book_detail"/>
</resultMap>
<select id="queryAllBook" resultMap="bookMap">
select *
from intergration.books;
</select>
<insert id="addBook" parameterType="Books">
insert into intergration.books (book_name, book_count, book_detail)
values (#{bookName}, #{bookCount}, #{bookDetail})
</insert>
<delete id="deleteBookById" parameterType="int">
delete
from intergration.books
where book_id = #{bookId}
</delete>
<update id="updateBook" parameterType="Books">
update intergration.books
set book_name=#{bookName},
book_count=#{bookCount},
book_detail=#{bookDetail}
where book_id = #{bookId}
</update>
<select id="queryBookById" parameterType="int" resultMap="bookMap">
select *
from intergration.books
where book_id = #{bookId};
</select>
</mapper>
3、在resources
资源文件夹下新建mybatis-config.xml
配置文件
配置别名和映射
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--配置数据源交给Spring-->
<typeAliases>
<package name="pojo"/>
</typeAliases>
<mappers>
<mapper class="dao.BooksMapper"/>
</mappers>
</configuration>
4、编写service层
新建service
包
编写接口BooksService
package service;
import org.apache.ibatis.annotations.Param;
import pojo.Books;
import java.util.List;
public interface BooksService {
//查询所有书籍
List<Books> queryAllBook();
//添加一本书籍
void addBook(Books book);
//删除一本书籍
void deleteBookById(@Param("book_id") int id);
//修改一本书籍
void updateBook(Books book);
//根据书名模糊查询一本书籍
Books queryBookById(@Param("bookId") int id);
}
编写实现类BooksServiceImpl
package service;
import dao.BooksMapper;
import pojo.Books;
import java.util.List;
public class BooksServiceImpl implements BooksService {
private BooksMapper mapper;
public void setMapper(BooksMapper mapper) {
this.mapper = mapper;
}
@Override
public List<Books> queryAllBook() {
return mapper.queryAllBook();
}
@Override
public void addBook(Books book) {
mapper.addBook(book);
}
@Override
public void deleteBookById(int id) {
mapper.deleteBookById(id);
}
@Override
public void updateBook(Books book) {
mapper.updateBook(book);
}
@Override
public Books queryBookById(int id) {
return mapper.queryBookById(id);
}
}
五、整合Spring
1、Spring整合dao层
在resources
资源文件夹下新建数据库配置文件db.properties
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/intergration?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Hongkong
user=root
password=123456
在resources
资源文件夹下新建spring-dao.xml
<1> 关联数据库配置文件
<2> 配置数据库连接池
<3> 配置SqlSessionFactory
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd ">
<!--1.关联数据库配置文件-->
<context:property-placeholder location="classpath:db.properties"/>
<!--2.配置数据库连接池-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${user}"/>
<property name="password" value="${password}"/>
</bean>
<!--3.配置SqlSessionFactory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!--绑定mybatis的配置文件-->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>
<!--配置dao接口扫描包,动态实现了dao接口可以注入到spring容器中-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--注入sqlSessionFactory-->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<!--扫描要扫描的dao包-->
<property name="basePackage" value="dao"/>
</bean>
</beans>
2、Spring整合service层
在resources
资源文件夹下新建spring-service.xml
<1> 扫描service下的包
<2> 将所有的业务类注入到spring(也可以通过配置或注解实现)
<3> 声明式事务配置
<4> AOP事务支持
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd ">
<!--1.扫描service下的包-->
<context:component-scan base-package="service"/>
<!--2.将所有的业务类注入到spring。也可以通过配置或注解实现-->
<bean id="bookServiceImpl" class="service.BooksServiceImpl">
<property name="mapper" ref="booksMapper"/>
</bean>
<!--3.声明式事务配置-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!--注入数据源-->
<property name="dataSource" ref="dataSource"/>
</bean>
<!--4.AOP事务支持-->
<!--配置事务通知-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<!--给哪些方法配置事务-->
<tx:attributes>
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<!--配置事务切入-->
<aop:config>
<aop:pointcut id="txPointCut" expression="execution(* dao.*.* (..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"/>
</aop:config>
</beans>
六、整合SpringMVC
1.编写controller层
新建controller
包
编写类BooksController
内容以及页面等…略…
2.在resources
资源文件夹下新建spring-mvc.xml
<1> 配置注解驱动
<2> 静态资源过滤
<3> 配置controller层的扫描包
<4> 编写视图解析器
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd ">
<!--1.配置注解驱动-->
<mvc:annotation-driven/>
<!--2.静态资源过滤-->
<mvc:default-servlet-handler/>
<!--3.配置controller的扫描包-->
<context:component-scan base-package="controller"/>
<!--4.编写视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
3.在resources
资源文件夹下新建applicationContext.xml
整合所有的配置文件
<?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
http://www.springframework.org/schema/beans/spring-beans.xsd">
<import resource="spring-dao.xml"/>
<import resource="spring-service.xml"/>
<import resource="spring-mvc.xml"/>
</beans>
4.配置web.xml
文件
<1> 配置DispatcherServlet
<2> 配置乱码过滤器
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!--乱码过滤-->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--Session时效 这个阶段要不要的无所谓-->
<session-config>
<session-timeout>15</session-timeout>
</session-config>
</web-app>