巴巴运动网学习笔记(16-20)

1.ProductType的JPA映射

View Code
 1 @Entity
2 public class ProductType {
3 private int id;
4 private String name;
5 private String note;
6 private boolean visible = true;
7 private Set<ProductType> child;
8 private ProductType parent;
9
10 @Id @GeneratedValue(strategy = GenerationType.AUTO)
11 public int getId() {
12 return id;
13 }
14
15 public void setId(int id) {
16 this.id = id;
17 }
18 @Column(length=30,nullable=false)
19 public String getName() {
20 return name;
21 }
22
23 public void setName(String name) {
24 this.name = name;
25 }
26 @Column(length=100)
27 public String getNote() {
28 return note;
29 }
30
31 public void setNote(String note) {
32 this.note = note;
33 }
34 @Column(nullable=false)
35 public boolean isVisible() {
36 return visible;
37 }
38
39 public void setVisible(boolean visible) {
40 this.visible = visible;
41 }
42 @OneToMany(cascade={CascadeType.REFRESH,CascadeType.REMOVE},mappedBy="parent")
43 public Set<ProductType> getChild() {
44 return child;
45 }
46
47 public void setChild(Set<ProductType> child) {
48 this.child = child;
49 }
50 @ManyToOne(cascade=CascadeType.REFRESH) @JoinColumn(name="parentid")
51 public ProductType getParent() {
52 return parent;
53 }
54
55 public void setParent(ProductType parent) {
56 this.parent = parent;
57 }
58
59 }

2.实现ProductType的无限级分类

View Code
 1 @OneToMany(cascade={CascadeType.REFRESH,CascadeType.REMOVE},mappedBy="parent")
2 public Set<ProductType> getChild() {
3 return child;
4 }
5
6 public void setChild(Set<ProductType> child) {
7 this.child = child;
8 }
9 @ManyToOne(cascade=CascadeType.REFRESH) @JoinColumn(name="parentid")
10 public ProductType getParent() {
11 return parent;
12 }
13
14 public void setParent(ProductType parent) {
15 this.parent = parent;
16 }

3.实现ProductTypeService和ProductTypeServiceImpl

a.创建DAO接口,实现增删改查代码的服用

View Code
 1 package cnblogs.xiaoqiu.service.base;
2
3 public interface DAO {
4
5 /**
6 * 保存实体
7 * @param entity
8 */
9 public void save(Object entity);
10 /**
11 * 删除实体
12 * @param entity
13 */
14 public <T> void delete(Class<T> classType,Object entityId);
15 /**
16 *
17 * @param entitys 要删除的实体的ID数组
18 */
19 public <T> void delete(Class<T> classType,Object[] entitysId);
20 /**
21 * 更新实体
22 * @param entity
23 */
24 public void update(Object entity);
25 /**
26 * 查找实体
27 * @param <T>
28 * @param classType 实体的类型
29 * @param id 实体的ID
30 * @return
31 */
32 public <T> T find(Class<T> classType,Object id);
33 }

b.创建DAOSupport抽象类,为以后类实现DAO接口提供方便

View Code
 1 package cnblogs.xiaoqiu.service.base;
2
3 import javax.persistence.EntityManager;
4 import javax.persistence.PersistenceContext;
5
6 import org.springframework.stereotype.Service;
7 import org.springframework.transaction.annotation.Propagation;
8 import org.springframework.transaction.annotation.Transactional;
9
10 @Service @Transactional
11 public abstract class DAOSupport implements DAO {
12 @PersistenceContext protected EntityManager entityManager;
13
14 public <T> void delete(Class<T> classType,Object entityId) {
15 entityManager.remove(entityManager.getReference(classType, entityId));
16
17 }
18
19 public <T> void delete(Class<T> classType,Object[] entitysId) {
20 for(int i=0;i<entitysId.length;i++){
21 delete(classType, entitysId[i]);
22 }
23 }
24 @Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED)
25 public <T> T find(Class<T> classType, Object id) {
26 return entityManager.find(classType, id);
27 }
28
29 public void save(Object entity) {
30 entityManager.persist(entity);
31 }
32
33 public void update(Object entity) {
34 entityManager.merge(entity);
35 }
36
37 }

c.创建ProductTypeService接口

View Code
1 package cnblogs.xiaoqiu.service.product;
2
3 import cnblogs.xiaoqiu.service.base.DAO;
4
5 public interface ProductTypeService extends DAO{
6
7 }

d.创建ProductTypeServiceImpl类

package cnblogs.xiaoqiu.service.product.impl;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import cnblogs.xiaoqiu.service.base.DAOSupport;
import cnblogs.xiaoqiu.service.product.ProductTypeService;

@Service @Transactional
public class ProductTypeServiceImpl extends DAOSupport implements ProductTypeService {
}

4.覆盖DAOSupport的delete方法

View Code
 1 package cnblogs.xiaoqiu.service.product.impl;
2
3 import org.springframework.stereotype.Service;
4 import org.springframework.transaction.annotation.Transactional;
5 import cnblogs.xiaoqiu.service.base.DAOSupport;
6 import cnblogs.xiaoqiu.service.product.ProductTypeService;
7
8 @Service @Transactional
9 public class ProductTypeServiceImpl extends DAOSupport implements ProductTypeService {
10
11 @Override
12 public <T> void delete(Class<T> classType, Object entityId) {
13 String jpql = "update ProductType p set p.visible=?1";
14 entityManager.createQuery(jpql).setParameter(1, false).executeUpdate();
15 }
16
17 }

5.测试ProductTypeServiceImpl

转载于:https://www.cnblogs.com/xiaoqv/archive/2012/03/25/2416831.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/297238.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

监控主机安装需要材料

监控需要材料&#xff1a;方案一 没有监控录像机1.需要监控采集卡 &#xff08;可以用言者型号&#xff09;2.红外摄像机 &#xff08;监控距离10m---80m&#xff09;3.电源线视频线 &#xff08;可以用网线代替&#xff0c;用网线代替需要购买视频转Q9对接头&#xff09;…

批量生成 Gitee 仓库克隆命令的方法

当我们在一个新的公司入职或者发现一个很有意思的开源项目作者时&#xff0c;我们可能需要或者很想将该公司或作者的所有开源项目都克隆到本地慢慢研究。于是&#xff0c;笔者制作出了一段脚本可以一波将页面上的所有仓库生成克隆命令&#xff1a;var tmp []; $(.repository).…

Heartbeat+httpd+NFS 实现高可用的Web服务器

一、环境系统:CentOS 6.4x64位最小化安装nfs:192.168.3.31node1:192.168.3.32node2:192.168.3.33vip:192.168.3.34二、拓扑图三、前提条件1.节点之间主机名互相解析node1,node2:[rootheatbeat-node1 ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost…

在Marketplace上销售应用【WP7学习札记之十八】

Maketplace规则&#xff1a; ◇[1]Maketplace是唯一发布应用程序的地方&#xff1b; ◇[2]用户能在Maketplace上购买和部署应用程序&#xff1b; ◇[3]每个开发者可以解锁3台手机&#xff0c;这样开发者可以编写和部署应用程序到解锁的手机上。 销售应用程序&#xff1a; ◇[1]…

python时间函数报错_Python Day11-LEGB-global-时间函数

1.LEGB规则对变量名进行作用域解析我们已经知道了多个命名空间可以独立存在&#xff0c;而且可以在不同的层次上包含相同的变量名。“作用域”定义了Python在哪一个层次上查找某个“变量名”对应的对象。接下来的问题就是&#xff1a;“Python在查找‘名称-对象’映射时&#x…

java时间字符串比较大小_Java字符串转换为日期和时间比较大小

DateFormat fmt new SimpleDateFormat("yyyy-MM-dd");String dateBeginfmt.format(carrierCommand.getDateBegin());String dateEndfmt.format(carrierCommand.getDateEnd());//如果获得的日期格式不是2008-05-22,就必须要格式化一下日期String dateBegin request.…

VS2005混合编译ARM汇编代码

2019独角兽企业重金招聘Python工程师标准>>> 在开发过程中&#xff0c;发现简单的在Storage Memory区域拷贝或粘贴文件不能达到硬件量测的要求&#xff0c;需要直接通过编写ARM汇编指令让CPU直接对Memory进行读写数据。 以前没有用VS2005编写过汇编代码&#xff0c;…

中国最险六大寺庙,最后一座至今无人登临

全世界只有3.14 % 的人关注了爆炸吧知识来源&#xff1a;「风景线」佛教远离尘世的特性使得很多寺庙修建于偏僻险要的山野&#xff0c;看似岌岌可危的建筑&#xff0c;却能屹立千百年而不倒&#xff0c;这不得不感叹古人智慧的伟大&#xff0c;这6大险要寺庙&#xff0c;绝对能…

c/c++ code JSON

cJSON 初体验 cJSON是一个超轻巧&#xff0c;携带方便&#xff0c;单文件&#xff0c;简单的可以作为ANSI-C标准的JSON解析器。官网地址 cJSON.c /*Copyright (c) 2009 Dave GamblePermission is hereby granted, free of charge, to any person obtaining a copyof this softw…

第五篇

C#中异常捕获如来完成: Try { 有可能出现错误的代码 } Catch { 写出现错误的代码; } ,-- 又称为自加1 和自减1 以前学的是一元运算符,而自加自减是一元运算符. Int age 18; Age age1; 用自加可写为: Int age 18; Age; Console.WriteLine(“age{0}”,age); 这种写法的效率比较…

Dapr牵手.NET学习笔记:发布-订阅

queue&#xff0c;是很好的削峰填谷工具&#xff0c;在业内也是主流&#xff1b;发布订阅&#xff0c;可以有效的解耦两个应用&#xff0c;所以dapr把他们进行了有效的封装&#xff0c;我们使用起来更简单高效。本篇的案例是下完订单后&#xff0c;会把消息发布到redis&#xf…

Java标签移动_如何使用基于鼠标单击的标签移动特定游戏对象?

我有一个由6个孩子的游戏对象组成的3D模型&#xff0c;我希望能够点击模型的每个部分并使该部分沿某个方向移动然后再次点击它然后返回到它原来的位置 . 我给每个零件都带了一个标签和一个盒子对撞机我打算让它们在我用碰撞器和不同的标签点击物体时移动 . 我看到光线投射有帮助…

sql年月日24小时制_Power Query 抓取气象台24小时降水量数据

我们借鉴之前抓取台风路径数据的例子&#xff0c;试一试抓取降水量数据&#xff1a;之前我们访问过这个网站&#xff0c;也试着抓取过数据&#xff0c;不过在谷歌浏览器中我们只能够找到两天的数据&#xff0c;但是通过台风路径数据抓取&#xff0c;我们猜想只要我们向服务器提…

薅羊毛丨5个平价好物,终于终于终于打折了!

▲ 点击查看大家好&#xff0c;超模全新的固定栏目「薅羊毛」上线了&#xff01;既然是薅羊毛&#xff0c;怎么能空着手来&#xff1f;别看今天是草单&#xff0c;但所有产品都是咱们商务部小哥谈了好久才拿下的团购&#xff0c;而且全都包邮。毕竟好用的好吃的&#xff0c;啥都…

50个Web设计师超便利的工具

作为一个 Web 设计师并不容易&#xff0c;不仅考虑设计与架构&#xff0c;还要时刻注意各种小细节&#xff0c;设计师的工作被各种各样的问题包围&#xff0c;你需要一套超级便利的工具帮你解决各种消耗时间和精力的问题。我爱互联网在这里给您介绍了50个非常强大的工具&#x…

linux之拷贝文件/备份文件;按照原来的权限和日期拷贝.

linux下备份成了问题.虽然有人说 tar gz 之类的,貌似也有类似ghost的软件.ghost对linux的支持没那么好,以前备份linux分区ext4,数据全部没有成功备份. 现在我要将vmware虚拟机中一个硬盘的数据转移到另一个vmware硬盘中,因为他占用了5GB的磁盘空间,却只有2GB文件.比如lfs的时候…

[转载] 三十不立,四十迷惑的人生

冯唐说&#xff1a;世界上有两种长大的方式&#xff0c;一种是明白了&#xff0c;一种是忘记了明白不了的&#xff0c;心中了无牵挂&#xff0c;几乎所有人都是后一种方式长大。而我是不是第三种&#xff1f;没明白&#xff0c;也没忘记明白不了的&#xff0c;所以一直迷茫中&a…

Docker小白到实战之Docker Compose在手,一键足矣

前言Docker可以将应用程序及环境很方便的以容器的形式启动&#xff0c;但当应用程序依赖的服务比较多&#xff0c;或是遇到一个大系统拆分的服务很多时&#xff0c;如果还一个一个的根据镜像启动容器&#xff0c;那就有点累人了&#xff0c;到这有很多小伙伴会说&#xff1a;弄…

Hsiaoyang:Google搜索结果页面分析

Hsiaoyang:Google搜索结果页面分析首先请参看Google官方的“搜索结果页”用户在使用搜索引擎的时候&#xff0c;首先会在搜索框中输入关键词&#xff0c;随后SE会返回一个搜索结果呈现给用户。SEO的主要对象是搜索引擎&#xff0c;而了解搜索引擎对搜索结果的展现对于SEO人员的…

什么是python扩展库_什么是目前比较常用的Python扩展库管理工具

展开全部在Python环境中已经有很多成熟的包&#xff0c;可以通过安装这些包来扩展我们的程序。例如&#xff0c;很32313133353236313431303231363533e4b893e5b19e31333365643464多时候Python开发人员都会去PyPI网站去查找自己想要使用的包&#xff0c;然后进行安装。PyPI ( Pyt…