1搭建环境,导入maven依赖
<!-- 定义属性 -->
<properties>
<!-- 设置项目字符集 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- spring版本号 -->
<spring.version>4.3.2.RELEASE</spring.version>
</properties>
<dependencies>
<!-- 配置servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<!-- 配置jsp -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.2.1</version>
<scope>provided</scope>
</dependency>
<!-- spring web -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- spring webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<!-- mybatis整合spring时的插件 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
<!-- druid数据源 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.8</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>${spring.version}</version>
</dependency>
<!--使用AspectJ方式注解需要相应的包 -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.6.11</version>
</dependency>
<!--使用AspectJ方式注解需要相应的包 -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.11</version>
</dependency>
<!-- jstl -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
</dependencies>
<build>
<!-- 配置tomcat插件,web端 -->
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<!-- 配置项目的请求路径 -->
<path>/ssm</path>
<!-- 配置服务器端口号 -->
<port>10000</port>
</configuration>
</plugin>
</plugins>
</build>
2建表、建实体类
Sql:
CREATE DATABASE /*!32312 IF NOT EXISTS*/`edu360` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `edu360`;
/*Table structure for table `dept` */
DROP TABLE IF EXISTS `dept`;
CREATE TABLE `dept` (
`DEPTNO` int(2) NOT NULL,
`DNAME` varchar(14) DEFAULT NULL,
`LOC` varchar(13) DEFAULT NULL,
PRIMARY KEY (`DEPTNO`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*Data for the table `dept` */
insert into `dept`(`DEPTNO`,`DNAME`,`LOC`) values (10,'ACCOUNTING','NEW YORK'),(20,'RESEARCH','DALLAS'),(30,'SALES','CHICAGO'),(40,'OPERATIONS','BOSTON'),(70,'采购部','大连'),(124,'小偷业务部','火车站'),(200,'sales','beijing'),(201,'测试二部','日本'),(202,'大数据三部','韩国'),(203,'大数据四部','朝鲜'),(210,'sales','beijing'),(220,'sales','beijing'),(230,'sales','beijing'),(240,'sales','beijing'),(250,'sales','beijing'),(301,'大数据44部','巴厘岛'),(302,'大数据五部','瑞士'),(303,'大数据66部','五道口'),(400,'AI一部','上海浦东'),(401,'AI一部','上海浦东'),(450,'猴子基地','水帘洞'),(452,'烤牛馆','火焰山'),(3005,'大数据二部','永丰基地');
实体类:
public class DeptEntity {
public int deptno;
public String dname;
public String loc;
......
}
3创建映射文件
<?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="">
<!-- 查询全部 -->
<select id="selectAllDept" resultType="cn.edu360.ssm.dao.entity.DeptEntity">
select * from dept
</select>
<!-- 传参添加部门信息 -->
<insert id="insertDeptParams" parameterType="cn.edu360.ssm.dao.entity.DeptEntity">
INSERT INTO dept
VALUES(#{deptno},#{dname},#{loc})
</insert>
<!-- ID查询 -->
<select id="selectDeptById" parameterType="int" resultType="cn.edu360.ssm.dao.entity.DeptEntity">
select * from dept
where deptno=#{dn}
</select>
<!-- id删除 -->
<delete id="delDeptById" parameterType="int">
delete from dept where
deptno=#{dn}
</delete>
<!-- id更新 -->
<update id="updDeptById" parameterType="cn.edu360.ssm.dao.entity.DeptEntity">
update dept set
dname=#{dname},loc=#{loc} where deptno=#{deptno}
</update>
<!-- 模糊查询 -->
<select id="selectDeptByLike" parameterType="java.lang.String"
resultType="cn.edu360.ssm.dao.entity.DeptEntity">
SELECT * FROM dept WHERE dname LIKE CONCAT('%',#{keyWord},'%')
</select>
</mapper>
4创建dao层接口
public interface DeptMapper {
/**查询全部*/
public List<DeptEntity> selectAllDept();
/**添加部门*/
public int insertDeptParams(DeptEntity dept);
/**ID查询*/
public DeptEntity selectDeptById(int id);
/**ID删除*/
public int delDeptById(int id);
/**名称模糊查询*/
public List<DeptEntity> selectDeptByLike(String keyWord);
}
注意:同时修改映射文件的namespace
namespace="cn.edu360.ssm.dao.mapper.DeptMapper"
5创建mybatis配置文件
<?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>
</configuration>
6创建IOC容器整合mybatis
6.1配置druid数据源
创建db.properties文件
6.2SqlSessionFactoryBean
<!-- SqlSessionFactory -->
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注入数据源 -->
<property name="dataSource" ref="dataSource"></property>
<!-- 加载配置文件 -->
<property name="configLocation" value="classpath:mybatisConfig.xml"></property>
<!-- 加载映射文件 -->
<property name="mapperLocations" value="classpath:cn/edu360/ssm/dao/entity/*.xml"></property>
</bean>
6.3TransactionManager
<!-- 事务管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 注入数据源 -->
<property name="dataSource" ref="dataSource"></property>
</bean>
6.4启用注解事务
<!-- 启用基于注解实现事务管理 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
6.5扫描dao层接口
<!-- 扫描dao层接口 -->
<bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="cn.edu360.ssm.dao.mapper"></property>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean"></property>
</bean>
7创建业务层接口
/**
* 业务层接口
* @author Administrator
*
*/
public interface DeptServiceInter {
/**查询全部*/
public List<DeptEntity> selectAllDept();
/**添加部门*/
public int insertDeptParams(DeptEntity dept);
/**ID查询*/
public DeptEntity selectDeptById(int id);
/**ID删除*/
public int delDeptById(int id);
/**名称模糊查询*/
public List<DeptEntity> selectDeptByLike(String keyWord);
}
8创建业务层实现类
/**
* 业务层实现类
* @author Administrator
*
*/
@Service("deptServiceImpl")
public class DeptServiceImpl implements DeptServiceInter {
//注入dao层
@Autowired
public DeptMapper mapper;
public List<DeptEntity> selectAllDept() {
return mapper.selectAllDept();
}
@Transactional
public int insertDeptParams(DeptEntity dept) {
return mapper.insertDeptParams(dept);
}
public DeptEntity selectDeptById(int id) {
return mapper.selectDeptById(id);
}
@Transactional
public int delDeptById(int id) {
return mapper.delDeptById(id);
}
public List<DeptEntity> selectDeptByLike(String keyWord) {
return mapper.selectDeptByLike(keyWord);
}
}
9创建ioc容器,管理dao层和Service层的bean
启动基于classpath扫描方式管理bean的注解
<!-- 请用classpath注解 -->
<context:component-scan base-package="cn.edu360.ssm"/>
10给dao层、Service层添加注解管理及实现依赖注入+业务层添加事务
11单元测试,测试每个业务方法均能正常运行
12整合springmvc之创建springmvc配置文件
启用mvc注解、处理静态资源、配置试图解析器、配置扫描页面控制器
<!-- 启用mvc注解 -->
<mvc:annotation-driven />
<!-- 静态资源 -->
<mvc:default-servlet-handler/>
<!-- 启用classpath扫描 -->
<context:component-scan base-package="cn.edu360.ssm"></context:component-scan>
<!-- ViewResolver -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/" />
<property name="suffix" value=".jsp" />
</bean>
13整合springmvc之配置前端控制器
同时可以配置springmvc的中文乱码过滤器
14整合springmvc之创建页面控制器
添加@Controller注解,Service层注入。
15加载spring的ioc容器
通过上下文参数配置需要加载的ioc容器、通过监听器加载ioc容器
<!-- 在servlet上下文中配置ioc容器文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext-*.xml</param-value>
</context-param>
<!-- 通过监听器加载ioc容器 -->
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
16控制器中实现id查询
/** ID查询 */
@RequestMapping("/selectDeptById")
public ModelAndView selectDeptById(int deptno) {
ModelAndView mav=new ModelAndView();
DeptEntity dept=service.selectDeptById(deptno);
//把数据放入model中
mav.addObject("dept", dept);
mav.setViewName("detail");
return mav;
}
17查询全部
/** 查询全部 */
@RequestMapping("/selectAllDept")
public ModelAndView selectAllDept() {
ModelAndView mav=new ModelAndView();
List<DeptEntity> list=service.selectAllDept();
mav.addObject("deptList", list);
mav.setViewName("list");
return mav;
}
<body>
<div align="center">
<table>
<tr><td>部门编号</td><td>部门名称</td><td>部门地址</td><td>删除</td></tr>
<c:forEach items="${deptList}" var="dept">
<tr><td>${dept.deptno}</td><td>${dept.dname}</td><td>${dept.loc}</td><td><a href="delDeptById?deptno=${dept.deptno}">删除</a></td></tr>
</c:forEach>
</table>
</div>
</body>
18id删除
/** ID删除 */
@RequestMapping("/delDeptById")
public String delDeptById(int deptno) {
service.delDeptById(deptno);
return "forward:selectAllDept";
}
19模糊查询
/** 名称模糊查询 */
@RequestMapping("/selectDeptByLike")
public ModelAndView selectDeptByLike(String keyWord) {
ModelAndView mav=new ModelAndView();
List<DeptEntity> list=service.selectDeptByLike(keyWord);
mav.addObject("deptList", list);
mav.setViewName("list");
return mav;
}
20添加部门信息
<body>
<div align="center">
<form action="insertDeptParams" method="POST" enctype="application/x-www-form-urlencoded">
部门编号:<input type="text" name="deptno"><br>
部门名称:<input type="text" name="dname"><br>
部门地址:<input type="text" name="loc"><br>
<input type="submit" value="添加部门">
</form>
</div>
</body>
/** 添加部门 */
@RequestMapping("/insertDeptParams")
public String insertDeptParams(DeptEntity dept) {
service.insertDeptParams(dept);
return "forward:selectAllDept";
}
21更新部门
修改list.jsp页面
<div align="center">
<table>
<tr><td>部门编号</td><td>部门名称</td><td>部门地址</td><td>删除</td></tr>
<c:forEach items="${deptList}" var="dept">
<tr><td>${dept.deptno}</td><td><a href="selectDeptById?deptno=${dept.deptno}&type=edit">${dept.dname}</a></td><td>${dept.loc}</td><td><a href="delDeptById?deptno=${dept.deptno}">删除</a></td></tr>
</c:forEach>
</table>
</div>
Id查询:
/** ID查询 */
@RequestMapping("/selectDeptById")
public ModelAndView selectDeptById(int deptno,String type) {//type==edit 编辑 type==detail
ModelAndView mav=new ModelAndView();
DeptEntity dept=service.selectDeptById(deptno);
//把数据放入model中
mav.addObject("dept", dept);
if("detail".equals(type)) {//id查询
mav.setViewName("detail");
}
if("edit".equals(type)) {//更新
mav.setViewName("edit");
}
return mav;
}
Edit.jsp:
<body>
<div align="center">
<form action="updDeptById" method="POST" enctype="application/x-www-form-urlencoded">
<input type="hidden" name="deptno" value="${dept.deptno}"><br>
部门名称:<input type="text" name="dname" value="${dept.dname}"><br>
部门地址:<input type="text" name="loc" value="${dept.loc}"><br>
<input type="submit" value="修改部门">
</form>
</div>
</body>
控制器:
/**更新部门信息*/
@RequestMapping("/updDeptById")
public String updDeptById(DeptEntity dept) {
service.updDeptById(dept);
return "forward:selectAllDept";
}