3.ssh整合中的一些总结

1.struts2中的重定向:<resultname="delete" type="redirectAction">customer_list</result>,需要注意的是,可以不配置jsp页面,而是直接配置action.

2.如果在service类上面没有添加事物,出现异常

 

3.存放对象到域对象或者值栈,这样就可以在其他的页面去取值

 ServletActionContext.getRequest().setAttribute("list", list);

 // 创建list对象,生成get方法

private List<Customer> list;

public List<Customer> getList() {

         return list;     }

 

 

4.取域对象或者值栈中的值

<!-- 遍历list,存放到cus中,然后显示出到下面的表格中 -->

 <s:iterator value="list" var="cus">

<TR><TD><s:propertyvalue="#cus.custName"/></TD>                          

</TR>

</s:iterator>

 

5.分页功能(核心就是:这一夜有关的数据是什么,包装到一个javabean中去,让后通过传入一个当前页就可以找到所有关于这一页的所有信息,再显示到页面中就行了)

1).首先在mysql数据库中,分页的语句是select * from customer limit 0,3;两个参数的意思分别是,第一是开始的位置,第二是显示的条数。

2).开始位置计算公式:(当前页-1)*每页显示的条数

3)总页数:// 总的 页数:总记录数/每页显示的记录数

         int totalPage = 0;

         if (totalCount % pageSize == 0) {

              totalPage = totalCount / pageSize;

         } else {

              totalPage = totalCount / pageSize + 1;

}

4)步骤:创建一个javabean封装和分页有关的属性。最重要的是要在bean创建一个和分页有关的实体类的list集合,// 每页记录的list集合

    private List<Customer> list;

这样,在得到这个bean之后,就可以得到Customer,就可以在页面中去调用相应的属性。

5)总体思路:就是传第几页,然后就可以从数据库中读取出这页的所有数据。由页数作为参数。

6)封装:把后台查到的数据封装到域对象中,方便前台获取。

 

 

6.一对多的关联

(该实体类中引入另一个实体类中的对象,那么就在该实体类的映射文件中去配置这个对象,要搞清楚一方和多方)

1).实体类:// 客户跟联系人是一对多,在一的一方注入多的一方的集合 private Set<LinkMan> setLinkMan = new HashSet<LinkMan>();,在多的一方声明一的一方。private String lkmMobile;然后都分别生成对应的set和get方法。

2)映射文件:无论一方还是多方,在引入对方的对象后,都要去引入。

一方:<!-- 设置外键,配置多的一方的对象,指明多的一方的类 -->

    <set name="setLinkMan">

       <key column="clid"></key>

       <one-to-many class="pers.chq.entity.LinkMan" />

    </set>

多方:要配置一方的对象,一方的类,和外键。

<many-to-one name="customer" class="pers.chq.entity.Customer"

       column="clid"></many-to-one>

这只是配置,在表中并不会生成对方的属性,而且会在多的一方生成一个外键,关联到一方的主键。

 

7.遍历出域对象中的数据到下拉列表中,

Value是提交到服务器中的值

 

8.当外键不是它本身的数据,不能直接封装的时候(间接注入)

 

9.

  1. struts2文件上传:

1).jsp页面

 

 

2)action中:

 

 

上传文件默认最大是2m,可以自己配置成其他大小

1)       直接去默认配置文件里去改值:struts-core.jar---->org.apache.struts2------>default.properties,改里面的值就行了

2)       在struts.xml文件中设置:

 

 

10.

  1. no session 异常:org.hibernate.LazyInitializationException: could not initialize proxy - no Session

1)       场景:一般是出现在多表查询。

2)       原因:hibernate的查询,底层就是通过调用session中的方法来实现的,但是session被使用后会关闭,这时再调用就会出现no session异常

3)       解决方法:让session延迟关闭,等action执行完成之后再关闭,具体方法:在web.xml中配置过滤器实现session延时关闭。(而且必须是在struts2核心配置过滤器之前)

 

11.

在修改时,实现把之前的下拉项的值显示出来

思路: 当前联系人所属的客户id和所有客户id比较,如果相同就为选中状态 

12.

  1. hibernate的两个关联的表中,当其中一个做了修改后,在另一个表中显示的被改的表的内容不会改变,而是成为了null.

1)   原因:hibernate的外键是双向维护的,就是两个表都会维护外键关系。

2)   解决办法:就是让一的一方放弃这种维护关系。在一的一方使用inverse=”true”,inverse的默认值是false,就是不放弃。

总结:关系(Relationship)由两方组成,其中被定义了inverse=true的一方表示:“我是反向被控制的一方,我不负责维护关系”,而inverse=false则表示:"我是关系的控制方,拥有者,我会维护关系"。默认情况为inverse=false,即关系的两方都维护和控制关系,这中情况会造成一方重复一遍另一方已经完成的事情,比如更新外键列的值,这是不可取的,需要使用inverse=true来避免。 

在没有包含关系信息的表中,则使用inverse=true. (也就是在表中不存在外键的一方)

 

13:删除两个有关联的表中的一个,如果没配置inverse,和cascade,会先把外键设置为null然后再删。

14.级联删除:把一的一方删了,顺带把这个对应的多的一方也删了。配置方法:在一的一方设置cascade=“delete”

总结:多表之间的设置,一般都在一的一方进行配置。

 

 

 15.

多对多关系建表:

 1)创建第三张表,使用外键维护关系。拆分为两个一对多。

   Hibernate当中的缺陷:第三张表只有两个字段,也就是两个id

1)        拆分方式:引入一个中间表,然后两个表对中间表都是一对多的关系了。

 

 

16.多条件组合查询

1.可以写底层的hibernate代码

2.使用hibernate模板里面的find方法

/**

     * this.getHibernateTemplate().find(queryString, values);

     *  可见需要两个参数,hql语句和参数,所以就要想办法去得到这两个数。

     *  方法:hql语句拼接,和把参数存到集合中去

     *  注意:hql拼接需要留好空格

    */

3.使用离线对象和hibernate模板里面的方法(重点掌握)

// 創建离线对象,指定对哪个实体类进行操作

   DetachedCriteria criteria = DetachedCriteria.forClass(Customer.class);

// 判断条件值是否为空

    if (customer.getCustName() != null && !"".equals(customer.getCustName())) {

       // 设置属性设置值

    criteria.add(Restrictions.eq("CustName", customer.getCustName()));

   }

return (List<Customer>) this.getHibernateTemplate().findByCriteria(criteria);

 

17.

统计功能的实现

Sql语句:select count(*) as XXX ,XXXX from XXX group by XXX

因为hibernate的局限,多表查询会比较难实现,所以执行多表查询的时候,应该调用底层sql来实现,就是得到sessionFactory-----得到session------得到SQLQuery对象,然后调用里面的方法执行sql语句来实现。思想:当返回的为两个字段并且是一一对应的时候,就转换为map结构。

 

18.

.json

 1)格式:对象的格式:

 

         数组的格式:

 

2)好处:

 

 19.

.多对多映射文件的配置

 

 

posted @ 2018-03-12 15:23  微尘chq  阅读(199)  评论(0编辑  收藏  举报