无法在这个位置找到: head2.htm
当前位置: 建站首页 > 新闻动态 > 公司新闻 >

SSH电子商务新项目实战演练之五:进行数据信息

时间:2021-02-14 06:14来源:未知 作者:jianzhan 点击:
上一节大家进行了EasyUI莱单的完成。这一节大家关键来写一下CategoryServiceImpl完成类,进行数据信息库的联级查寻。一般新项目从后向前做,先做service(大家沒有提取Dao,最终再提取)

上一节大家进行了EasyUI莱单的完成。这一节大家关键来写一下CategoryServiceImpl完成类,进行数据信息库的联级查寻。一般新项目从后向前做,先做service(大家沒有提取Dao,最终再提取),做了了再做上边层。

在写以前,首先看一下数据信息库文件的表的状况:

SQL编码 drop database if exists shop;  /*建立数据信息库,并设定编号*/  create database shop default character set utf8;    use shop;  /*删掉管理方法员表*/  drop table if exists account;  /*删掉产品类型表*/  drop table if exists category;    /*============================*/  /* Table:管理方法员表构造 */  /*============================*/  create table account  (   /* 管理方法员序号,全自动提高 */   id int primary key not null auto_increment,   /* 管理方法员登陆名 */   login varchar(20),   /* 管理方法员名字 */   name varchar(20),   /* 管理方法员登陆密码 */   pass varchar(20)  );    /*============================*/  /* Table:产品类型表构造 */  /*============================*/  create table category  (   /* 类型序号,全自动提高 */   id int primary key not null auto_increment,   /* 类型名字 */   type varchar(20),   /* 类型是不是为网络热点类型,网络热点类型才有将会显示信息在*/   hot bool default false,   /* 外键约束,该类别由哪个管理方法员管理方法 */   account_id int,   constraint aid_FK foreign key(account_id) references account(id)  ); 

关键有二张表,产品类型表和管理方法员表,而且产品类型表格中出示了一个外键约束关系管理方法员表。也便是产品和管理方法员是多对一的关联。如今大家刚开始撰写查寻产品的类型信息内容,必须联级管理方法员。

1. 完成联级查寻方式

最先在CategoryService插口中界定该方式:

Java编码 public interface CategoryService extends BaseService Category  {   //查寻类型信息内容,联级管理方法员   public List Category &ount(String type); //应用类型的名字查寻  } 

随后大家在CategoryService的完成类CategoryServiceImpl中完成这一方式:

Java编码 @Service( categoryService )  public class CategoryServiceImpl extends BaseServiceImpl Category  implements CategoryService {     @Override   public List Category &ount(String type) {   String hql =  from Category c where c.type like :type ;   return getSession().createQuery(hql)   .setString( type ,  %  + type +  % ).list();   }  } 

在2个Model中大家配一下关系注释:

Java编码 //Category类中  @ManyToOne(fetch = FetchType.EAGER)  @JoinColumn(name =  account_id )  public Account&ount() {   return this.account;  }  //Account类中  @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy =  account )  public Set Category  getCategories() {   return this.categories;  } 

随后大家在检测类中检测一下:

Java编码 @RunWith(SpringJUnit4ClassRunner.class)  @ContextConfiguration(locations= classpath:beans.xml )  public class CategoryServiceImplTest {     @Resource   private CategoryService categoryService;     @Test   public void&ount() {   for(Category c : ount( )) {   System.out.println(c);   System.out.println(ount());   }   }  } 

2. 联级查寻存有的难题

大家看一下操纵台的輸出能看出,它发过不仅一条SQL句子,可是大家本来只查寻了一次,为何会发那么多句子呢?这便是普遍的1+N难题。说白了的1+N难题,便是最先传出一条句子查寻当今目标,随后传出N条句子查寻关系目标,因而高效率越来越很低。这儿就2个目标,假如有大量的目标,那高效率便会受到非常大影响了,大家该怎样处理这一难题呢?

将会大伙儿会想起将fetch设定生FetchType.LAZY也不会发好几条句子了,可是这毫无疑问不好,ount目标了,较为好的处理方式就是我们自身写hql句子,应用join fetch。实际看改动后的CategoryServiceImpl完成类:

Java编码 @Service( categoryService )  public class CategoryServiceImpl extends BaseServiceImpl Category  implements CategoryService {     @Override   public List Category &ount(String type) {   String hql =  from Category c left join fetch c.account where c.type like :type ;   return getSession().createQuery(hql)   .setString( type ,  %  + type +  % ).list();   }  } 

ount目标加到Category中来,ount目标了。

3. 进行分页查询作用

Hibernate中的分页查询非常简单,只必须启用2个方式setFirstResult和setMaxResults就可以:大家改动一下CategoryService插口和它的完成类CategoryServiceImpl:

Java编码 //CategoryService  public interface CategoryService extends BaseService Category  {   //查寻类型信息内容,联级管理方法员   public List Category &ount(String type, int page, int size); //并完成分页查询  }    //CategoryServiceImpl  @Service( categoryService )  public class CategoryServiceImpl extends BaseServiceImpl Category  implements CategoryService {     @Override   public List Category &ount(String type, int page, int size) {   String hql =  from Category c left join fetch c.account where c.type like :type ;   return getSession().createQuery(hql)   .setString( type ,  %  + type +  % )   .setFirstResult((page-1) * size) //从第好多个刚开始显示信息   .setMaxResults(size) //显示信息好多个   .list();   }  } 

大家在检测类中检测一下:

Java编码 @RunWith(SpringJUnit4ClassRunner.class)  @ContextConfiguration(locations= classpath:beans.xml )  public class CategoryServiceImplTest {     @Resource   private CategoryService categoryService;     @Test   public void&ount() {   for(Category c : ount( ,1,2)) { //显示信息第一页,每张2总数据   System.out.println(c +  ,  + ount());   }   }  } 

因此,大家写完后Service的方式了,进行了对产品类型的联级查寻和分页查询作用。

SSH电子商务新项目实战演练之四:EasyUI莱单的完成 (:59)

SSH电子商务新项目实战演练之三:应用EasyUI构建后台管理网页页面架构 (:9)

SSH电子商务新项目实战演练之二:基本删改查改、Service和Action的提取及其应用注释更换xml (:14)

SSH电子商务新项目实战演练之一:融合Struts2、Hibernate和Spring (:3)

Hibernate下openSession和getCurrentSession获得的联接与事务管理的关联 (:56)

深层次浅出SINGLETON单例设计方案方式 (:50)

怎样处理Chrome中网页页面的运行内存泄漏难题 (:15)

20个十分有效的JAVA程序片断 (:14)

Hibernate下知名的延迟时间载入难题和1:N难题 (:38)

详细说明Spring完成AOP的多种多样方法 (:8)


网页链接(选填)

认证(*)

文章正文(*)(留言板留言最多篇幅:1000)

记牢我,下一次回应时无需再次键入本人信息内容

(责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
无法在这个位置找到: ajaxfeedback.htm
栏目列表
推荐内容


扫描二维码分享到微信