一、项目介绍
使用了
SSM
(Spring+SpringMVC+MyBatis
)框架,查询数据库中的数据并显示到页面上。末尾资料上有全部源码以供参考。效果如下:
二、项目准备
2.1 准备数据库
CREATE DATABASE /*!32312 IF NOT EXISTS*/`ssm` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `ssm`;
DROP TABLE IF EXISTS `departments`;
CREATE TABLE `departments` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
insert into `departments`(`id`,`name`) values
(1,'教学部'),
(2,'教务部'),
(3,'运营部'),
(4,'咨询部'),
(5,'就业部'),
(6,'财务部');
DROP TABLE IF EXISTS `employees`;
CREATE TABLE `employees` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`last_name` varchar(100) NOT NULL,
`email` varchar(100) DEFAULT NULL,
`gender` int(11) DEFAULT NULL,
`dept_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `dept_id` (`dept_id`),
CONSTRAINT `employees_ibfk_1` FOREIGN KEY (`dept_id`) REFERENCES `departments` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
insert into `employees`(`id`,`last_name`,`email`,`gender`,`dept_id`) values
(1,'韩总','hanyanbing@atguigu.cn',1,1),
(2,'马云','mayun@alibaba.com',1,2),
(3,'马化腾','mahuateng@tencent.com',1,3);
2.2 创建web
项目(自行准备)
2.3 准备jar
包
预览
备注:有不理解的自行百度,都是必不可少的jar
包
三、项目开始
3.1 总预览
3.2 web.xml
配置文件
<!--配置前端控制器dispatcherServlet-->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:beans.xml</param-value>
</context-param>
<!--配置监听器-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
3.3 配置SpringMVC
配置文件(Springmvc.xml
)
<!--配置自动扫描的包-->
<context:component-scan base-package="com.atguigu.ssm" use-default-filters="false">
<!--配置只扫描Controller-->
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!--配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="viewResolver">
<!--配置前缀-->
<property name="prefix" value="/WEB-INF/views/"/>
<!--配置后缀-->
<property name="suffix" value=".jsp"/>
</bean>
<mvc:annotation-driven/>
备注:这里的
mvc
导入的是xmlns:mvc="http://www.springframework.org/schema/mvc"
还会有一些后续的配置如处理静态资源等因为这个项目不需要所以不做配置
3.4 数据库properties
文件
#key=value
jdbc.username=root
jdbc.password=123456
jdbc.url=jdbc:mysql://localhost:3306/ssm
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.initialSize=5
jdbc.maxActive=10
3.4 编写Spring
配置文件(Spring.xml
)
<!--配置自动扫描的包-->
<context:component-scan base-package="com.atguigu.ssm">
<!--配置不扫描Controller-->
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!--引入外部属性文件-->
<context:property-placeholder location="classpath:druid.properties"/>
<!--配置数据源-->
<bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="url" value="${jdbc.url}"/>
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="initialSize" value="${jdbc.initialSize}"/>
<property name="maxActive" value="${jdbc.maxActive}"/>
</bean>
<!--配置事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="druidDataSource"/>
</bean>
<!--开启事务注解支持-->
<tx:annotation-driven></tx:annotation-driven>
<!--整合MyBatis-->
<!--配置SqlSessionFactoryBean-->
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--配置数据源-->
<property name="dataSource" ref="druidDataSource"></property>
<!--配置MyBatis全局配置文件的路径-->
<property name="configLocation" value="classpath:mybatis-config.xml"></property>
<!--配置Mapper映射文件的路径-->
<property name="mapperLocations" value="classpath:com/atguigu/ssm/mapper/*.xml"></property>
<!--MyBatis中其他配置文件中的其他配置再此,如起别名等-->
</bean>
<!--2.扫描Mapper接口-->
<mybatis-spring:scan base-package="com.atguigu.ssm.mapper"></mybatis-spring:scan>
备注:这里的
tx
导入的是xmlns:tx="http://www.springframework.org/schema/tx"
3.4 编写页面(index.jsp
)
<%--写一个超链接--%>
<a href="${pageContext.request.contextPath}/getEmployee">获取所有员工</a>
3.5 编写请求(EmployeeController.java
)
@Controller
public class EmployeeController {
@Autowired
private EmployeeService employeeService;
@RequestMapping(value = "/getEmployee",method = RequestMethod.GET)
public String getEmployee(Map<String,Object> map){
//调用EmployeeService中的获取员工的方法
List<Employee> employees = employeeService.getEmployee();
map.put("emps",employees);
System.out.println(employees);
return "list";
}
}
这里返回的是字符串,在
springmvc
视图解析器中已经配置过前缀和后缀了,他会自动生成路径。
3.6 编写跳转页面
<center>
<c:if test="${empty requestScope.emps}">
<h1>没有任何员工</h1>
</c:if>
<c:if test="${not empty requestScope.emps}">
<h1>员工信息</h1>
<table border="1" cellpadding="10" cellspacing="0">
<tr>
<th>Id</th>
<th>LastName</th>
<th>Email</th>
<th>Gender</th>
<th>Department</th>
<th colspan="2">操作</th>
</tr>
<c:forEach items="${requestScope.emps}" var="emp">
<tr>
<td>${emp.id}</td>
<td>${emp.lastName}</td>
<td>${emp.email}</td>
<td>
<c:if test="${emp.gender == 1}">
男
</c:if>
<c:if test="${emp.gender == 0}">
女
</c:if>
</td>
<td>${emp.department.departmentName}</td>
<td><a href="#">Edit</a> </td>
<td><a href="#">Delete</a></td>
</tr>
</c:forEach>
</table>
</c:if>
<br>
<br>
<a>添加新员工</a>
</center>
备注:先引入
jstl
在开头写<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
3.7 编写实体类(Employee
,Department
)
public class Department {
private Integer id;
private String departmentName;
···空参有参构造
···get、set方法
···toString方法
}
public class Employee {
private Integer id;
private String lastName;
private String email;
private Integer gender;
private Department department;
···空参有参构造
···get、set方法
···toString方法
3.8 编写service(EmployeeService.java
、EmployeeServiceImpl.java
)
public interface EmployeeService {
//获取所有员工信息
List<Employee> getEmployee();
}
@Service
public class EmployeeServiceImpl implements EmployeeService {
@Autowired
private EmployeeMapper employeeMapper;
@Override
public List<Employee> getEmployee() {
//调用employeeMapper中获取所有员工的方法
List<Employee> employees = employeeMapper.getEmployees();
return employees;
}
}
3.9 编写Mapper
(MyBatis
的全局配置文件、EmployeeMapper.java
、EmployeeMapper.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">
<!--MyBatis的全局配置文件-->
<configuration>
<!--2.settings:用来设置mybatis中的重要配置-->
<settings>
<!--开启驼峰命名自动注释-->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
</configuration>
public interface EmployeeMapper {
List<Employee> getEmployees();
}
<?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">
<!--
创建接口对应的SQL映射文件(Mapper映射文件)
namespace属性:指定为接口的全类名
-->
<mapper namespace="com.atguigu.ssm.mapper.EmployeeMapper">
<select id="getEmployees" resultMap="myEmp" >
select e.*,d.id d_id,d.name d_name
from employees e
left join departments d
on e.dept_id = d.id
</select>
<!--自定义高级映射-->
<resultMap id="myEmp" type="com.atguigu.ssm.entities.Employee">
<!--映射文件-->
<id column="id" property="id"></id>
<result column="last_name" property="lastName"></result>
<result column="email" property="email"></result>
<result column="gender" property="gender"></result>
<result column="last_name" property="lastName"></result>
<association property="department" javaType="com.atguigu.ssm.entities.Department">
<!--映射文件-->
<id column="d_id" property="id"></id>
<!--映射其他类-->
<result column="d_name" property="departmentName"></result>
</association>
</resultMap>
</mapper>
3.10 总结
到现在项目部分算是写完了开始配置Tomcat就可以运行了
项目源代码参考SSM(Spring+SpringMVC+MyBatis)项目实例