通过学习SpringMvc框架,Spring框架,Mybatis框架基础知识后,尝试整合第一个ssm项目。以下是整合项目的学习笔记。
1.搭建Mybatis环境,创建数据库
- 1.1创建数据库与表,并且连接数据库。
create database `ssmbuild`;
use `ssmbuild`;
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 `boolID` (`bookID`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
insert into books(bookName,bookCounts,detail)values
('java','1','从入门到放弃'),
('MySQL','10','从删库到跑路'),
('Linux','5','从进门到回家');
连接数据库:
- 1.2 导入j项目所需jar包,以及静态资源导出问题
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.0.8</version>
</dependency>
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
<!---servlet-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!---mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.2</version>
</dependency>
<!---spring-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
</dependencies>
<!--静态资源导出问题-->
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
- 1.3 创建实体类对象book
package com.jack.pojo;
public class Books {
private int bookID;
private String bookName;
private int bookCounts;
private String detail;
public int getBookID() {
return bookID;
}
public void setBookID(int bookID) {
this.bookID = bookID;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public int getBookCounts() {
return bookCounts;
}
public void setBookCounts(int bookCounts) {
this.bookCounts = bookCounts;
}
public String getDetail() {
return detail;
}
public void setDetail(String detail) {
this.detail = detail;
}
@Override
public String toString() {
return "Books{" +
"booId=" + bookID +
", bookName='" + bookName + '\'' +
", bookCounts=" + bookCounts +
", detail='" + detail + '\'' +
'}';
}
}
- 1.4 创建接口mapper类
public interface BookMapper {
//增加一本书
int addBook(Books book);
//删除一本书
int deleteBook(@Param("bookID") int id);
//更新一本书
int updateBook(Books book);
//查询一本书
Books queryBookById(@Param("bookID") int id);
//查询全部书籍
List<Books> queryAllBook();
//通过书名查询书籍
List<Books> queryBookByName(@Param("bookName") String bookName);
}
-
1.5 配置mybatis文件
-
1.6 创建mapper的xml配置文件
parameterType属性表示向数据库添加的对象类型,resultType属性表示从数据库获取到对象类型
2.Spring环境搭建
搭建Spring环境时,我们需要了解到需要注入到spring容器中的对象有哪些,ssm项目放入spring容器中的对象有:dao层的mapper对象,service层的service对象。
所以spring的配置主要是为了在spring容器中创建上述两个对象。
2.1 spring-dao.xml文件配置
- 2.1.1 创建数据库的关联文件(存放数据库的四条基本信息)
- datebase.properties文件:
注意:使用mysql版本8.0+时,需要增加一个时区设置。
- 2.1.2 配置spring-dao.xml文件
1)关联数据库信息文件;
2)通过信息文件创建连接池(采用的是c3p0连接池);
3)获取SqlSessionFactory工厂;
4)通过MapperScannerConfigurer获取mapper类(注入SqlSessionFactory工厂,配置dao扫描包)。
<!--关联数据库配置文件-->
<context:property-placeholder location="classpath:database.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"/>
<!--绑定mybatis配置文件-->
<property name="configLocation" value="classpath:mybatis.xml"/>
</bean>
<!--配置dao扫描包,动态实现了dao接口可以注入到spring容器中!-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<property name="basePackage" value="com.jack.dao"/>
</bean>
-
2.1.2 配置spring-service.xml文件
获取到mapper类之后,通过spring的ioc操作获取到service类。
1)创建service接口与实现类 -
service接口:
public interface BookService {
//增加一本书
int addBook(Books book);
//删除一本书
int deleteBook(int id);
//更新一本书
int updateBook(Books book);
//查询一本书
Books queryBookById(int id);
//查询全部书籍
List<Books> queryAllBook();
//通过书名查询书籍
List<Books> queryBookByName(String bookName);
- service实现类,添加mapper属性
public class BookServiceImpl implements BookService {
//service调用dao层
private BookMapper bookMapper;
//添加set方法,让spring容器注入
public void setBookMapper(BookMapper bookMapper) {
this.bookMapper = bookMapper;
}
public int addBook(Books book) {
return bookMapper.addBook(book);
}
public int deleteBook(int id) {
return bookMapper.deleteBook(id);
}
public int updateBook(Books book) {
return bookMapper.updateBook(book);
}
public Books queryBookById(int id) {
return bookMapper.queryBookById(id);
}
public List<Books> queryAllBook() {
return bookMapper.queryAllBook();
}
public List<Books> queryBookByName(String bookName){
return bookMapper.queryBookByName(bookName);
}
}
2)配置spring-service.xml文件
直接注入mapper即可,以及添加事务支持
<bean id="bookServiceImpl" class="com.jack.service.BookServiceImpl">
<property name="bookMapper" ref="bookMapper"/>
</bean>
<!--声明事务配置-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--aop事务支持-->
注意:在创建spring-dao.xml与spring-service.xml文件的时候,最好将两个配置文件整合到一个Modules里面,这样在service类注入mapper类时才能正确识别到需要注入的具体mapper对象。创建的applicationContext.xml文件是为了在后端需要获取到mapper对象与service对象时,两者都只需通过applicationContext一个文件中获取
- applicationContext.xml文件:
3.Spring Mvc环境搭建
- 3.1 为本项目添加web项目支持
- 3.2 web.xml文件配置
1)注册Spring Mvc核心配置DispacherServlet;
2)添加乱码过滤配置;
<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>
-
3.3 配置spring-mvc.xml文件
-
采用注解方式
1)扫描controller类;
2)添加注解驱动;
3)静态资源导出问题;
4)视图解析器。
<context:component-scan base-package="com.jack.controller"/>
<mvc:annotation-driven/>
<mvc:default-servlet-handler/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
注意:同样applicationContext.xml文件需要import此处spring-mvc.xml文件。
- 3.4 创建Controller类
总结
环境配置都是固定的,只需要将一些配置的逻辑熟记,另外还有sql语句的编写。配置文件时,一定要将每个xml文件放入一个Modules里面,才能ssm项目各个配置产生关联。