在上一篇文章IDEA使用maven搭建Spring + SpringMVC环境的基础上,我们再将MyBatis框架整合进去,这样就可以搭建一个完整的SSM环境了。
1.在pom.xml中添加mysql,jdcb,mybatis依赖并导入依赖,所有依赖如下:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<springVersion>4.2.6.RELEASE</springVersion>
<mysqlVersion>5.1.38</mysqlVersion>
<c3p0Version>0.9.1.2</c3p0Version>
<myBatisVersion>3.4.1</myBatisVersion>
</properties>
<dependencies>
<!--spring框架的基础包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${springVersion}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${springVersion}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${springVersion}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${springVersion}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${springVersion}</version>
</dependency>
<!--springMVC的两个包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${springVersion}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${springVersion}</version>
</dependency>
<!--jdbc依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${springVersion}</version>
</dependency>
<!--mysql依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysqlVersion}</version>
<scope>runtime</scope>
</dependency>
<!--myBaits依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${myBatisVersion}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
<!--连接池-->
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>${c3p0Version}</version>
</dependency>
<!--junit包-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!--测试依赖包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${springVersion}</version>
<scope>test</scope>
</dependency>
</dependencies>
2.在数据库中添加Book数据表,并填充数据,sql语句如下:
DROP TABLE IF EXISTS `book`;
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=1004 DEFAULT CHARSET=utf8 COMMENT='图书表';
#
# Data for table "book"
#
INSERT INTO `book` VALUES (1000,'Java程序设计',9),(1001,'数据结构',7),(1002,'设计模式',7),(1003,'编译原理',9);
3.创建pojo文件夹并新建Book.java类
package pojo;
/**
* Created By Seven.wk
* Description: Book对象
* Created At 2018/09/13
*/
public class Book {
private int bookId;// 图书ID
private String name;// 图书名称
private int number;// 馆藏数量
public Book() {
}
public int getBookId() {
return bookId;
}
public void setBookId(int bookId) {
this.bookId = bookId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
@Override
public String toString() {
return "Book{" +
"bookId=" + bookId +
", name='" + name + '\'' +
", number=" + number +
'}';
}
}
4.创建dao层文件夹并创建dao层接口
package dao;
import org.apache.ibatis.annotations.Param;
import pojo.Book;
import java.util.List;
/**
* Created By Seven.wk
* Description: dao层接口
* Created At 2018/09/13
*/
public interface BookMapper {
/**
* 通过ID查询单本图书
*
* @param bookId
* @return
*/
Book queryById(int bookId);
/**
* 查询所有图书
*
* @param offset 查询起始位置
* @param limit 查询条数
* @return
*/
List<Book> queryAll(@Param("offset") int offset, @Param("limit") int limit);
/**
* 减少馆藏数量
*
* @param bookId
* @return 如果影响行数等于>1,表示更新的记录行数
*/
int reduceNumber(int bookId);
}
5.在resources文件夹下新建mappers文件夹并存放dao层映射文件
6.新建BookMapper.xml映射文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="dao.BookMapper">
<resultMap id="BaseResultMap" type="pojo.Book">
<id column="book_id" property="bookId" jdbcType="BIGINT"/>
<result column="name" property="name" jdbcType="VARCHAR"/>
<result column="number" property="number" jdbcType="INTEGER"/>
</resultMap>
<sql id="Base_Column_List">
book_id, name, number
</sql>
<select id="queryById" parameterType="INTEGER" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from book
where book_id = #{id}
</select>
<select id="queryAll" parameterType="Map" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from book
limit #{limit}
offset #{offset}
</select>
<update id="reduceNumber" parameterType="INTEGER">
update book
set number = number - 1
where
book_id = #{bookId}
</update>
</mapper>
7.在resources文件夹下新建jdbc文件夹,存放jdbc.properties作为数据库的配置文件
jdbc.properties
jdbc.driver = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/servlet?useUnicode=true&characterEncoding=utf8
jdbc.username = root
jdbc.password = root
8.在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"
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">
<!--扫描service文件夹下的包-->
<context:component-scan base-package="service"/>
<!--加载jdbc的配置文件-->
<context:property-placeholder location="classpath:jdbc/jdbc.properties"/>
<!--配置数据库连接池-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!--连接池属性-->
<property name="driverClass" value="${jdbc.driver}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<!--c3p0连接池的私有属性-->
<property name="maxPoolSize" value="30"/>
<property name="minPoolSize" value="10"/>
<!--连接关闭后不自动commit-->
<property name="autoCommitOnClose" value="false"/>
<!--连接超时时间-->
<property name="checkoutTimeout" value="10000"/>
<!--连接失败重试次数-->
<property name="acquireRetryAttempts" value="2"/>
</bean>
<!--配置SqlSessionFactory对象-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--注入数据库连接池-->
<property name="dataSource" ref="dataSource"/>
<!--扫描实体包-->
<property name="typeAliasesPackage" value="pojo"/>
<!--扫描sql配置文件:mapper需要的xml文件-->
<property name="mapperLocations" value="classpath:mappers/*.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>
<!--配置事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!--注入数据库连接池-->
<property name="dataSource" ref="dataSource"/>
</bean>
</beans>
至此,前面没有问题的话,一个ssm环境就简单的整合完成了!下面我们搭建测试环境测试dao层接口
9.在pom.xml引入测试的依赖
<!--测试依赖包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${springVersion}</version>
<scope>test</scope>
</dependency>
10.新建BookMapper.java 的测试类BookMapperTest.java,并添加上下文,代码如下:
package dao;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import pojo.Book;
import java.util.List;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"classpath:spring/applicationContext.xml"})
public class BookMapperTest {
@Autowired
private BookMapper bookMapper;
@Test
public void queryById() {
int id = 1003;
Book book = bookMapper.queryById(id);
System.out.println(book.toString());
}
@Test
public void queryAll() {
List<Book> bookList = bookMapper.queryAll(1, 3);
for(Book book : bookList)
System.out.println(book);
}
@Test
public void reduceNumber() {
int result = bookMapper.reduceNumber(1000);
System.out.println(result);
}
}
11.进行测试,测试通过,则环境整合完成!
12.项目整体的目录结构如下: