#ssm整合(部门管理)

##1.新建工程

1.新建maven工程
2.添加web.xml
3.添加tomcat运行环境
4.添加依赖jar包

spring-webmvc
mysql
commonse-dbcp
mybatis
mybatis-spring
junit
jstl //作用
spring-jdbc

5.配置文件

application-dao.xml
//作用:用util:propertis读取外部属性文件db.properties
//配置数据库连接池信息:1.用spring表达式给属性赋值
//ssm整合 持久层接口的扫描 仔细看看
//SqlSessionFactoryBean的初始化(mybatis的用法 : 实例化数据库,有几个数据库实例化就实例化)
//读取编写sql语句的映射文件

application-service.xml //扫描组件 可以扫描当前包(业务层)和子包的所有类
spring-mvc.xml //作用:配置控制层(看看),扫描控制层组件 配置视图解析器,读取要显示的页面

db.properties //作用:配置数据库连接池
mappers/DeptMapper.xml //作用:命名空间(接口名)

6.web.xml

##2.建表t_dept

  1. create table t_dept(
  2. id int auto_increment primary key,
  3. dept_name varchar(50),
  4. dept_loc varchar(50)
  5. )default charset=utf8;

##3.添加部门信息

新建包:cn.zjtj.ssm.bean
新建Dept类:

  1. public class Dept {
  2. private Integer id;
  3. private String deptName;
  4. private String deptLoc;
  5.  
  6. ...
  7. }

###3.1 持久层

1.定义接口

在cn.zjtj.ssm.dao包中定义DeptDao,在接口中定义方法

  1. public interface DeptDao{
  2. void insertDept(Dept dept);
  3. }

2.编写sql语句
在DeptMapper.xml中定义insert节点,编写insert语句语句

  1. namespace=cn.zjtj.ssm.dao.DeptDao
  2. <insert id="insertDept" parameterType="cn.zjtj.ssm.bean.Dept">
  3. insert into t_dept(
  4. dept_name,dept_loc
  5. )values(
  6. #{deptName},#{deptLoc}
  7. )
  8. </insert>

测试:
//加载application-dao.xml dao层配置文件, 这是容器配置
new ClassPathXmlApplicationContext("application-dao.xml");

//加载这个接口文件 进行操作 看看第一天的视频或查API 接口名
DeptDao dao =ac.getBean("deptDao",DeptDao.class);

//创建对象并赋值
Dept dept = new Dept();
dept.setDeptName("第一开发部");
dept.setDeptLoc("中坤8层");
dao.insertDept(dept);

//查看数据库信息

###3.2 业务层

1.定义接口cn.zjtj.ssm.service

  1. public interface DeptService{
  2. void addDept(Dept dept);
  3. }

2.编写接口的实现类

  1. @Service
  2. public class DeptServiceImpl implements DeptService{
  3. @Resource //作用 : 按name进行依赖注入, 多个文件之间要相互调用,它起的作用是初始化和赋值的作用
  4. //??用法和含义 https://blog.csdn.net/zcl_love_wx/article/details/78629401
  5. private DeptDao deptDao;
  6. public void addDept(Dept dept){
  7. //调用持久层的方法
  8. }
  9. }

测试:

###3.3 控制器层 (业务层为控制器调用)

  1. 1.cn.zjtj.ssm.controller中定义DeptController
  2.  
  3. @Controller
  4. @RequestMapping("/dept") //一个路径,一个模块名称
  5. public class DeptController{
  6. //显示添加部门信息页面
  7. @RequestMapping("/showAddDept.do") //一个下一级路径,一个方法的绑定
  8. public String showAddDept(){ //显示页面无需参数
  9. return "addDept"; //输入上面的路径 显示addDept.jsp页面 输入参数
  10. }
  11.  
  12. //添加部门信息
  13. RequestMapping("/addDept.do")
  14. public String addDept(String deptName,String deptLoc){
  15.  
  16. //这里接受上面输入的参数值,并返回到index.jsp页面
  17.  
  18. //1.调用业务层方法 业务层调用持久层,把数据存到数据库中
  19. //把参数传进来,并响应页面
  20. //2.return "index";
  21. Dept dept = new Dept();
  22. dept.setDeptName(deptName);
  23. dept.setDeptLoc(deptLoc);
  24. deptService.addDept(dept);
  25. return "index";
  26. }
  27.  
  28. }

###3.4 页面

/WEB-INF/web/addDept.jsp,两个文本框+submit按钮
在addDept.jsp的form表单中,给action赋值
/WEB-INF/web/index.jsp,添加成功!

...action="${pageContext.request.contextPath}/dept/addDept.do"> ?????????
...

这里相当于有个重定向的过程, 先从显示页面输入参数,输入成功调转到登录添加成功的页面,多一个方法绑定
和一个jsp页面显示。

测试:

出现了404页面

  1. ...
  2.  
  3. //application-dao.xml 路径出问题了 配置文件前后不匹配
  4.  
  5. <util:properties id="dbConf" location="classpath:db.properties"/>
  6.  
  7. <property name="mapperLocations" value="classpath:mappers/*.xml">
  8.  
  9. ...

如果还出现了404,就可能是pring-mvc.xml配置文件下扫描包出现了问题
<!--组件扫描-->

  1. <context:component-scan base-package="cn.zjtj.ssm.controller"/>

接下来出现500页面
方法出错。

输入网址:localhost:8080/day08_ssm/dept/showAddDept.do

当页面出来后,输入参数值就传入数据库端

控制层调用业务层 业务层调用持久层
一般如果写的话,是倒着写 不管是具体类中的方法的代码 还是各个层的写法

===============================================================

##4.显示部门信息

思路分析1:添加成功页面之后加一个超链接(显示部门信息,有多条信息),这个时候就要用到jstl表达式,
用于遍历并显示输出。点击超链接提交给控制器,控制器去调用业务层,业务层去调用持久层,持久层去查数
据库,并将所有的数据返回来。
由于是多个对象(数据库中),所以,持久层返回的应该是一个集合。

思路分析2:对于一个新的模块,肯定还是需要数据,那么就需要数据库,那么还是要从持久层开始,
再通过业务层,把持久层的集合带回来,带回来之后把集合中的数据放到控制器里面,控制器再把它
放到map里面,在把它扔到页面上来(显示出来)。

思路分析3:数据库---->持久层------>业务层---->控制器层---->页面 分析思路是这样的,但如果执行的化是从反着执行。

###4.1 持久层

1.在DeptDao接口中定义方法

List<Dept> selectDeptAll(); //返回值为一个部门信息,并且无返回值

2.在DeptMapper.xml文件中定义select节点,编写sql语句

DeptMapper.xml

  1. ......
  2.  
  3. //id名称就是方法名称,参数列表无,但是有返回值类型 resultType="xx.xx.Dept" 包下面的某个类
  4. </insert>
  5. <!--List<Dept> selectDeptAll()-->
  6. <!--查询用户信息-->
  7. <select id="selecDeptAll" resultType="cn.zjtj.ssm.bean.Dept">
  8. select
  9. id,
  10. dept_name deptName,
  11. dept_loc deptLoc
  12. from
  13. t_dept
  14.  
  15. </select>

测试 :

TestDept.java

  1. ...
  2.  
  3. @Test
  4. public void testSelectAll(){
  5.  
  6. //读取dao的配置文件(容器) 获得dao的对象名(容器的对象) 再进行方法的调用 最后close(),避免发生内存泄露
  7.  
  8. ...
  9.  
  10. System.out.println(dao.selectDeptAll()); //在控制台输出。
  11.  
  12. }
  13.  
  14. ...
  15.  
  16. //在控制台输出。

###4.2 业务层 

说明:持久层是查询 这里是获取 。

1.接口中定义方法:List<Dept> getDeptAll();

  1. ......
  2.  
  3. /*添加部门信息
  4. * @Param dept
  5. */
  6. void addDept(Dept dept);
  7. /*
  8. *获取部门信息
  9. *@return
  10. */
  11. List<Dept> getDeptAll();
  12. .....

2.实现类中实现方法,方法的功能:调用持久层的方法,把list返回

  1. public List<Dept> getDeptAll(){
  2. return deptDao.selectDeptAll();
  3. }

###4.3 控制器

思路分析:当用户点击超链接时候,提交请求到控制器,所以这里要获取部门信息

url

/getAll.do
//提交请求到控制器,所以这里要获取部门信息
参数列表:ModelMap map
//控制器的参数列表是否需要参数? 由于输入参数是一次请求,所以这里需要ModelMap MedelMap具体含义和用法 ??如果多次请求呢?
响应方法:转发--------------showAll.jsp

  1. public String getAll(ModelMap map){
  2. //1.调用业务层方法;返回list,把list添加到map
  3. //2.return "showAll";
  4. }

###4.4 页面

1.在index.jsp定义<a href="${}/dept/getAll.do">显示部门信息</a><br> //这里一请求就请求控制器,并返回showAll.jsp

2.在web/新建showAll.jsp页面,页面:显示部门信息

测试:

================================================================================

##5.删除部门

###5.1 持久层

1.定义方法:void deleteDeptById(Integer id);

2在映射文件中,定义delete节点,编写delete语句

  1. <delete id="deleteDeptById">
  2. delete from t_dept
  3. where
  4. id=#{id}
  5. </delete>

测试:

###5.2 业务层

1.在接口中定义方法:void removeById(Integer id);

2.在实现类中实现方法,方法的功能:调用持久层的方法

###5.3 控制器层
url
/removeDept.do
参数列表:id
响应页面:重定向 ------------------/getAll.do

  1. @RequestMapping("/removeDept.do")
  2. public String removeDept(Integer id){
  3. //1.调用业务层方法
  4. //2.return "redirect:../dept/getAll.do";
  5. }

###5.4 页面

  1. <a herf="${}/dept/removeDept.do?id=${dept.id}">删除</a>

------------------------------------------------------------------------------------------------------------------------

服务型的SSM整合:

建工程/并做相应配置

添加数据库

写实体类

写持久层(写相关抽象方法)

写映射文件,并写命名空间和相应的接口,然后实现相应的操作方法,再写测试类

再写业务层,并实现并实现持久层方法(逻辑控制“如密码验证”和处理的一个过程)(要用@Resource依赖注入)

再写控制器层(逻辑显示"密码显示"和信息传输"AJAX刷新和用JSON进行信息交互"的过程),并返回相应的页面,在WEB-INF/web/addDept.jsp

SSM思路大总结(部门信息的显示和增删改查)的更多相关文章

  1. Python3.5 day4作业:对员工信息文件,实现增删改查操作。

    需求: 1.可进行模糊查询,语法至少支持下面3种: 1.select name,age from staff_table where age > 22 2.select  * from staf ...

  2. easyui datagrid中datetime字段的显示和增删改查问题

    datagrid中datetime字段的异常显示: 使用过easyui datagrid的应该都知道,如果数据库中的字段是datetime类型,绑定在datagrid显式的时候会不正常显示,一般需要借 ...

  3. 4.SSM整合_多表_多对多的增删改查

    多对多关系,课程和学生 接口 public interface CourseMapper { /** * 获取所有课程 * @return * @throws Exception */ public ...

  4. 3.SSM整合_多表_一对多的增删改查

    1.配置文件跟上一章一样,这里就不多写了,主要是Mapper映射文件,一对多反过来就是多对一 一 接口 public interface CategoryMapper { public void ad ...

  5. Python3练习:对员工信息文件,实现增删改查操作

    1.练习要求: 2.数据文件(data_staff.txt) 1,Alex Li,22,13651054684,运维,2013-02-04 2,Jack Wang,20,13312331232,HR, ...

  6. SSM整合_年轻人的第一个增删改查_新增

    写在前面 SSM整合_年轻人的第一个增删改查_基础环境搭建 SSM整合_年轻人的第一个增删改查_查找 SSM整合_年轻人的第一个增删改查_新增 SSM整合_年轻人的第一个增删改查_修改 SSM整合_年 ...

  7. 搭建ssm框架,可实现登录和数据展示以及增删改查

    需求: 后台使用ssm(spring-springMVC-mybatis)进行整合 前台使用bootstrap框架 前后台交互使用Ajax进行发送 表结构: 登录页面后显示所有用户信息,可对每条进行增 ...

  8. python全栈开发中级班全程笔记(第二模块、第三章)(员工信息增删改查作业讲解)

    python全栈开发中级班全程笔记 第三章:员工信息增删改查作业代码 作业要求: 员工增删改查表用代码实现一个简单的员工信息增删改查表需求: 1.支持模糊查询,(1.find name ,age fo ...

  9. bootstrap+Ajax+SSM(maven搭建)实现增删改查

    https://www.jianshu.com/p/d76316b48e3e 源码: https://github.com/Ching-Lee/crud 功能点: 分页 数据校验 ajax Rest风 ...

随机推荐

  1. 指向list的指针

    #include<list> #include<string> #include<iostream> using namespace std; int main() ...

  2. 在golang中使用 cgo,如何让被嵌入的c语言代码调用golang

    https://golang.org/misc/cgo/test/callback.go // Copyright 2011 The Go Authors. All rights reserved. ...

  3. dialog问题记录

    这个怎么回事,怎么会负利润 http://mmbiz.qpic.cn/mmbiz_jpg/sd9PceC1NdAEVpR5pKerugkpEPEUIsBVoaz5ibTiaHtxoickmF2bXqF ...

  4. Ubuntu install mysql database

    简要说下ubuntu Linux下安装MySql数据库 一. 安装 # apt-get install mysql-server# apt-get install mysql-client 二.启动 ...

  5. 软件测试常用Linux命令

    有些技能可以事半功倍,有些命运掌握在我们手中.熟练的掌握和使用这些命令可以提高工作效率,并且结合这些命令对测试过程中遇到的问题进行一些初步的定位. 1 目录与文件操作 1.1 ls(初级) 使用权限: ...

  6. color xml arm相关

    #-------------------------------------------------------------------------- # C O L O R S #--------- ...

  7. AutoMapper.Mapper.CreateMap报“System.NullReferenceException: 未将对象引用设置到对象的实例。”异常复现

    >>Agenda: >>Ⅰ.国庆假期问题出现 >>Ⅱ.双休日异常再次出现 >>Ⅲ.排障 >>Ⅳ.异常复盘 >>Ⅴ.修复后监测 & ...

  8. Linux之HugePages快速配置

    关于Linux系统的HugePages与Oracle数据库优化,可以参考熊爷之前的文章,相关概念介绍的非常清晰: Linux大内存页Oracle数据库优化 本文旨在Linux系统上快速配置HugePa ...

  9. bat cmd 删除文件或文件夹 删除注册表

    @echo off rd "C:\Documents and Settings\Administrator\桌面\新建文件夹" del 是用来删除文件的,删除文件夹的命令是rd 注 ...

  10. python爬虫-基础入门-爬取整个网站《1》

    python爬虫-基础入门-爬取整个网站<1> 描述: 使用环境:python2.7.15 ,开发工具:pycharm,现爬取一个网站页面(http://www.baidu.com)所有数 ...