- 基础环境搭建
- 创建一个maven工程
- 引入项目依赖的jar包(pom.xml)
- spring、springMVC、mybatis
- 数据库连接池、驱动包
- mybatis逆向工程
- 其他(jstl、servlet-api、junit)
- 引入bootstrap前端框架
- 编写ssm整合的关键配置文件
- 配置web.xml:
- 启动spring容器:applicationContext.xml
- src/main/resources/applicationContext.xml
- springMVC的前端控制器,拦截所有请求:dispatcherServlet
- src/main/webapp/WEB-INF/dispatcherServlet-servlet.xml
- 字符编码过滤器,一定要放在所有过滤器之前
- 使用Rest风格URI:将页面普通的post请求转为指定的delete或put请求
- 启动spring容器:applicationContext.xml
- 配置springMVC:包含网站跳转逻辑的控制、配置
- dispatcherServlet:src/main/webapp/WEB-INF/dispatcherServlet-servlet.xml
- 只扫描控制器:<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
- use-default-filters设为false(true为扫描所有)
- 配置视图解析器:方便页面返回
- <property name="prefix" value="WEB-INF/views/"></property>
- <property name="suffix" value=".jsp"></property>
- prefix : 是指访问页面的前缀,指定页面存放的文件夹
- suffix : 是指文件的后缀名,常见的后缀名有html,jsp,php,txt,mp3
- springMVC两个标准配置:
- 将springMVC不能处理的请求交给tomcat:mvc:default-servlet-handler
- 能支持springMVC更高级的一些功能:如映射动态请求、JSR303校验、快捷的ajax:mvc:annotation-driven
- 配置spring:主要配置与业务逻辑相关的内容
- applicationContext.xml:src/main/resources/applicationContext.xml
- 核心点:配置数据源、与mybatis的整合、事务控制等
- 数据源:bean id="pooledDataSource"
- 连接数据库:jdbcUrl
- 数据库驱动:driverClass
- 用户名:user
- 密码:password
- 创建配置文件设置value:src/main/resources/dbconfig.properties
- 引入外部文件:
- context:property-placeholder location="classpath:dbconfig.properties"
- 在该文件中取值:如value="${jdbc.jdbcUrl}"
- 扫描业务逻辑组件:component-scan
- 配置和mybatis的整合:sqlSessionFactory
- 指定mybatis全局配置文件:configLocation(mybatis-config.xml)
- 数据源:dataSource
- 指定mybatis的mapper文件位置:mapperLocations
- (mapper/*.xml:扫描mapper下的所有文件)
- 配置扫描器,将mybatis接口的实现加入ioc容器
- 扫描所有dao接口的实现,加入ioc容器中:basePackage
- 事务控制配置:
- 事务管理器:transactionManager(DataSourceTransactionManager)
- 控制数据源即能管理事务:dataSource
- 事务管理器:transactionManager(DataSourceTransactionManager)
- 开启基于注解的事务,使用xml配置形式的事务(主要都使用配置式)
- aop:
- 切入点表达式:aop:pointcut->哪些方法要切入事务
- 配置事务增强:aop:advisor
- 配置事务增强,事务如何切入:tx:advice
- 所有的方法都是事务方法:tx:method name="*"
- 以get开始的所有的方法 :tx:method name="get*" read-only="true"
- aop:
- mybatis逆向工程:
- mybatis-config.xml
- 全局配置:
- <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
- configuration:将不好配置的settings放在全局配置文件中
- 驼峰命名规则:mapUnderscoreToCamelCase
- 类型别名:typeAliases
- package name="com.atguigu.crud.bean":放入bean包方便引用
- 分页插件:plugin interceptor="com.github.pagehelper.PageInterceptor"
- mapper文件:对应mapper接口(接口是dao层直接与数据库进行交互,增删改查)
- 使用mybatis逆向工程生成对应的bean和mapper:mybatis.generator.xml
- 引入jar包:org.mybatis.generator
- 创建配置文件:mybatis-generator.xml
- 配置数据库连接信息:jdbcConnection
- 指定javaBean的生成位置:javaModelGenerator
- 指定sql映射文件生成的位置:sqlMapGenerator
- 指定dao接口的生成位置,mapper接口:javaClientGenerator
- 指定每个表的生成策略:table
- commentGenerator:
- suppressAllComments属性值:
- true:自动生成实体类、SQL映射文件时没有注释
- false:自动生成实体类、SQL映射文件,并附有注释
- suppressAllComments属性值:
- 建立测试文件:MybatisGeneratorTest.java
- 生成java.bean:example做复杂查询
- 生成java.dao:复杂的增删改查
- 生成resources.mapper.xml配置
- mapper文件:.java中声明方法;.xml中实现方法
- 配置web.xml:
- 测试mapper:src/test/java/test/MapperTest.java
- 推荐spring的项目使用spring的单元测试,可以自动注入需要的组件
- 导入springtest模块
- ContextConfiguration指定spring配置文件的位置
- RunWith(SpringJUnit4ClassRunner.class)指定运用进行单元测试的模块
- 直接autowired要使用的组件即可
- 插入部门
- 生成员工数据,测试员工插入
- 批量插入多个员工,使用可以执行批量操作的sqlsession
- 在applicationContext.xml中配置可以执行批量的sqlsession
- 查询:
- 访问index.jsp页面->页面发送查询员工列表请求->EmployeeController接受请求,查出员工数据->来到list页面进行展示
- 服务器将有效的数据以json的形式返回给客户端:使用ajax
- index.jsp页面直接发送ajax请求进行员工分页数据的查询
- 服务器将查出的数据,以json字符串的形式返回给浏览器
- 浏览器收到js字符串,可以使用js对json进行解析,使用js通过dom增删改来改变页面
- 返回json,实现客户端的无关性(浏览器、安卓等)
- 使用一个msg通用的返回类,在bean下创建一个Msg.java(需用导入json包)
- index使用js发送一个ajax请求,ajax请求要到员工数据后返回给js,js解析json数据,然后在页面进行显示
- 页面加载完成以后,直接发送ajax请求,要到分页数据
- 解析并显示员工数据
- 解析并显示分页信息
- 解析并显示分页条数据
- 页面加载完成以后,直接发送ajax请求,要到分页数据
- 使用Spring测试模块提供的测试请求功能,测试crud请求的正确性
- spring4测试时,需要servlet3.0的支持
- 传入springMvc的ioc容器:@Autowired WebApplicationContext context;
- 虚拟mvc请求,获取处理结果:MockMvc
- 模拟请求拿到返回值
- 请求成功以后,请求域中会有pageInfo,可以取出pageInfo进行验证
- 获取员工数据
- 分页查询(不使用)
- 引入分页插件,在查询之前只需调用,传入页码以及每页的大小
- 使用pageinfo包装查询后的结果,只需将pageinfo交给页面,封装了详细的分页信息,包括查询出的数据,传入连续显示的页数
- 搭建bootstrap分页页面(不使用list.jsp)
- web路径:
- 不以/开始的相对路径找资源,以当前资源的路径为基准,经常容易出问题
- 以/开始的相对路径找资源,以服务器的路径为标准,需要加上项目名
- 使用pageContext.setAttribute("APP_PATH", request.getContextPath());
- 在取路径时,在开头使用${APP_PATH}+/+路径
- 以row为单位设置页面内容
- web路径:
- 服务器将有效的数据以json的形式返回给客户端:使用ajax
- 访问index.jsp页面->页面发送查询员工列表请求->EmployeeController接受请求,查出员工数据->来到list页面进行展示
- 新增:
- 在index.jsp页面点击“新增”
- 弹出新增对话框
- 清除表单数据:表单完整重置,包括表单数据、表单样式
- 在数据库中查询部门列表,显示在对话框中
- DepartmentService.java查询部门信息给controller
- DepartmentController.java将数据返回给index.jsp
- 用户输入数据,完成保存
- 模态框中填写的表单数据提交给服务器进行保存(controller、service)
- 对要提交给服务器的数据进行JQuery前端校验
- 拿到要校验的数据,使用正则表达式
- 显示校验结果的提示信息
- 首先清除当前元素的校验状态
- 发送ajax请求校验用户名是否可用(controller、service)
- 先判断用户名是否是合法的表达式
- 再判断数据库用户名是否重复
- 判断之前的ajax用户名校验是否成功
- 后端校验JSR303:重要数据,进行唯一约束
- 支持JSR303校验,需要导入Hibernate-Validator包(pom.xml)
- 发送ajax请求保存员工(controller、service)
- 校验失败,应该返回失败,在模态框中显示校验失败的错误信息
- 校验成功,则返回成功
- 员工保存
- 如果成功:关闭模态框,来到最后一页,发送ajax请求显示刚才保存的数据
- 如果失败,则显示失败信息
- URI:
- /emp/{id} GET:查询员工
- /emp POST:保存员工
- /emp/{id} PUT:修改员工
- /emp/{id} DELETE:删除员工
- 修改:
- 点击编辑
- 在按钮创建之前就绑定了click,绑定的方式有两种
- 在创建按钮时绑定
- 绑定点击.on() //jQuery新版使用on,旧版使用.live()
- 查出部门信息,显示部门列表
- 查出员工信息,显示员工信息
- 把员工的id传递给模态框的更新按钮
- 在按钮创建之前就绑定了click,绑定的方式有两种
- 弹出用户修改的模态框:显示用户信息
- 点击更新,完成用户修改
- 验证邮箱是否合法
- 发送ajax请求,保存更新员工信息
- 发送PUT请求时,请求体中的数据拿不到(request.getParameter),Tomcat检测到时PUT请求不会封装请求体中的数据为map,只有POST形式的请求才封装请求体为map
- 要能支持直接发送PUT之类的请求,还要封装请求体中的数据,配置HttpPutFormContentFilter,将请求体中的数据解析包装成一个map,reques被重新包装,request.getParameter()被重写,就会从自己封装的map中取数据
- 点击编辑
- 删除:
- 删除单个:
- URI:/emp/{id} DELETE
- 弹出删除对话框,发送ajax请求删除
- 删除多个:
- attr获取checked时undefined,attr获取自定义属性的值
- 用prop获取和修改dom原生属性的值
- 全选/全不选:先判断当前选择元素是否选满,点击全部删除就批量删除,发送ajax请求
- 删除单个:
- 总结:
- 前端用户界面UI使用bootstrap搭建,向界面发送请求,来到tomcat服务器
- 使用Tomcat作为servlet容器进行处理
- 当前项目收到请求后,使用SSM处理请求
- SpringMVC前端控制器判断能不能处理请求:若能,则调用Controller控制器层某一个处理请求的方法;若不能,交给tomcat服务器(静态资源交给服务器直接返回);
- controller调用service层的处理逻辑:若要进行数据库的交互,则调用Dao层的组件,Dao的组件都是用Mybatis写的,由mybatis生成的mapper直接与数据库进行交互,操纵数据库的增删改查
- 使用MybatisGenerator生成mapper接口、mapper文件,复杂的查询在基于mapper上定义一些新的方法
- mapper能实现是因为项目启动时被扫描进ioc容器中,也因为组件之间都自动装配autowired,在spring容器中
- 大部分使用ajax请求,返回结果为json,使用js解析json数据在页面显示
- 项目中调用的jar包,都由maven自动导入到服务器中
- 当前项目收到请求后,使用SSM处理请求
SSM-crud项目笔记
最新推荐文章于 2023-06-03 16:16:07 发布