2.4.3 创建日志文件log4j.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender"> <param name="Encoding" value="UTF-8" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n" /> </layout> </appender> <logger name="java.sql"> <level value="debug" /> </logger> <logger name="org.apache.ibatis"> <level value="info" /> </logger> <root> <level value="debug" /> <appender-ref ref="STDOUT" /> </root> </log4j:configuration>
2.5 创建Spring的配置文件并配置
在resources下创建spring.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 https://www.springframework.org/schema/context/spring-context.xsd"> <!--扫描组件--> <context:component-scan base-package="edu.hncj.ssm"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan> <!-- 引入jdbc.properties --> <context:property-placeholder location="classpath:jdbc.properties" /> <!-- 配置Druid数据源 --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="${jdbc.driver}"></property> <property name="url" value="${jdbc.url}"></property> <property name="username" value="${jdbc.username}"></property> <property name="password" value="${jdbc.password}"></property> </bean> <!-- 配置用于创建SqlSessionFactory的工厂bean --> <bean class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 设置MyBatis配置文件的路径(可以不设置) --> <property name="configLocation" value="classpath:mybatis-config.xml"> </property> <!-- 设置数据源 --> <property name="dataSource" ref="dataSource"></property> <!-- 设置类型别名所对应的包 --> <property name="typeAliasesPackage" value="edu.hncj.ssm.pojo"> </property> <!-- 设置映射文件的路径 若映射文件所在路径和mapper接口所在路径一致,则不需要设置 --> <!-- <property name="mapperLocations" value="classpath:mapper/*.xml"> </property> --> </bean> <!-- 配置mapper接口的扫描配置 由mybatis-spring提供,可以将指定包下所有的mapper接口创建动态代理 并将这些动态代理作为IOC容器的bean管理 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="edu.hncj.ssm.mapper"></property> </bean> </beans>
2.6 SSM整合测试
2.6.1 创建表
在ssm数据库下创建t_student表,见表语句如下:
CREATE TABLE `t_student` ( `stu_id` int(11) NOT NULL AUTO_INCREMENT, `stu_name` varchar(20) DEFAULT NULL, `age` int(11) DEFAULT NULL, `sex` char(1) DEFAULT NULL, `email` varchar(50) DEFAULT NULL, PRIMARY KEY (`stu_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 INSERT INTO `ssm`.`t_student`(`stu_id`, `stu_name`, `age`, `sex`, `email`) VALUES (100, '张三', 21, '男', '123@qq.com'); INSERT INTO `ssm`.`t_student`(`stu_id`, `stu_name`, `age`, `sex`, `email`) VALUES (101, '张4', 22, '男', '123@163.com'); INSERT INTO `ssm`.`t_student`(`stu_id`, `stu_name`, `age`, `sex`, `email`) VALUES (102, '张5', 22, '男', '123@126.com'); INSERT INTO `ssm`.`t_student`(`stu_id`, `stu_name`, `age`, `sex`, `email`) VALUES (103, '张6', 20, '男', '620@qq.com'); INSERT INTO `ssm`.`t_student`(`stu_id`, `stu_name`, `age`, `sex`, `email`) VALUES (104, '张7', 19, '女', '719@qq.com'); INSERT INTO `ssm`.`t_student`(`stu_id`, `stu_name`, `age`, `sex`, `email`) VALUES (105, '张8', 21, '男', '821@qq.com');
在数据库执行,结果如下:
2.6.2 创建实体类
创建Student类
package edu.hncj.ssm.pojo; public class Student { private Integer stuId; private String stuName; private Integer age; private String sex; private String email; public Student() { } public Student(Integer stuId, String stuName, Integer age, String sex, String email) { this.stuId = stuId; this.stuName = stuName; this.age = age; this.sex = sex; this.email = email; } public Integer getStuId() { return stuId; } public void setStuId(Integer stuId) { this.stuId = stuId; } public String getStuName() { return stuName; } public void setStuName(String stuName) { this.stuName = stuName; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } @Override public String toString() { return "Student{" + "stuId=" + stuId + ", stuName='" + stuName + '\'' + ", age=" + age + ", sex='" + sex + '\'' + ", email='" + email + '\'' + '}'; } }
2.6.3 创建Mapper接口和映射文件
在edu.hncj.ssm.mapper下创建StudentMapper接口:
package edu.hncj.ssm.mapper; import edu.hncj.ssm.pojo.Student; import java.util.List; public interface StudentMapper { // 返回所有的Student数据 List<Student> getStudentList(); }
在resources下的edu.hncj.ssm.mapper目录下创建 StudentMapper.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="edu.hncj.ssm.mapper.StudentMapper"> <!-- List<Student> getStudentList();--> <select id="getStudentList" resultType="Student"> select * from t_student </select> </mapper>
2.6.4 创建service层接口和实现类
在edu.hncj.ssm.service下创建StudentService接口,代码如下:
package edu.hncj.ssm.service; import edu.hncj.ssm.pojo.Student; import java.util.List; public interface StudentService { // 返回所有student数据 List<Student> getStudentList(); }
在在edu.hncj.ssm.service.impl下创建StudentService接口的实现类StudentServiceImpl,代码如下:
package edu.hncj.ssm.service.impl; import edu.hncj.ssm.mapper.StudentMapper; import edu.hncj.ssm.pojo.Student; import edu.hncj.ssm.service.StudentService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class StudentServiceImpl implements StudentService { // 自动加载 StudentMapper // 在spring.xml中的 // <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> // <property name="basePackage" value="edu.hncj.ssm.mapper"></property> // </bean> @Autowired private StudentMapper studentMapper; @Override public List<Student> getStudentList() { List<Student> studentList = studentMapper.getStudentList(); return studentList; } }
2.6.5 创建Controller层控制器
在edu.hncj.ssm.controller下创建StudentController类,代码如下:
package edu.hncj.ssm.controller; import edu.hncj.ssm.pojo.Student; import edu.hncj.ssm.service.StudentService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import java.util.List; @Controller public class StudentController { @Autowired private StudentService studentService; @RequestMapping(value = "/student",method = RequestMethod.GET) public String getStudentList(Model model){ List<Student> list = studentService.getStudentList(); model.addAttribute("list",list); return "student_list"; } }
2.6.6 创建index.html
在src/main/webapp/WEB-INF目录下创建templates目录,在templates目录下创建index.html,内容如下:
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>index.html</h1> <a th:href="@{/student}">查询所有的学生信息</a> <hr> </body> </html>
在springmvc.xml中配置了当访问根路径时,跳转到index.html页面。在该页面中有/student的请求,会跳转到student_list页面。
2.6.7 创建student_list页面
在templates目录下创建student_list.html,内容如下:
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>学生列表</title> </head> <body> <table> <tr> <th colspan="6">学生列表</th> </tr> <tr> <th>序号</th> <th>学生姓名</th> <th>年龄</th> <th>性别</th> <th>邮箱</th> <th>操作</th> </tr> <tr th:each="student,status : ${list}"> <td th:text="${status.count}"></td> <td th:text="${student.stuName}"></td> <td th:text="${student.age}"></td> <td th:text="${student.sex}"></td> <td th:text="${student.email}"></td> <td> <a href="">删除</a> <a href="">修改</a> </td> </tr> </table> </body> </html>
2.6.8 测试运行
运行此web项目,在浏览器端访问:
http://localhost:8080/chapter15 • 1
跳转到index.html页面,输出如下:
点击 查询所有的学生信息连接,跳转到studet_list.html页面,如下:
2.7 SSM整合总结
SSM整合的实现步骤如下:
0.创建数据库, 创建表
1.新建maven web项目
2.加入依赖
springmvc,spring,mybatis三个框架的依赖,jackson依赖,mysql驱动,druid连接池
jsp,servlet依赖