一、新增店铺:
第一步:建立DAO层接口并且实现新增店铺功能的接口
第二步:建立ShopDao的xml映射文件并且实现了相应的功能
<!--useGeneratedKeys开启了返回自增主键 的值,这样直接将表中主键值存入了相应的实体类中的属性
keyColumn指定数据表中主键的列名
keyProperty指定实体类中对应主键的属性名
-->
<insert id="insertShop" useGeneratedKeys="true" keyColumn="shop_id" keyProperty="shopId">
INSERT INTO
tb_shop(owner_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>
我们插入了一个商铺的所有信息
第三步:接下来完成测试
public class ShopDaoTest extends BaseTest {
@Autowired
private ShopDao shopDao;
@Test
public void testInsertShop(){
Shop shop=new Shop();
PersonInfo personInfo=new PersonInfo();
ShopCategory shopCategory=new ShopCategory();
Area area =new Area();
personInfo.setUserId(1L);//long型后面加L
shopCategory.setShopCategoryId(1L);
area.setAreaId(2);
shop.setOwner(personInfo);
shop.setArea(area);
shop.setShopName("测试的店铺");
shop.setShopCategory(shopCategory);
shop.setShopAddr("test");
shop.setPhone("test");
shop.setShopDesc("test");
shop.setShopImg("test");
shop.setCreateTime(new Date());
shop.setAdvice("审核中");
shop.setEnableStatus(1);
int effect =shopDao.insertShop(shop);
Assert.assertEquals(1,effect);
}
}
测试思路:
我们新建一个shop实体类,手动装配所有shop的信息,通过shopDao的接口实现类(这里用的接口因为我们用autowired装配害会,他会自己装配实现类)的插入方法插入这个shop,我们查看通过返回值(操作影响的行数)判断是否成功插入。
- 注意:我们的Shop实体类中,有3个属性
/**
* 店铺所属店主
*/
private PersonInfo owner;
/**
* 店铺所在区域
*/
private Area area;
/**
* 店铺类别
*/
private ShopCategory shopCategory;
我们在设计表关系的时候,设置了外键关系,因此务必确保 设置的这几个id在对应的表中存在.
这里我们先手工插入几条数据方便单元测试。
tb_area 做SSM集成验证的时候新增了几条数据如下:
tb_person:
tb_shop_category:
运行单元测试,运行OK。
查看数据库中对应的数据:
二、更新店铺 :
第一步:建立DAO层接口并建立相应的方法
第二步:配置相应的mapper配置文件
思路:
我们用到了动态sql语句,因为我们每次更新并不是更新每条记录,所以我们判断每个传入的属性是否为空,为空则不需要更新,不为空我们则需要更新,注意:最后一个语句不需要“,”。最后限定条件为shop_id。
第三步:测试
第一步建立相应的test类
测试代码:
public class ShopDaoTest extends BaseTest {
@Autowired
private ShopDao shopDao;
@Test
public void testUpdateShop(){
Shop shop=new Shop();
shop.setShopId(6L);
shop.setShopName("测试更新的店铺");
shop.setShopAddr("test更新");
shop.setPhone("test更新");
shop.setShopDesc("test更新");
shop.setShopImg("test更新");
shop.setLastEditTime(new Date());
shop.setAdvice("test更新审核中");
int effect =shopDao.updateShop(shop);
Assert.assertEquals(1,effect);
}
}
选中该方法,右键运行单元测试,没有错误,查看数据库中的数据变化,是否符合预期。
测试思路:
自己建立一个shop实例并且完成相应的属性赋值,通过shopDao的接口的方法返回值(操作的行数)判断是否完成修改。
这里有一个问题困扰我很久,由于建表的时候表里的数据和要插入的数据主键值不匹配,所以我要先删除表中的数据,存在外键约束问题