A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

同学们,今天是bos物流项目第三天,主要内容就是收派标准功能的实现

今日需要掌握的有:
  • 熟悉easyUI窗口展示、表单检验及数据表格datagrid的使用
  • 掌握SpringData JPA的基本使用,重点掌握常见的查询方式
  • 完成收派标准的增,改,查

请同学们按照如上要求,总结你今日所学


15 个回复

倒序浏览
张育辉总结:
1: 为什么 Action 处理请求,转发回页面会显示空白 ?  设置 type=”redirect” 重定向回页面解决问题 ?
    原因是:在Action中,返回了success,那么页面就要转发  ,由于是在服务器端内进行的转发,相对路径发生了变化,不能找到正确的文件位置。重定向重新访问页面加载数据;

2: Spring data 出现目的 为了简化、统一 持久层 各种实现技术 API    所以 spring data 提供一套标准                 API 和 不同持久层整合技术实现
spring-data-commons 一套标准 API
spring-data-jpa 基于整合 JPA 实现

3:  Spring data Query 使用 实现条件查询
3.1:第一种  根据方法命名规则自动生成
基于一列查询等值查询  findBy 列名 例如: findByName(String name);
And --- 等价于 SQL 中的 and 关键字,比如                 findByUsernameAndPassword(String user, Striang pwd);
Or --- 等价于 SQL 中的 or 关键字,比如 findByUsernameOrAddress(String user, String addr);
Between --- 等价于 SQL 中的 between 关键字,比如 findBySalaryBetween(int max, int min);
LessThan --- 等价于 SQL 中的 "<",比如 findBySalaryLessThan(int max);
GreaterThan --- 等价于 SQL 中的">",比如 findBySalaryGreaterThan(int min);
IsNull --- 等价于 SQL 中的 "is null",比如 findByUsernameIsNull();
IsNotNull --- 等价于 SQL 中的 "is not null",比如 findByUsernameIsNotNull();
NotNull --- 与 IsNotNull 等价;
Like --- 等价于 SQL 中的 "like",比如 findByUsernameLike(String user);
NotLike --- 等价于 SQL 中的 "not like",比如 findByUsernameNotLike(String user);
OrderBy --- 等价于 SQL 中的 "order by",比如 findByUsernameOrderBySalaryDesc(String user);
Not --- 等价于 SQL 中的 "! =",比如 findByUsernameNot(String user);
In --- 等价于 SQL 中的 "in",比如 findByUsernameIn(Collection<String> userList) ,方法的参数可以是 Collection 类型,也可以是数组或者不定长参数;
NotIn --- 等价于 SQL 中的 "not in",比如 findByUsernameNotIn(Collection<String> userList) ,方法的参数可以是 Collection 类型,也可以是数组或者不定长参数;
第二种方式,自定义方法查询,方法名可以随便取,但是需要加@Query注解,用sql语句,如果是增删改还需要加@Modifying
4:分页查询
前台到后台传入 page(当前页),rows(每页显示多少行),这两个参数
把这两个参数PageRequest()方法查询,调用findAll()方法查询,
后台到前台需要传入total(总记录),rows(每页显示的数据)到前台来完成分页
回复 使用道具 举报
谢洪彬:
        收派标准的管理:
添加窗口:easyui-window
表单校验: easyui-validatabos 配合required :true 属性使用
        表单校验之数字校验 easyui-numberbox 配合required:true 属性使用
                遮罩设置:modal:true
          窗口理论上是隐藏的,隐藏设置:closed:true
          显示隐藏的窗口: $(“#窗口id”).window(“open”)

数据表格:easyui-datagrid(一大堆属性方法查jpa)


表现层注解:
在类上:
        @parentpackage:( struts-defalult)(或json-default)
@Namaspace(“/”)
@controler
@scope(“prototype”)
在方法上:
        @action(value=”” ,results{@result(name=””,localtion=””).....})

业务层:
        声明业务层:@service
                注入dao
        同时我们还需要在在application中整合spring Data jap
<jap:Repositorys base-packsge=”com.itheheima”/>
       
spring data jap 查询的两种方式
        1.方法名符合jpa的命名规范
        2.自定义方法名,在方法名上加query注解,注解上写语句
属性:value 定义语句
属性nativeQuery 定于语句的类型       
nativeQuery=false 为jpql语句
          nativeQuery=true为sql语句

带有条件的修改和删除自定义方法需要加这个注解:
                @modifying  同时增删改一定要添加事务
               
基于测试类进行增删改操作,事务会自动回滚,所以我们可以这样解决:
                        解决方案:        在方法上添加@rollback(false        )


在action中参数的接受可以有两种方法:模型驱动和属性驱动
模型驱动:当前类实现ModelDriven<T>接口,重写接口的方法,将泛型对象返回回去
属性驱动 : 声明私有的属性 ,给予这个set方法



分页查询:
页面向服务器传递的参数:
                                page:当前页数
                                rows:每页显示的记录数
                 Action中的操作
                        调用findAll方法返回page对象,泛型为bean对象,传递的参数为:pageAble,pageAble是一个接口我们可以直接创建这个接口的实现类pageRequest,创建这个实体类需要传递两个参数,就是页面传递过来的page和rows,不过pageAble中的page是从0开始的,所以我们传递page时还需要-1
        服务器向页面传递的参数:
                我们需要向页面传递json数据,页面需要为total和rows数据
                total:数据的总记录数
                rows:实际查询到的所有数据
        这些数据在我们进行查询的时候,全部都封装到page对象中了,我们需要使用到map集合来吧page对象中的数据处理成页面所需要的数据,例:
        map.put(“total:” ,”...”)
        map.put(“rows:”,”...”)
然后将map数据压入值栈当中
        在进行json数据的返回时,我们还需要进行以下的操作:
                因为返回数据是基于Struts-json-pluging 插件进行的,所以我们还需要在pom.xml中添加插件依赖,插件会默认将值栈顶部的数据转换成json格式
使用插件的条件
                类需要继承json-default         --->parentpackage(“json-default”)
                返回结果集的类型设为json  --->@result(name=”....”  type=”json”)

最后我们进行了修改的操作,修改时我们需要数据的回显,由easyui-from 表单的load方法就可以直接帮我们去完成.其实修改的方法和保存的方法是一样的,spring data jpa的底层是根据你有没有id属性来进行判断,有id执行修改操作,没有id执行添加操作,当前这边还需要注意的一个小点是,我们在进行添加操作之前需要将from表单中的数据进行clear.
回复 使用道具 举报

张述明
总结
收派标准的管理
1.添加窗口  在div<class="easyui-window" data-options
="title:'窗口属性'"> 窗口内容</div>

遮罩效果   窗口出现后面的输入框不能操作
定义modal属性   默认是false   设置为true 输入框就不能操作


收派标准客户端表达校验
class="easyui-validatebox"

指定required为true完成必须输入校验

自定义验证规则
数字校验框:numberbox
日期:databox
下拉输入框:combobox

SpringdataQuery  实现条件查询
1.根据方法命名规则自动生成
findBy+  
findByLike+  模糊查询
2.带有条件修改和删除操作
使用@query   注解完成   搭配使用@Modifying标记修改,删除操作

datagid数据表格的使用
1.在页面显示表格的位置提供<table>标签,指定id元素

2.在js代码中$("#gid").datagrid({
完成对表格设置
表格列定义   columns
远程数据加载  url
分页  pagination
toolbar是数据表格的顶部
})


收派修改功能
只能对一行进行修改
1.点击修改按钮,获取datarid选中的一行数据使用方法 'getselected'
判断是否为1
不为1,就提示信息
2.将选中数据,回显form表单
使用easyui提供form对象使用load 方法
要提供隐藏字段

无条件分页查询

datagrid 在页面加载后,会自动向url 地址发送一次请求,传递参数page当前页码和rows
每页显示的记录数到服务器
springdata提供pageable对象 (pagerequest)接收两个参数

调用springdata中page...findAll(pageable)方法查询,总记录数和当前页数据

将page中数据封装自定义Map集合total转换json返回客户端

修改courier.html的datagid url地址
回复 使用道具 举报

陈强
BOS项目-day03
1、        关于查询所有或者说是分页查询显示的部分,更之前不同的是,现在采用的是页面加载的时候,就进行查询所有的方法,并将数据显示;然后使用到的是pageable的接口.
2、        在分页查询或者查询全部的时候,数据是以json的形式返回到页面的,所以这里要引入struts-json-plugin的一个依赖,然后action的配置@parentpackage就是基于json-default,返回的json数据datagrid会自动进行一个解析和显示.
3、        JpaRepository这个接口下面的实现类其实封装了很多的方法,进行一般的增删改查使用规范的方法都没有问题,当然还有另外一种采用注解的方式进行数据的操作.
回复 使用道具 举报

       陈昆明:
  • 熟悉easyUI窗口展示、表单检验及数据表格datagrid的使用
               针对easy-UI的使用个人觉得只要能够知道有什么功能就行,使用时直接找API,但是最起码的参数必须能看懂,表格列表展示需要知道前后台的传参,前台往后台传递的两个参数为:page(当前页)和rows(展示的条数),后台往前端传递的是:total(总记录数)和rows(每条的记录)
  • 掌握SpringData JPA的基本使用,重点掌握常见的查询方式
             springData JPA是对hibernate框架进行的封装,所以可以它的查询语句也是面向对象的特点,这个需要注意,使用时如果是普通的增删改查,直接继承JpaRepository接口即可(方法中需要传入Pageable接口),按条件查询分页时需要再继承JpaSpecializeRepository接口(方法调用时需要传入specialize接口和pageable接口),后者这个方法比较强大,当你的specialize为null时,实现的是无条件查询,否则为带条件查询
  • 完成收派标准的增,改,查
              使用springData-Jpa中的save方法可进行增加,改的话使用@query和modifying注解搭配查询语句进行修改,查询就比较容易了,规则查询,注解查询,自带查询,,,看需求实现即可


回复 使用道具 举报
bos项目功能实现
功能①:收派标准的添加功能.给收派标准页面的添加按钮添加点击事件,事件触发弹出窗口,窗口的实现由easyui插件的window对象来完成,窗口中有添加的表单,用easyui的form组件完成表单的校验,给窗口中的保存添加点击事件,事件触发判断表单验证(easyui语法),完成验证提交表单,表单的提交路径和提交方式
功能②:收派标准的分页查询功能.用到easyui的标准信息表格组件datagrid,修改url(用来加载json类型的表格数据)为分页查询的action中的方法,请求的参数有page(当前页)和rows(每页记录数),在数据层调用接口的分页查询方法,需要传入一个pageable对象,这个对象可以通过有参构造获取,参数为page和rows,响应回json的格式是total:总记录数,rows:当前页要显示的记录
功能③:收派标准的修改功能,用easyui标准数据表格datagrid组件的获取表格被选中数据的方法getSelections,获取被选中的数据,的到一个数组,判断数组长度不等于1说明选中多条或0条,这时弹出提示框,否则就说明选中了一条数据,获取到这条数据(数组索引为0的)用easyui的form组件的load方法可以回显数据,这里修改和添加用一个表单,但是一定要提供隐藏的input标签来区分修改和添加,
功能④:收派标准的删除功能.获取被选中的数据得到数组,创建一个js的Array对象,遍历数组把每一条数据的id添加到array(push方法把指定元素添加到array末尾并返回新的长度),最后把array转成字符串(join方法把array中的每个元素以指定的符号隔开生成一个字符串),最后发送请求携带参数字符串,在后台根据id删除delete记录.

---今日异常
①:分页查询报错(错误提示没有result).错误原因:忘记在result上标明type="json",
②:分页查询没有数据显示(没有错误信息).错误原因:创建Pageable对象的时候往PageRequest中传入的page没有减一,因为前台传过来的page为1而PageRequestpage是从0开始,
③:添加信息后跳转页面报错(错误信息404找不到页面路径).错误原因:location要使用相对路径,必须使用type="redirect"重定向,因为默认是转发,而转发的特性是一次请求一次响应,地址栏不会改变这时相对路径是相对action所以会找不到页面,
回复 使用道具 举报
柯威龙
Spring Date 简化 ,统一了持久层(JPA)的代码. 需要将DAO继承JPARepositoty接口,里面封装了许多的方法,
save(查询), delete(删除) , deleteAll(删除全部),count(数量) ,findAll(基于排序的查询),让我们简化
了许多的代码.不过这些方法都是常规的,如果需要带条件修改.删除,查询的话.有三种方式.一种是根据方法
命名规则生成.第二种是不安命名规则写的.需要使用@Query来进行注解.如果是修改删除的话还需要去写
@modifying注解.
今天主要完成了收派标准的业务.使用了EasyUI的数据表格.在页面显示表格的位置提供table标签,指定id元素
,在js代码中,完成对表格的设置.在进行数据表格的时候,需要去掌握datagrid.        需要去记住,使用dategrid
时带有total和rows
请求数据:page页码  rows每页记录数
响应数据:total总记录数 rows 当前页数据记录
在服务器端写代码时,需要知道page页码是从0开始的.而将数据封装完之后需要去将数据压入值栈顶部.
回复 使用道具 举报
施炎生
Day03
一、        学习了easyui怎么写窗口和进行表单数据校验
二、        Spring data jpa的优点
整合jpa后的可以少写代码,不需要实现类,只需要编写 DAO 接口,继承 JpaRespotory;还有,整合jpa后保存和修改都是使用save方法,jpa的底层会对传过来的参数进行判断,如果这个对象在数据库中不存在,就执行保存;存在,就执行修改方法。
三、        查询代码有两种写法:
1、按命名规范:findBy属性名称(类中)+条件;比如:findByNameIsNull、findByNameIsNotNull、findByNameOrId,还有模糊查询findByNameLike(String name)、findByUsernameAndPassword(String username, String password )
2、非命名规范:名称随意,方法上必须加@Query
四、分页查询前端代码:
        1、在body内添加<table>标签,指定 id 元素
        2、在<script>标签内使用js来设置table的相关参数
$(“#grid”).datagrid({…}); 完成对表格设置(表格的列:columns、表格的json数据来源:url、表格的分页栏显示   pagination : true、工具栏:表头上面有保存等按钮    toolbar)
五、掌握datagrid分页原理
        前段向后台发送请求参数:页码page、每页记录数rows。后台向前段响应数据:总记录数total、当前页数据记录rows
六、分页查询后台代码注意点:
传递给dao请求参数的封装、传json数据到前台需修改action类继承的包注解、结果集的type类型、页码参数为0时查询的才是第一页。
回复 使用道具 举报
许剑鸿  18.08.03 bosDay03

一句话: easyUI+CURD

easyUI 最头疼的问题 记不住 又写不出来 慢慢练习吧

今天的CURD与以前不同,使用spring data jpa 让持久层的编写更为简单(简单到不用写因为都封装好了)
具体使用:在dao包中写一个接口让它继承jparepository  持久层就算编写完毕

添加与修改:
直接用spring data jpa封装好的save方法即可 (有主键便为修改 无主键就是添加)

如何实现带条件的查询:
①命名
在持久层中定义查询方法直接实现(关键词要写对)
例如 findByName(String name),findByNameLike(String name),findByUsernameAndPassword(String username,String password)
name、username、password为属性而不是字段
②注解@Query
方法名随便写 在方法上注解@Query(value="",nativeQuery=true/false(默认为false JPQL true为SQL))

如何实现带条件的删除更改:
注解@Query
方法名随便写 在方法上注解@Query(value="",nativeQuery=true/false(默认为false JPQL true为SQL))

在这个基础上再增加一个注解@Modifying


分页查询:
页面向action传递page,rows
在action中创建pageAble实现类 参数为page,rows
使用spring data jpa 已经封装好的分页查询方法findAll传入参数 pageAble
由于easyUI需要特定格式的json串
我们将spring data jpa的分页查询方法返回的page<bean>中的总条数及数据封装进map(key分别为"total"与"rows")
压入值栈变为json


回复 使用道具 举报
李思贤:今天进行了收派标准的管理:
        一:
        1首先讲解了easyUI window窗口的基本使用

2校验框(class=”easyui-vaildatebox”):
指定Required:属性为true必须完成输入校验
其他验证规则vaildType属性:1email  2url  3length[0,100]  4remote(假的ajax)
除此之外,还可以自定义规则.

数字校验框(easyui-numberbox)
日期输入框(easyui-datebox)
下拉输入框(easyui-combobox)

对表单验证:easyui- form对表单判断是否全都通过校验,
If($(”#表单id”)).form(‘validate’)


        二:Struts2和spring整合
导依赖,第一天基本导过了,记得在web.xml中配置Struts2核心过滤器

Action处理请求转发显示空白,设置type重定向,因为绝对路径和相对路径的问题


        三:spring整合JPA简化DAO的编写
1首先要在Maven导入坐标spring-data-jpa
        配置applicationCntext.xml
         
然后就是整个代码业务层的编写,这里Dao层接口要继承JoaRespotory,
不需要对DAO接口做任何实现,Spring会调用SimpleJpaRepository实现
自己开发 Repository 只需要继承 JpaRepository 接口
 CrudRepository:
save、delete、deteleAll、findAll、findOne、count
 PagingAndSortingRepository:
findAll(Sort) 基于排序的查询、 findAll(Pageable) 基于分页的查询

Spring data Query使用:
一:根据方法命名规则自动生成:
基于一列查询等值查询 findBy 列名 例如: findByName(String name);
基于一列模糊查询 findBy 列名 Like 例如: findByNameLike(String name)
基于两列等值查询 findBy 列名 And 列名 例如: findByUsernameAndPassword(String
username, String password )


二:不按命名规则写的查询方法,可以配置@query
@Query(“sql语句”)
Public List<Standard> querName(String name);

三不按命名规则写的查询方法在实体类上写(了解)

带有条件的删改操作:
使用@Query注解完成 搭配使用@Modifying



收派查询分页用json;这里要在pom.xml导入json插件
Struts2-json-plugin

@ParentPackage(“json-default”)
Result中返回type=”json”

这里我们新学习了Pageable, PageRequset的page页码从0开始,
构造对象是要传入page-1
        Pageable pageable = new PageRequset(page-1,rows);
我们只需要一个findAll(pageable),即可查询到数据
因为需要数据total和rows,所以存入map集合
map.put(“total”,pageInfo.getTotalofElements);
map.put(“rows”,pageInfo.getContent());
转为json
ActionContext.getContext.getValueStack.push(map);


收派标准修改功能:
只有当一行被选中时才能点击修改,这里我们用表单的load方法,
它提交到Action中的调用save方法,因为save封装好了,没有Id的话
,会增加数据,有Id的话,他会帮你修改.这样就大大减少了我们的代码量.

回复 使用道具 举报
张裕
datagrid数据表格的前后台参数
        请求数据: page 页码、 rows 每页记录数
        响应数据: total 总记录数、 rows 当前页数据记录

JpaRepository(dao实现接口 Spring data JPA提供了CRUD方法)
        不按命名规则写的查询方法,可以配置@Query 绑定 JPAL 语句或者 SQL 语句

        使用@Query 注解完成 , 搭配使用@Modifying 标记修改、删除操作

收派标准的数据修改
        通过easyUI form('load',回显的数据)来进行表单的数据回显
        添加隐藏域id 回显数据时会将id回显到表格中 保存数据时service层会根据id进行修改操作


spring data提供了分页查询方法 需要pageable参数
        创建PageRequest对象 参数为当前页数-1 pageSize
        创建map集合 添加total和rows属性
        将map集合压入valueStack中 返回到页面中
        有不需要加载的对象时 可以在entity中的get方法上加入@JSON(serialize=false)

条件查询需要dao继承JpaSpecificationExecutor接口
        创建Specification实现类 重写方法 在方法中判断查询条件是否为空
        不为空使用CriteriaBuilder来进行条件添加 第一个参数为条件的参数类型 第二个为参数
        返回类型为Predicate 模糊查询可在参数前后加入"%"
        多表查询的条件添加
        root.join("关联的属性",JoinType.INNER) 通过返回的参数进行参数获取
回复 使用道具 举报
陈世彪:

bos项目第三天.jpg (281.22 KB, 下载次数: 11)

bos项目第三天.jpg
回复 使用道具 举报
今天要掌握spring data结合easyui的数据表格 进行增删改和分页查询即可
回复 使用道具 举报
颜琳琳
    1.窗口的使用:
        1)class="easyui-window"
        2)$().window('open')打开窗口
        3)validatebox校验框
                numberbox数字校验框
                combobox下拉菜单校验
                datebox日期校验框
        (required=true 输入提示)
        转发:一次请求一次响应,地址栏不变
        重定向:两次请求两次响应,地址栏改变(相对路径)

JPA是java吃就层的API,是对视图对象持久化到数据库的操作.

Spring Data JPA使用:(基于jpa实现)
        DAO接口编写规则:(继承JPARepository接口,相当继承了其所有父接口,进行批量的增删改查操作)
        继承JPARepository<当前操作的类,主键的类型>
        1.基于Spring Data JPA的特殊查询
        1)命名规范查询:
                在dao接口中定义方法:findBy属性名称,  findBy属性名称Like,findBy属性名称And属性名称,findBy属性名称IsNull,findBy属性名称IsNotNull等常用方法名
        2)基于注解@Query的查询方法,方法名可随意
                在到接口定义方法:在方法上@Query("hql语句")@Modifying
               
datagrid数据表格
后台向前台发送数据:{'total':"",rows[]}
前端向后台发送数据:page(当前页),rows(每页显示多少条)
        实现数据分页查询Pageable一个接口
注意:
        前端传类的page从0开始,而PageRequest的向前端传的数据是从1开始,所以要传page-1
        Pageable pageable=new PageRequest(page-1,rows);
        在获取total需要通过getTotalElement()获取,获取rows通过getContent()获取
        注意:在做修改操作需要在添加操作打开窗口前,执行表单的清空
        $("表格id").form('clear');
回复 使用道具 举报
Spring data jpa  真的厉害,hibernate还要写实现类,可是spring data jpa 就不用写了
只要实现JpaRepository<当前的bean, bean的主键数据类型>就好了,写个接口他就帮你把实现类写好了, 真的强大,
struts2 注解
类上
@ParentPackage 包基础谁? extends=”struts-default”
@Namespace 包命名空间 namespace=”/”
@Actions struts2 的 Action 配置,用于配置多个 Action 方法上
@Action 配置访问路径,和方法绑定
@Result 结果集配置


struts2 和 spring 整合
struts2 的 Action 使用 spring 注解,被 spring 管理
@Controller spring 表现层 bean
@Scope 配置 Action 为多例


Spring data Query 的实现条件查询
        第一种   命名查询
                名字同意findBy+bean中对应的属性  
基于一列模糊查询 findBy 列名 Like 例如: findByNameLike(String name)
基于两列等值查询 findBy 列名 And 列名 例如: findByUsernameAndPassword(String username, String password )
还有or  等等……
                第二种   注解查询
                  不按命名规则写的查询方法,可以配置@Query 绑定 JPAL 语句或者 SQL 语句         
                    例如@Query( hql或者sql语句)
带有条件 修改和删除操作 如何解决
使用@Query 注解完成 , 搭配使用@Modifying 标记修改、删除操作
                        例如@Query( hql或者sql语句)
                @modifying
        分页:
`                从前端传当前页数和当页显示多少条数据到后台
                后台传一个json数据   里面有{total: page.getTotalElements()   ,    rows: page.getContent() }
                PageRequest的一个参数是0  所以要-1
               
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马