锐英源软件
第一信赖

精通

英语

开源

擅长

开发

培训

胸怀四海 

第一信赖

当前位置:锐英源 / 开源技术 / 网站前端开发 / 人人代码生成器生成的相关文件(后端部分)学习
服务方向
人工智能数据处理
人工智能培训
kaldi数据准备
小语种语音识别
语音识别标注
语音识别系统
语音识别转文字
kaldi开发技术服务
软件开发
运动控制卡上位机
机械加工软件
软件开发培训
Java 安卓移动开发
VC++
C#软件
汇编和破解
驱动开发
联系方式
固话:0371-63888850
手机:138-0381-0136
Q Q:396806883
微信:ryysoft

人人代码生成器生成的相关文件(后端部分)学习

 

理解本文就能理解锐英源软件开发培训的特色:先学会骑车,再造轮子。用开源工具进行快速开发,有了大项目经验,再写出局部模块。


我们创建一个商品表tb_goods,表结构如下所示:

CREATE TABLE `tb_goods` (
`goods_id` bigint NOT NULL AUTO_INCREMENT,
`name` varchar(50) COMMENT '商品名',
`intro` varchar(500) COMMENT '介绍',
`price` decimal(10,2) COMMENT '价格',
`num` int COMMENT '数量',
PRIMARY KEY (`goods_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品管理';

常规开发流程下,我们需要在后端项目中增加关于该表增删改查的相关操作,但是人人代码生成器能够直接帮我们生成这些基础代码,接下来我们依次来学习一下生成的代码,看看究竟帮我们简化了哪些操作。

首先我们来看一下与我们创建的商品表相对应的商品类相关代码
@Data
@TableName("tb_goods")
public class GoodsEntity implements Serializable {
private static final long serialVersionUID = 1L;

/**
*
*/
@TableId
private Long goodsId;
/**
*
商品名
*/
private String name;
/**
*
介绍
*/
private String intro;
/**
*
价格
*/
private BigDecimal price;
/**
*
数量
*/
private Integer num;

}
我们发现实体类中主键和我们数据库中定义的主键名字是不对应的,因此需要加上@TableId注释,并且我们实体类名与我们的表名也不一样,于是也需要用@TableName去绑定。
同时我们发现这个类头添加了@Data注释,该注释可以给我们的类自动提供getter和setter、hashCode等方法。

接下来我们从持久层、服务层、应用层依次来学习,首先看持久层
@Mapper
public interface GoodsDao extends BaseMapper<GoodsEntity> {

}
按理来说,持久层应该提供一些操作数据库的基本方法,但这个持久层里什么也没有,这是怎么回事,别急,我们发现它继承了一个类,我们通过跳转来查看一下这个类
public interface BaseMapper<T> extends Mapper<T> {
int insert(T entity);

int deleteById(Serializable id);

int deleteByMap(@Param("cm") Map<String, Object> columnMap);

int delete(@Param("ew") Wrapper<T> wrapper);

int deleteBatchIds(@Param("coll") Collection<? extends Serializable> idList);

int updateById(@Param("et") T entity);

int update(@Param("et") T entity, @Param("ew") Wrapper<T> updateWrapper);

T selectById(Serializable id);

List<T> selectBatchIds(@Param("coll") Collection<? extends Serializable> idList);

List<T> selectByMap(@Param("cm") Map<String, Object> columnMap);

T selectOne(@Param("ew") Wrapper<T> queryWrapper);

Integer selectCount(@Param("ew") Wrapper<T> queryWrapper);

List<T> selectList(@Param("ew") Wrapper<T> queryWrapper);

List<Map<String, Object>> selectMaps(@Param("ew") Wrapper<T> queryWrapper);

List<Object> selectObjs(@Param("ew") Wrapper<T> queryWrapper);

<E extends IPage<T>> E selectPage(E page, @Param("ew") Wrapper<T> queryWrapper);

<E extends IPage<Map<String, Object>>> E selectMapsPage(E page, @Param("ew") Wrapper<T> queryWrapper);
}
原来这个类基本已经提供了所有操作数据库的基本方法,并且这些方法都是泛型的,我们的持久层直接继承一下就可以拿来用了。

接下来我们来看服务层,先看接口部分
public interface GoodsService extends IService<GoodsEntity> {

PageUtils queryPage(Map<String, Object> params);
}
与持久层相似,我们的应用层接口类也是直接继承了一个公用接口类,这个类基本上提供了我们需要用到的相关服务层操作方法,但不同于持久层,在服务层中我们还是要自己实现一个查询页数的方法

然后我们要在应用层实现类中实现这个方法
@Service("goodsService")
public class GoodsServiceImpl extends ServiceImpl<GoodsDao, GoodsEntity> implements GoodsService {

@Override
public PageUtils queryPage(Map<String, Object> params) {
IPage<GoodsEntity> page = this.page(
new Query<GoodsEntity>().getPage(params),
new QueryWrapper<GoodsEntity>()
);

return new PageUtils(page);
}

}

最后就是我们的应用层,直接与前端进行交互的部分
@RestController
@RequestMapping("generator/goods")
public class GoodsController {
@Autowired
private GoodsService goodsService;

/**
*
列表
*/
@RequestMapping("/list")
@RequiresPermissions("generator:goods:list")
public R list(@RequestParam Map<String, Object> params){
PageUtils page = goodsService.queryPage(params);

return R.ok().put("page", page);
}


/**
*
信息
*/
@RequestMapping("/info/{goodsId}")
@RequiresPermissions("generator:goods:info")
public R info(@PathVariable("goodsId") Long goodsId){
GoodsEntity goods = goodsService.getById(goodsId);

return R.ok().put("goods", goods);
}

/**
*
保存
*/
@RequestMapping("/save")
@RequiresPermissions("generator:goods:save")
public R save(@RequestBody GoodsEntity goods){
goodsService.save(goods);

return R.ok();
}

/**
*
修改
*/
@RequestMapping("/update")
@RequiresPermissions("generator:goods:update")
public R update(@RequestBody GoodsEntity goods){
goodsService.updateById(goods);

return R.ok();
}

/**
*
删除
*/
@RequestMapping("/delete")
@RequiresPermissions("generator:goods:delete")
public R delete(@RequestBody Long[] goodsIds){
goodsService.removeByIds(Arrays.asList(goodsIds));

return R.ok();
}

}

根据前端不同的请求信息,返回对应的相应信息
友情链接
版权所有 Copyright(c)2004-2021 锐英源软件
公司注册号:410105000449586 豫ICP备08007559号 最佳分辨率 1024*768
地址:郑州市金水区郑州大学北校区院(文化路97号院)内