日常碰见的增删改查

标题1@TOC定义一个简单异常

public class ServiceException extends RuntimeException {
private static final long serialVersionUID =
7793296502722655579L;
public ServiceException() {
super();
}
public ServiceException(String message) {
super(message);
// TODO Auto-generated constructor stub
}
public ServiceException(Throwable cause) {
super(cause);
// TODO Auto-generated constructor stub
}
}

标题 2.批量删除元素

在SysLogDao接口对应的映射文件中添加用于执行删除业务的delete元素,此元素内
部定义具体的SQL实现。
▪ 关键代码设计与实现
在SysLogMapper.xml文件添加delete元素,关键代码如下:

delete from sys_Logs
where id in

#{id}


FAQ分析:如上SQL实现可能会存在什么问题?(可靠性问题,性能问题)
从可靠性的角度分析,假如ids的值为null或长度为0时,SQL构建可能会出现语法问题
,可参考如下代码进行改进(先对ids的值进行判定):

delete from sys_logs

where id in

#{id}



where 1=2


从SQL执行性能角度分析,一般在SQL语句中不建议使用in表达式,可以参考如下代码进
行实现(重点是forearch中or运算符的应用):

delete from sys_logs




id=#{id}




where 1=2



说明:这里的choose元素也为一种选择结构,when元素相当于if,otherwise相当于
else的语法。

标题3 将主键赋值给对象属性,一对多插入

在SysRoleDao接口中定义数据持久化方法:
int insertObject(SysRole entity);
SysRoleMenuDao接口中方法定义(不存在则创建)
int insertObjects(
@Param(“roleId”)Integer roleId,
@Param(“menuIds”)Integer[] menuIds);

第一步:在SysRoleMapper.xml中添加insertObject元素,用于写入菜单信息。其中
useGeneratedKeys 表示使用insert操作的自增主键值,keyProperty表示将获取的自
增主键值赋值给参数对象的id属性,关键代码如下:

insert into sys_roles
(id,name,note,createdTime,modifiedTime,
createdUser,modifiedUser)
values
(null,#{name},#{note},now(),now(),
#{createdUser},#{modifiedUser})

第二步:在SysRoleMenuMapper中元素定义,关键代码如下:

insert into sys_role_menus
(role_id,menu_id)
values

(#{roleId},#{item})

Service接口定义及实现
▪ 业务描述与设计实现
基于控制层请求,调用数据层对象将角色以及对应的菜单信息写入到数据库中。
▪ 关键代码设计与实现
第一步:在SysRoleService接口中,添加用于保存角色对象的方法。关键代码如下

int saveObject(SysRole entity,Integer[]menuIds);
第二步:在SysRoleServiceImpl类中,实现菜单保存操作。关键代码如下:
@Override
public int saveObject(SysRole entity, Integer[] menuIds) {
//1.参数有效性校验
if(entitynull)
throw new IllegalArgumentException("保存对象不能为空
");
if(StringUtils.isEmpty(entity.getName()))
throw new IllegalArgumentException("角色名不允许为空
");
if(menuIds
null||menuIds.length==0)
throw new ServiceException(“必须为角色分配权限”);
//2.保存角色自身信息
int rows=sysRoleDao.insertObject(entity);
//3.保存角色菜单关系数据
sysRoleMenuDao.insertObjects(entity.getId(), menuIds);
//4.返回业务结果
return rows;
}

标题4 一对多,嵌套查询 06章25页

第一步:在SysRoleMapper.xml中添加findObjectById元素,关键代码如下:

select id,name,note
from sys_roles
where id=#{id}

第二步:在SysRoleMapper.xml中添加第一步中resultMap属性定义的结果映射元素
,关键代码如下:

第三步:在SysRoleMenuMapper.xml中添加第二步中collection元素内部select属 性对应的查询元素。关键代码如下: select menu_id from sys_role_menus where role_id=#{id}

标题5 一对多设计的修改 06章30页

int updateObject(SysRole entity,Integer[] menuIds)
第二步:在SysRoleServiceImpl类中,实现更新角色操作。关键代码如下:
@Override
public int updateObject(SysRole entity,Integer[] menuIds) {
//1.合法性验证
if(entitynull)
throw new IllegalArgumentException(“更新的对象不能为空”);
if(entity.getId()null)
throw new IllegalArgumentException(“id的值不能为空”);
if(StringUtils.isEmpty(entity.getName()))
throw new IllegalArgumentException(“角色名不能为空”);
if(menuIds
null||menuIds.length
0)
throw new IllegalArgumentException(“必须为角色指定一个权限”);
//2.更新数据
int rows=sysRoleDao.updateObject(entity);
if(rows==0)
throw new ServiceException(“对象可能已经不存在”);
sysRoleMenuDao.deleteObjectsByRoleId(entity.getId());
sysRoleMenuDao.insertObject(entity.getId(),menuIds);
//3.返回结果
return rows;
}

controller

@RequestMapping(“doUpdateObject”)
public JsonResult doUpdateObject(SysRole entity,
Integer[] menuIds){
sysRoleService.updateObject(entity,menuIds);
return new JsonResult(“update ok”);

标题6 一对一查询 07章10页

第四步:在映射文件中添加id为findPageObjects元素,实现分页查询。代码如下:

select *

order by createdTime desc
limit #{startIndex},#{pageSize}

第五步:定义查询结果映射元素。代码如下:



标题6 pojo相关注解 ****

package com.jt.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

import lombok.Data;
import lombok.experimental.Accessors;

@JsonIgnoreProperties(ignoreUnknown=true) //表示JSON转化时忽略未知属性
@TableName(“tb_item”)
@Data
@Accessors(chain=true)
public class Item extends BasePojo{
@TableId(type=IdType.AUTO) //主键自增
private Long id; //商品id
private String title; //商品标题
private String sellPoint; //商品卖点信息
private Long price; //商品价格 double精度问题 num *100 /100 long
private Integer num; //商品数量
private String barcode; //条形码
private String image; //商品图片信息 1.jpg,2.jpg,3.jpg
private Long cid; //表示商品的分类id
private Integer status; //1正常,2下架

//为了满足页面调用需求,添加get方法
public String[] getImages(){
	
	return image.split(",");
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值