一 、商品查询
编写实体类
package nju.software.domain;
import nju.software.utils.DateUtils;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
public class Product {
private String id; // 主键
private String productNum; // 编号 唯一
private String productName; // 名称
private String cityName; // 出发城市
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
private Date departureTime; // 出发时间
//与数据库的数据无关,仅仅是为了页面的展示
private String departureTimeStr;
private double productPrice; // 产品价格
private String productDesc; // 产品描述
private Integer productStatus; // 状态 0 关闭 1 开启
//与数据库的数据无关,仅仅是为了页面的展示
private String productStatusStr;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getProductNum() {
return productNum;
}
public void setProductNum(String productNum) {
this.productNum = productNum;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public String getCityName() {
return cityName;
}
public void setCityName(String cityName) {
this.cityName = cityName;
}
public Date getDepartureTime() {
return departureTime;
}
public void setDepartureTime(Date departureTime) {
this.departureTime = departureTime;
}
public String getDepartureTimeStr() {
if(departureTime != null){
departureTimeStr = DateUtils.data2String(departureTime,"yyyy-MM-dd HH:mm:ss");
}
return departureTimeStr;
}
public void setDepartureTimeStr(String departureTimeStr) {
this.departureTimeStr = departureTimeStr;
}
public double getProductPrice() {
return productPrice;
}
public void setProductPrice(double productPrice) {
this.productPrice = productPrice;
}
public String getProductDesc() {
return productDesc;
}
public void setProductDesc(String productDesc) {
this.productDesc = productDesc;
}
public Integer getProductStatus() {
return productStatus;
}
public void setProductStatus(Integer productStatus) {
this.productStatus = productStatus;
}
public String getProductStatusStr() {
if (productStatus != null){
if (productStatus == 0){
productStatusStr = "关闭";
}
if (productStatus == 1){
productStatusStr = "开启";
}
}
return productStatusStr;
}
public void setProductStatusStr(String productStatusStr) {
this.productStatusStr = productStatusStr;
}
}
持久层接口(dao)
package nju.software.dao;
import nju.software.domain.Product;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import java.util.List;
public interface IProductDao {
@Select("select * from product")
public List<Product> findAll() throws Exception;
@Insert("insert into product(id,productNum,productName,cityName,departureTime,productPrice,productDesc,productStatus) values(#{id},#{productNum},#{productName},#{cityName},#{departureTime},#{productPrice},#{productDesc},#{productStatus})")
void save(Product product);
@Select("select * from product where id = #{id}")
public Product findById(String id) throws Exception;
}
package nju.software.controller;
import nju.software.domain.Product;
import nju.software.service.IProductService;
import nju.software.utils.StringRandomUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import java.util.Date;
import java.util.List;
@Controller
@RequestMapping("/product")
public class ProductController {
@Autowired
private IProductService iProductService;
@RequestMapping("/findAll.do")
public ModelAndView findAll() throws Exception {
ModelAndView mv = new ModelAndView();
List<Product> ps = iProductService.findAll();
mv.addObject("productList",ps);
mv.setViewName("product-list1");
return mv;
}
@RequestMapping("/save.do")
public String save(Product product) throws Exception {
String id = StringRandomUtils.getUUID().toUpperCase();
product.setId(id);
iProductService.save(product);
return "redirect:findAll.do";
}
}
业务层service层
IProductService
package nju.software.service;
import nju.software.domain.Product;
import java.util.List;
public interface IProductService {
public void save(Product product) ;
public List<Product> findAll() throws Exception;
}
ProductServiceImpl
import nju.software.dao.IProductDao;
import nju.software.domain.Product;
import nju.software.service.IProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Service
@Transactional
public class ProductServiceImpl implements IProductService {
@Autowired
private IProductDao productDao;
@Override
public void save(Product product) {
productDao.save(product);
}
@Override
public List<Product> findAll() throws Exception {
return productDao.findAll();
}
}
Controller层
package nju.software.controller;
import nju.software.domain.Product;
import nju.software.service.IProductService;
import nju.software.utils.StringRandomUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import java.util.Date;
import java.util.List;
@Controller
@RequestMapping("/product")
public class ProductController {
@Autowired
private IProductService iProductService;
@RequestMapping("/save.do")
public String save(Product product) throws Exception {
String id = StringRandomUtils.getUUID().toUpperCase();
product.setId(id);
iProductService.save(product);
return "redirect:findAll.do";
}
@RequestMapping("/findAll.do")
public ModelAndView findAll() throws Exception {
ModelAndView mv = new ModelAndView();
List<Product> ps = iProductService.findAll();
mv.addObject("productList",ps);
mv.setViewName("product-list");
return mv;
}
}
注意
页面上的出发时间和状态的显示问题
- 对于状态:在JavaBean里增加了字段productStatusStr,就是为了转化,因为页面上的状态并不是数据库中的1或者0。
private String productStatusStr;
//前端页面获取值采用转化的productStatusStr字段来处理
<td class="text-center">${product.productStatusStr }</td>
在JavaBean中(${product.productStatusStr}中.后面的和getXxx的Xxx一致!!!)
public String getProductStatusStr() {
if (productStatus != null){
if (productStatus == 0){
productStatusStr = "关闭";
}
if (productStatus == 1){
productStatusStr = "开启";
}
}
return productStatusStr;
}
- 对于出发时间:在JavaBean里增加了字段getDepartureTimeStr,这里涉及到string和Date类型之间的转换。因此创建一个工具类Utils。
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateUtils {
//日期转换成字符串
public static String data2String(Date date,String pattern){
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
String format = sdf.format(date);
return format;
}
//字符串转化为日期
public static Date string2Date(String str,String pattern) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
Date date = sdf.parse(str);
return date;
}
}
在JavaBean中处理:
public String getDepartureTimeStr() {
if(departureTime != null){
departureTimeStr = DateUtils.data2String(departureTime,"yyyy-MM-dd HH:mm:ss");
}
return departureTimeStr;
}
二、商品添加
在源码中可以看到product-add页面的出发日期,input的类型是text类型但是点击输入框弹出来的是日历
这里注意一下springmvc中绑定参数类型转换
使用@DateTimeFormat(pattern = “yyyy-MM-dd HH:mm”)是前台的string转化为Date类型