校园商铺-4店铺注册功能模块-1Dao层之新增店铺

1. 系统功能开发的优先级。

项目共有3个系统,前端展示系统,店家管理系统,超级管理员管理系统。
店家的优先级是最高的,因为最有可能带来收益的是店家,而且一旦店家系统开发出来,店家往系统里填写商品信息、前端展示系统才有展示的数据源。
超级管理员系统可以用手工录入的方式来代替,优先级是最低。
分析之后,开发的优先级从高到低依次为店铺管理、前端展示、超级管理员系统。

2. 项目1.0-店家管理系统开发

店家可以通过店家管理系统来管理店铺信息

  • 店铺
  • 商品

2.1 店铺注册从底层到前端开发

学习目标:

  • 连接数据库
  • Mybatis数据库表映射关系配置
    永远不会改变的配置:driver(那种类型的数据库)、数据库的地址、用户名、密码、连接池最大的线程数
  • dao->service->controller层代码的编写,Junit的使用
  • Session,图片处理工具Thumbnailator的使用
  • suimobile前端设计与开发

2.2 创建Dao接口

package com.csj2018.o2o.dao;
import com.csj2018.o2o.entity.Shop;
public interface ShopDao {
	/**
	 * 新增店铺
	 * @param shop
	 * @return 返回影响的行数;-1插入失败
	 */
	int insertShop(Shop shop);
}

2.3 myBatis配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
 PUBLIC "-//mybatis.org/DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 <!-- useGeneratedKeys="true",一旦数据插入成功,使用JDBC的getGeneratedKeys获取数据库自增主键值 -->
<mapper namespace="com.csj2018.o2o.dao.ShopDao">
	<insert id="insertShop" useGeneratedKeys="true"
		keyColumn="shop_id" keyProperty="shopId">
		insert into
		tb_shop(ower_id,area_id,shop_category_id,shop_name,
		shop_desc,shop_addr,phone,shop_img,priority,
		create_time,last_edit_time,enable_status,advice)
		values
		(#{owner.userId}, #{area.areaId}, #{shopCategory.shopCategoryId}, #{shopName},
		#{shopDesc}, #{shopAddr}, #{phone}, #{shopImg}, #{priority},
		#{createTime}, #{lastEditTime}, #{enableStatus}, #{advice})
	</insert>
</mapper>

useGeneratedKeys="true":一旦数据添加成功,我们就会通过jdbc来获取它的主键的值,然后将它插入到传入的实体类即shop对象中。
当我们添加店铺信息的时候,同时也需要存储店铺的图片,为了保证图片存储的合理性,我们需要将属于这个店铺的图片存储在这个店铺的目录下。这就导致了每个店铺拥有的名字是不相同的。我们需要依靠店铺的主键去区分店铺、名字,因此在存储图片的时候,需要获取店铺的id,也就是说一旦店铺添加完成,就需要记录返回它的店铺id。
疑问:店铺添加完成,再去数据库查询最新的id,不是一样吗?
解析:操作也是可以的,但有隐患:1.操作麻烦 2.如果多线程操作,其他的线程进行了同样的操作,返回的id就非想操作的id,造成乱序。
如果店铺完成不会有插入图片的需求,即不需要获取店铺的shopId,将useGeneratedKeys设置为false即可。
总之,设计一个系统要考虑它的灵活性

2.4 Junit测试

Shop.java还有3个类,Area,PersonInfo,ShopCategory,Area已有数据,其他两个还是空表,因此需要添加数据

insert into tb_person_info(`name`,`profile_img`,`email`,`gender`,`enable_status`,`user_type`) 
	values ('测试','test_person_png',"test@126.com",1,1,2);
insert into tb_shop_category(`shop_category_name`,`shop_category_desc`,`shop_category_img`,`priority`)
	values('咖啡奶茶','飘香醇厚咖啡加上芳美浓郁的牛奶,两种经典饮品的绝妙搭配,两种滋味的碰撞,形成了具有双重口感享受的饮品!','test_shop_catetgory_png',1);

测试代码

package com.csj2018.o2o.dao;

import static org.junit.Assert.assertEquals;

import java.util.Date;

import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;

import com.csj2018.o2o.BaseTest;
import com.csj2018.o2o.entity.Area;
import com.csj2018.o2o.entity.PersonInfo;
import com.csj2018.o2o.entity.Shop;
import com.csj2018.o2o.entity.ShopCategory;

public class ShopDaoTest extends BaseTest{
	@Autowired
	private ShopDao shopDao;
	@Test
	public void testInsertShop() {
		Shop shop = new Shop();
		
		PersonInfo owner = new PersonInfo();
		Area area = new Area();
		ShopCategory shopCategory = new ShopCategory();
		owner.setUserId(1L);
		area.setAreaId(2);
		shopCategory.setShopCategoryId(1L);
		
		shop.setOwner(owner);
		shop.setArea(area);
		shop.setShopCategory(shopCategory);
		shop.setShopName("测试de店铺");
		shop.setShopDesc("店铺描述");
		shop.setShopAddr("测试路1号");
		shop.setPhone("123456789");
		shop.setShopImg("shopimg");
		shop.setCreateTime(new Date());                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
		shop.setEnableStatus(1);
		shop.setAdvice("审核中");
		shop.setPriority(3);
        int effectedNum = shopDao.insertShop(shop);
		assertEquals(1,effectedNum);
	}
}

3. 问题:一直执行失败,打印日志观察

日志给出的错误不明显,需要自己去捕捉异常
ShopDaoTest.java添加捕捉异常代码

		try{
			int effectedNum = shopDao.insertShop(shop);
			assertEquals(1,effectedNum);
			System.out.print(effectedNum);
		}catch (Exception e) {
			e.printStackTrace();
		}	
原来是自己的成员变量拼写错误,此处大骂自己三声猪头 Shop.java部分问题代码 ```#java private String adevice; public String getAdevice() { return advice; } public void setAdevice(String adevice) { this.advice = adevice; } ```
posted on 2019-09-24 15:25  singleSpace  阅读(363)  评论(0编辑  收藏  举报