---
# System prepended metadata

title: 0531 後端

---

# 0531 後端
# customer bean
```
package com.ctbcbank.demo.finallab.bean;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
@JsonIgnoreProperties({ "hibernateLazyInitializer", "handler" })
public class CustomerBean {
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private long id;
	private String name;
	private String password;
	
	@ManyToMany(fetch = FetchType.LAZY,cascade=CascadeType.ALL)
	@JoinTable(name="product_cart", 
	joinColumns = {@JoinColumn(name="customer_id")},
    inverseJoinColumns = {
            @JoinColumn(name = "product_id")
        })
    private List<ProductBean> products = new ArrayList<ProductBean>();
	
	public CustomerBean(String name, String password) {
		super();
		this.name = name;
		this.password = password;
//		this.cart=cart;
	}
}



```
# productbean
```
package com.ctbcbank.demo.finallab.bean;

import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

import lombok.Data;
import lombok.NoArgsConstructor;

@Entity
@Data
@NoArgsConstructor
@JsonIgnoreProperties({ "hibernateLazyInitializer", "handler" })
public class ProductBean {
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Long id;
	private String name;
	private int price;
	private String filePath;
	private String detail;
	private Date updateDate = new Date();

	@ManyToOne
	@JoinColumn(name = "PRODUCTCATEGORY_ID_FK")
	@JsonIgnoreProperties(ignoreUnknown = true,value = {"products"})
	ProductCategoryBean productCategory;
	
	@ManyToMany(cascade = CascadeType.ALL, mappedBy="products")
	@JsonIgnore
    private List<CustomerBean> customers;

	public ProductBean(String name, int price, String filePath, String detail) {
		super();
		this.name = name;
		this.price = price;
		this.filePath = filePath;
		this.detail = detail;
	}

}

```
# productCategory bean
```
package com.ctbcbank.demo.finallab.bean;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;

import lombok.Data;
import lombok.NoArgsConstructor;


@Entity
@Data
@NoArgsConstructor
//@JsonIgnoreProperties({ "hibernateLazyInitializer", "handler" })
public class ProductCategoryBean{
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private long id;
	private String name;

	@OneToMany(mappedBy = "productCategory", cascade = CascadeType.REMOVE)
	private List<ProductBean> products = new ArrayList<>();
}


```
# customerbean controller
```
package com.ctbcbank.demo.finallab.Controller.rest;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.ctbcbank.demo.finallab.Repository.CustomerBeanRepository;
import com.ctbcbank.demo.finallab.Repository.ProductBeanRepository;
import com.ctbcbank.demo.finallab.bean.CustomerBean;
import com.ctbcbank.demo.finallab.bean.ProductBean;
import com.ctbcbank.demo.finallab.service.CustomerBeanService;
import com.ctbcbank.demo.finallab.service.ProductBeanService;

import lombok.extern.slf4j.Slf4j;

@RestController
@CrossOrigin
@Slf4j
@RequestMapping("/api/customer")
public class CustomerBeanController {
	@Autowired
	private CustomerBeanService service;
	@Autowired
	private ProductBeanService PBservice;

//	取得所有帳戶
	@RequestMapping(value = "/all", method = RequestMethod.GET)
	public List<CustomerBean> getAllCustomers() {
		return service.getAllCustomerBean();
	}

//	取得指定id
	@RequestMapping(value = "/{id}", method = RequestMethod.GET)
	public CustomerBean getCustomerBeanById(@PathVariable long id) {
		CustomerBean customerBean = service.getCustomerBeanById(id);
		return customerBean;
	}

//	刪除指定id
	@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
	public void removeCustomerBean(@PathVariable long id) {

		service.removeCustomerBean(id);
	}

//	新增
	@RequestMapping(value = "/all", method = RequestMethod.POST)
	public String createCustomer(@RequestBody CustomerBean bean) {
		service.saveOrUpdateCustomerBean(bean);
		return bean.toString();
	}

//	修改 
	@RequestMapping(value = "/{id}", method = RequestMethod.PUT)
	public CustomerBean modifyCustomer(@PathVariable("id") Long id, @RequestBody CustomerBean bean) {
		bean.setId(id);
		return service.updateCustomerBean(bean);
	}

//	比對是否存在
	@RequestMapping(value = "/{name}", method = RequestMethod.POST)
	public Boolean compareCustomerBeanByName(@PathVariable String name) {
		Boolean exist = false;

		// 將現有帳戶資料查出
		List<CustomerBean> allCustomerList = service.getAllCustomerBean();

		// 將每筆資料與目前想加入的帳號比對
		for (CustomerBean customerBean : allCustomerList) {
			String customerName = customerBean.getName();

			// 如果相同代表帳戶已存在
			if (name.equals(customerName)) {
				System.out.println("使用者：" + name + "已存在");
				exist = true;
			}
		}
		return exist;
	}

//	新增
	@RequestMapping(value = "/{customer_id}/{product_id}", method = RequestMethod.POST)
	public CustomerBean addProduct(@PathVariable("customer_id") Long customer_id, @PathVariable("product_id") Long product_id,
			@RequestBody ProductBean bean) {
		CustomerBean customer1 = service.getCustomerBeanById(customer_id);
		ProductBean product1 = PBservice.getProductBeanById(product_id);
		List<ProductBean> products = new ArrayList<ProductBean>();
		products.add(product1);
		customer1.getProducts().add(product1);
		service.saveOrUpdateCustomerBean(customer1);
		return service.saveOrUpdateCustomerBean(customer1);
	}
}

```

# productbeancontroller
```
package com.ctbcbank.demo.finallab.Controller.rest;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.ctbcbank.demo.finallab.Repository.ProductBeanRepository;
import com.ctbcbank.demo.finallab.bean.CustomerBean;
import com.ctbcbank.demo.finallab.bean.ProductBean;
import com.ctbcbank.demo.finallab.service.CustomerBeanService;
import com.ctbcbank.demo.finallab.service.ProductBeanService;
import com.ctbcbank.demo.finallab.service.ProductCategoryBeanService;

import lombok.extern.slf4j.Slf4j;

@RestController
@CrossOrigin
@Slf4j
@RequestMapping("/api/product")
public class ProductBeanController {
	@Autowired
	private ProductBeanService service;
	@Autowired
	private ProductCategoryBeanService categoryService;
	@Autowired
	private CustomerBeanService customerService;


//	取得所有
	@RequestMapping(value = "/all", method = RequestMethod.GET)
	public List<ProductBean> getAllProducts() {
		return service.getAllProductBean();
	}

//	取得指定id
	@RequestMapping(value = "/{id}", method = RequestMethod.GET)
	public ProductBean getProductBeanById(@PathVariable long id) {
		ProductBean productBean = service.getProductBeanById(id);
		return productBean;
	}

//	刪除指定id
	@RequestMapping(value = "{customer_id}/{id}", method = RequestMethod.DELETE)
	public void removeProductBean(@PathVariable long customer_id,@PathVariable long id) {
		CustomerBean customer1 = customerService.getCustomerBeanById(customer_id);
		ProductBean product1 = service.getProductBeanById(id);
		customer1.getProducts().remove(product1);
		service.saveOrUpdateProductBean(product1);
	}

//	新增
	@RequestMapping(value = "/all/{id}", method = RequestMethod.POST)
	public String createProduct(@RequestBody ProductBean bean, @PathVariable("id") Long id) {
		bean.setProductCategory(categoryService.getProductCategoryBeanById(id));
		service.saveOrUpdateProductBean(bean);
		return bean.toString();
	}

//	修改 
	@RequestMapping(value = "/{id}/{cate_id}", method = RequestMethod.PUT)
	public ProductBean modifyProduct(@PathVariable("id") Long id, @PathVariable("cate_id") Long cate_id,
			@RequestBody ProductBean bean) {
		bean.setProductCategory(categoryService.getProductCategoryBeanById(cate_id));
		bean.setId(id);
		return service.saveOrUpdateProductBean(bean);
	}

//	比對商品是否存在
	@RequestMapping(value = "{name}", method = RequestMethod.POST)
	public Boolean compareProductBeanByName(@PathVariable String name) {
		Boolean exist =false;
		
		//將現有資料查出
		List<ProductBean> allCartList = service.getAllProductBean();
		
		//將每筆資料與目前想加入的商品名稱比對
		for (ProductBean productBean : allCartList) {
			String productName = productBean.getName();
			
			//如果相同代表已存在購物車了
			if(name.equals(productName)) {
				System.out.println("商品："+name+"已存在");
				exist=true;		
			}	
		}
		return exist;
	}
	
//	刪除全部
	@RequestMapping(value = "{customer_id}/all", method = RequestMethod.DELETE)
	public void removeAllCartBean(@PathVariable long customer_id) {
		CustomerBean customer1 = customerService.getCustomerBeanById(customer_id);
		List<ProductBean> product1 = service.getAllProductBean();
		customer1.getProducts().removeAll(product1);
		customerService.saveOrUpdateCustomerBean(customer1);
	}
}


```
# productCategorybean controller
```
package com.ctbcbank.demo.finallab.Controller.rest;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.ctbcbank.demo.finallab.bean.ProductCategoryBean;
import com.ctbcbank.demo.finallab.service.ProductCategoryBeanService;

import lombok.extern.slf4j.Slf4j;

@RestController
@CrossOrigin
@Slf4j
@RequestMapping("/api/productCategory")
public class ProductCategoryBeanController {
	@Autowired
	private ProductCategoryBeanService service;

//	取得所有
	@RequestMapping(value = "/all", method = RequestMethod.GET)
	public List<ProductCategoryBean> getAllProducts() {
		return service.getAllProductCategoryBean();
	}

//	取得指定id
	@RequestMapping(value = "/{id}", method = RequestMethod.GET)
	public ProductCategoryBean getProductCategeryBeanById(@PathVariable long id) {
		ProductCategoryBean productCategoryBean = service.getProductCategoryBeanById(id);
		return productCategoryBean;
	}

//	刪除指定id
	@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
	public void removeProductCategeryBean(@PathVariable long id) {
		System.out.println("DeleteNum=>" + id);
		service.removeProductCategoryBean(id);
	}

//	新增
	@RequestMapping(value = "/all", method = RequestMethod.POST)
	public String createProductCategery(@RequestBody ProductCategoryBean bean) {
		service.saveOrUpdateProductCategoryBean(bean);
		return bean.toString();
	}	
	

//	修改 
	@RequestMapping(value = "/{id}", method = RequestMethod.PUT)
	public ProductCategoryBean modifyProductCategory(@PathVariable("id") Long id, @RequestBody ProductCategoryBean bean) {
		bean.setId(id);
		return service.updateProductCategoryBean(bean);
	}
}

```

# productbeanservicejpaimplement
```
package com.ctbcbank.demo.finallab.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import com.ctbcbank.demo.finallab.Repository.ProductBeanRepository;
import com.ctbcbank.demo.finallab.bean.ProductBean;
@Service
public class ProductBeanServiceJPAImplement implements ProductBeanService {
	@Autowired
	private ProductBeanRepository repository;
	@Override
	public List<ProductBean> getAllProductBean() {
		return repository.findAll();
	}

	@Override
	public ProductBean getProductBeanById(long id) {
		return repository.getReferenceById(id);
	}

	@Override
	public ProductBean saveOrUpdateProductBean(ProductBean bean) {
		return repository.save(bean);
	}

	@Override
	public void removeProductBean(long id) {
		repository.deleteById(id);
		
	}

	@Override
	public ProductBean updateProductBean(ProductBean bean) {
		return repository.save(bean);
	}

	public void removeAllCartBean() {
		repository.deleteAll(getAllProductBean());
	}
}
```
