记录一下自己做的第一个小小的功能
需求:管理页面的登录,对员工的信息进行增删改查
资源准备:
页面(登录,增删改查【去bootstrap 的官网上找】),数据库css js 文件
需要导入的依赖:
技术分析
3. 将页面的连接全部改为Thymeleaf 的格式;数据库的配置,数据源(Druid)的配置(DruidSource Servlet Filter Listener)
4. 登录模块:登陆页面的国际化设置 拦截器设置,资源的映射
5. 操作部分:基本的增删改查,还有错误页面的设置
配置数据源的时候
:
在配置DruidDataSource 的时候,使用的类名 :druidConfig 显示这个组件已经在容器中注册
解决办法:修改方法名
thymenleaf 依赖导入出错
首先要注意的问题:Thymeleaf 的最新版本是发布在github 是上面的可以去查看比较新的版本号
webjars 可以直接在maven 的官网上查找
但是场景启动器应该在springboot 官方文档
修改页面中的href 和scr 改为thymeleaf 形式
< html lang="en" xmlns:th="http://www.thymeleaf.org">;
设置初始页面的映射
public WebConfiguereAdapter xxx(){
return WebConfiguereAdapter(){
//重写添加映射的方法
AddViewController
//拦截器的方法
addInterceptors
};
}
编写实例bean 对应数据表
,编写Repository 接口(继承Jparepository)配置application.yml 建表的方式项目的基本结构中要添加Model 和ViewModel
【这个涉及到数据的一些安全问题】Model:
View Model:
在使用Model 的过程中使用到了BeanUtils 的对象复制(使用的反射机制):复制的原则是相同的类型 相同的 属性名称。如果有不一样的,那BeanUtils 就不对这些进行处理
自定义sql 语句
自定义的sql 语句使用@Query(value=“sql 语句” nativeQuery=ture)
例如:一个用户登录需要的sql 操作
@Query(value = "select id,last_name,password from tbl_manager where last_name =?1 and password =?2",nativeQuery = true)
1. select (一定要指明列名 不能使用*)
2. 在参数后面要指定参数序号
3. 如果使用的是本地的数据库查询 :nativeQuery=true
方法声明
public List findByLastnameAndPassword(@Param("last_name") String name, @Param("password") String password);
4. 返回值为一个list< 数据表对应的bean> 在参数中要将sql 语句中的数据表的列名和参数绑定
进行数据出来还是要先进行RESTful 架构的设计
登录页面表单提交数据Post
修改数据Put
删除数据 Delect
这是RESTFUL 操作时的一种格式
在这其中涉及到的技术点:【前提是添加和修改的页面是共用的】
1. 如何修改表单的提交方式
主要是修改 : _method
2. 如何在同一表单里面判断当前是添加还是修改
对于项目中的Model 的理解
例如:
如果是一个用户登录的项目(淘宝之类的)
首先:在数据库中数据表应该有两张,一张用户的基本信息表,另一张密码表【密码表应该是单独的】
在编写与数据表映射的bean 时【无论是使用jpa 还是mybatis】基本信息应该是分开的两个bean
在Service 层,除了有接口service 接口的实现impl,还应该有一个model :
将数据库中查询的数据进行拼装(将账户的基本信息和密码)封装到Model中。返回给Controller;
同样的在Controller 中也不需要将所有的数据都传递给前端,前端只要拿到他需要展示的数据就行了,所以在Contoller 中在一个ModelView 部分,用于封装前端需要的信息,最后将这个对象返回给前端。
在数据访问的时候使用springboot Jpa 时:
当需要使用自定义的sql 语句时:
使用@Query() 但是sql 的语法和通常的sql 语句的语法不太一样,他有自己的规则
@Query(value = "select id,last_name,password from tbl_manager where last_name =?1 and password =?2",nativeQuery = true)
1. select (一定要指明列名 不能使用*)
2. 在参数后面要指定参数序号
3. 如果使用的是本地的数据库查询 :nativeQuery=true
方法声明
public List findByLastnameAndPassword(@Param("last_name") String name, @Param("password") String password);
4. 返回值为一个list< 数据表对应的bean> 在参数中要将sql 语句中的数据表的列名和参数绑定
对一些小技术的分析和补充
在 页面中经常会遇到页面中有相同的部分,此时我们可以将相同的页面抽取出来放到一个单独的页面中,
当其他的页面要使用这些抽取的页面时,在需要的地方进行引用
在抽取页面存放的文件中:为页面片段取名字:th:href="@{/index.html}"
在要使用的的地方使用:
设置拦截器:在没有登陆的情况下有些页面是无法访问的
首先创建一个类实现Handlerinterceptor 进行拦截的逻辑判断
然后在Spring Mvc 的相关配置中配置自定义的拦截器
【拦截器和过滤器是有区别的】
拦截器实现的是HandlerInterceptor 是在Springmvc 的相关配置中完成配置的【是在Controller调用之前】
【import org.springframework.web.servlet.HandlerInterceptor;】
过滤器是实现的Filter,是在配置Servlet 的时候进行的
【import javax.servlet.*;】
过滤器是基于Serlvet容器的,拦截器不是;过滤器只在Serlvet前后起作用;拦截器中可以获取各种springboot 组件
【https://www.cnblogs.com/alilcu/p/8073744.html】