4种货物,如何使用一个接口实现CRUD:

package com.tansuo365.test1.service.goods;

import com.tansuo365.test1.entity.Goods;
import com.tansuo365.test1.mapper.goods.IGoodsCommonMapper; import java.util.List; /**
* 货品公用service接口
* {@link #setGoodsTypeMapper 设置货品类型}
* {@link #delete 删除单条元组}
* {@link #deleteBatchByPKs 批量删除}
* {@link #addBySelective 单条动态录入}
* {@link #insertBatchList 批量录入}
*/
public interface IGoodsCommonService { public void setGoodsTypeMapper(IGoodsCommonMapper goodsTypeMapper); public IGoodsCommonMapper getGoodsTypeMapper(); //根据主键删除
public Integer delete(Long id); //根据主键批量删除
public Integer deleteBatchByPKs(Long[] ids); //录入(动态)
public Integer addBySelective(Goods goods); //批量录入
public Integer insertBatchList(List<Goods> list); //按需获取
public List<Goods> getBySelective(Goods goods); //选择全部
public List<Goods> getAll(); //动态更新
public Integer updateBySelective(Goods goods);
}

实现

package com.tansuo365.test1.service.goods;

import com.tansuo365.test1.entity.Goods;
import com.tansuo365.test1.mapper.goods.IGoodsCommonMapper;
import com.tansuo365.test1.util.PetroleumCokeGradeUtil;
import org.springframework.stereotype.Service; import java.util.ArrayList;
import java.util.List; /**
* 货物crud公用service
*/
@Service
public class GoodsCommonService implements IGoodsCommonService{ private IGoodsCommonMapper goodsCommonMapper; @Override
public void setGoodsTypeMapper(IGoodsCommonMapper goodsTypeMapper) {
this.goodsCommonMapper = goodsTypeMapper;
} @Override
public IGoodsCommonMapper getGoodsTypeMapper() {
return goodsCommonMapper;
} @Override
public Integer delete(Long id) {
return goodsCommonMapper.deleteByPrimaryKey(id);
} @Override
public Integer deleteBatchByPKs(Long[] ids) {
return goodsCommonMapper.deleteBatchByPKArr(ids);
} @Override
public Integer addBySelective(Goods goods) {
return goodsCommonMapper.insertSelective(goods);
} @Override
public Integer insertBatchList(List<Goods> list) {
return goodsCommonMapper.insertBatch(list);
} @Override
public List<Goods> getBySelective(Goods goods) {
return goodsCommonMapper.selectGoodsSelective(goods);
} @Override
public List<Goods> getAll() {
return goodsCommonMapper.selectAll();
} @Override
public Integer updateBySelective(Goods goods) {
return goodsCommonMapper.updateByPrimaryKeySelective(goods);
}
}

Controller调用

package com.tansuo365.test1.controller.goods;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.tansuo365.test1.bean.goods.PetroleumCoke;
import com.tansuo365.test1.bean.log.LogEnum;
import com.tansuo365.test1.entity.Goods;
import com.tansuo365.test1.mapper.goods.PetroleumCokeMapper;
import com.tansuo365.test1.service.goods.IGoodsCommonService;
//import com.tansuo365.test1.service.goods.PetroleumCokeServiceImpl;
import com.tansuo365.test1.service.redis.RedisService;
import com.tansuo365.test1.util.CodeJudgerUtils;
import com.tansuo365.test1.util.PetroleumCokeGradeUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map; /**
* 石油焦Controller
*/
@RestController
@RequestMapping("/petroleumCoke")
public class PetroleumCokeController { private String instance = "石油焦"; @Autowired
private IGoodsCommonService goodsCommonService;
@Resource
private PetroleumCokeMapper petroleumCokeMapper; @Autowired
private RedisService redisService;
@Autowired
private RedisTemplate redisTemplate;
@Autowired
private CodeJudgerUtils codeJudgerUtils; /*动态获取数据*/
@RequestMapping("/selectSelective")
public Map<String, Object> selectSelective(PetroleumCoke petroleumCoke, Integer page, Integer rows) {
goodsCommonService.setGoodsTypeMapper(petroleumCokeMapper);
Map<String, Object> map = new HashMap<String, Object>();
PageHelper.startPage(page, rows);
List<Goods> list = goodsCommonService.getBySelective(petroleumCoke);
PageInfo<Goods> pageInfo = new PageInfo<Goods>(list);
map.put("rows", pageInfo.getList());
map.put("total", pageInfo.getTotal());
int code = 0;
codeJudgerUtils.whichCodeIsOK(list,code,LogEnum.SEARCH_ACTION.toString(), instance);
return map;
} /*动态插入数据*/
//插入数据时根据sulfur字段判定品级并更新品级字段grade(特有)
@RequestMapping("/insertSelective")
public Integer insertSelective(PetroleumCoke petroleumCoke) {
goodsCommonService.setGoodsTypeMapper(petroleumCokeMapper);
Goods goods = PetroleumCokeGradeUtil.setGradeBySulfur(petroleumCoke);
int code = goodsCommonService.addBySelective(goods);
codeJudgerUtils.whichCodeIsOK(null,code, LogEnum.ADD_ACTION.toString(), instance);
return code;
} /*动态更新数据*/
@RequestMapping("/updateByPrimaryKeySelective")
public Integer updateByPrimaryKeySelective(PetroleumCoke petroleumCoke) {
goodsCommonService.setGoodsTypeMapper(petroleumCokeMapper);
int code = goodsCommonService.updateBySelective(petroleumCoke);
codeJudgerUtils.whichCodeIsOK(null,code, LogEnum.UPDATE_ACTION.toString(), instance);
return code;
} /*删除数据*/
@RequestMapping("/deleteByPrimaryKey")
public Integer deleteByPrimaryKey(Long id) {
goodsCommonService.setGoodsTypeMapper(petroleumCokeMapper);
int code = goodsCommonService.delete(id);
codeJudgerUtils.whichCodeIsOK(null,code,LogEnum.DELETE_ACTION.toString(),instance);
return code;
} /*批量删除*/
@RequestMapping("/deleteBatchByPKs")
public Integer deleteBatch(@RequestParam(value = "ids[]") Long[] ids) {
goodsCommonService.setGoodsTypeMapper(petroleumCokeMapper);
int code = goodsCommonService.deleteBatchByPKs(ids);
codeJudgerUtils.whichCodeIsOK(null,code,LogEnum.DELETE_ACTION.toString(),instance);
return code;
} // @Cacheable(value = "petroleumCokes") 不能加入缓存
/*选取所有石油焦信息*/
@RequestMapping("/selectAll")
public List<Goods> selectAllPetroleumCoke() {
goodsCommonService.setGoodsTypeMapper(petroleumCokeMapper);
List<Goods> all = goodsCommonService.getAll();
int code = 0;
codeJudgerUtils.whichCodeIsOK(all,code,LogEnum.SEARCH_ACTION.toString(),instance);
return all;
}
//查询所有石油焦,加入缓存机制
// @RequestMapping("selectAll")
// public List selectAllPetroleumCoke(){
//// List<PetroleumCoke> petroleumCokes = petroleumCokeMapper.selectAllPetroleumCoke();
//// map.put("petroleumCokes",petroleumCokes);
//// return map;
//
// //字符串的序列化器 redis
// RedisSerializer redisSerializer = new StringRedisSerializer();
// redisTemplate.setKeySerializer(redisSerializer);
// List petroleumCokes = redisService.lGet("petroleumCokes", 0, -1);
// System.out.println("查询缓存数据为"+petroleumCokes);
// if (0 == petroleumCokes.size()) {
// synchronized(this){
// System.out.println("进入第一个if");
// petroleumCokes = redisService.lGet("petroleumCokes", 0, -1);
// if(0 == petroleumCokes.size()){
// System.out.println("第二个if显示了,表示缓存没有查到petroleumCokes.");
// //缓存为空,查询数据库
// petroleumCokes = petroleumCokeMapper.selectAllPetroleumCoke();
// //把数据库查询出来的数据放入redis
// redisService.lSet("petroleumCokes",petroleumCokes);
// }
// }
//
// }
// return petroleumCokes;
//
// } }

实体继承Goods接口

package com.tansuo365.test1.bean.goods;

//import cn.afterturn.easypoi.excel.annotation.Excel;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.tansuo365.test1.entity.Goods;
import com.tansuo365.test1.excel.ExcelCell;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Transient; import java.io.Serializable;
import java.util.Date; /**
* 货品石油焦
* 原使用poi的导出(@Excel),改为直接使用js前端进行导出(@ExcelCell)
* 指定的index如果不指定将按照数据库顺序给出,不影响导出
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class PetroleumCoke implements Serializable,Goods { private static final long serialVersionUID = -6077958594667413658L;
// @ExcelCell(index = 0)
private Long id;
// @Excel(name = "品级", orderNum = "0")
// @ExcelCell(index = 1)
private String grade;
// @Excel(name = "省份", orderNum = "1")
@ExcelCell(index = 0)
private String province;
// @Excel(name = "企业", orderNum = "2")
@ExcelCell(index = 1)
private String company;
// @Excel(name = "简称", orderNum = "3")
@ExcelCell(index = 2)
private String s_company;
// @Excel(name = "硫含量%", orderNum = "4")
@ExcelCell(index = 3)
private Double sulfur;
// @Excel(name = "灰分%", orderNum = "5")
@ExcelCell(index = 4)
private Double ash;
// @Excel(name = "挥发分%", orderNum = "6")
@ExcelCell(index = 5)
private Double volatile_matter;
// @Excel(name = "扣水率%", orderNum = "7")
@ExcelCell(index = 6)
private Double wdr;
// @Excel(name = "钒含量ppm", orderNum = "8")
@ExcelCell(index = 7)
private Double vanadium;
// @Excel(name = "真密度g/cm³", orderNum = "9")
@ExcelCell(index = 8)
private Double density;
// @Excel(name = "粉焦量%", orderNum = "10")
@ExcelCell(index = 9)
private Double coke_content;
// @Excel(name = "类型", orderNum = "11")
@ExcelCell(index = 10)
private String coke_type;
// @Excel(name = "今日报价", orderNum = "12")
@ExcelCell(index = 11)
private Double today_price;
// @Excel(name = "备注", orderNum = "13")
@ExcelCell(index = 12)
private String remarks; // private Boolean expand_2;
// private Boolean expand_3; @ExcelCell(index = 13)
private String reporter;
// @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
// @Excel(name = "创建时间", exportFormat = "yyyy-MM-dd HH:mm:ss", orderNum = "14")
@ExcelCell(index = 14)
private Date create_time; // @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") //时区+8
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
// @Excel(name = "更新时间", exportFormat = "yyyy-MM-dd HH:mm:ss", orderNum = "15")
// @ExcelCell(index = 14)
private Date update_time; // @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@javax.persistence.Transient
private String b_time; //起始时间 搜索用到 // @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@javax.persistence.Transient
private String e_time; //结束时间 搜索用到 }
package com.tansuo365.test1.entity;

public interface Goods {

}

ok

ps:mapper name  语句要统一对应

 <!--动态查询-->
<select id="selectGoodsSelective" parameterType="com.tansuo365.test1.bean.goods.PetroleumCoke"
resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from petroleum_coke_tbl
<where>
<if test="id != null and id !='' ">
and id = #{id}
</if>
<if test="province != null and province !='' ">
and province = #{province}
</if>
<if test="company != null and company !='' ">
and company = #{company}
</if>
<if test="s_company != null and s_company != '' ">
and s_company = #{s_company}
</if>
<if test="sulfur != null and sulfur !='' ">
and sulfur = #{sulfur}
</if>
<if test="ash != null and ash !='' ">
and ash = #{ash}
</if>
<if test="volatile_matter != null and volatile_matter !='' ">
and volatile_matter = #{volatile_matter}
</if>
<if test="wdr != null and wdr !='' ">
and wdr = #{wdr}
</if>
<if test="vanadium != null and vanadium !='' ">
and vanadium = #{vanadium}
</if>
<if test="coke_type != null and coke_type !='' ">
and coke_type = #{coke_type}
</if>
<if test="today_price != null and today_price !='' ">
and today_price = #{today_price}
</if>
<if test="remarks != null and remarks !='' ">
and remarks = #{remarks}
</if>
<if test="reporter != null and reporter !='' ">
and reporter = #{reporter}
</if>
<if test="grade !=null and grade != '' ">
and grade = #{grade}
</if>
<if test="create_time != null and create_time !='' ">
and create_time = #{create_time}
</if>
<if test="update_time != null and update_time !='' ">
and update_time = #{update_time}
</if>
<if test="density != null and density != '' ">
and density = #{density}
</if>
<if test="coke_content != null and coke_content != '' ">
and coke_content = #{coke_content}
</if>
<if test="b_time != null and b_time != '' ">
create_time &gt;= #{b_time}
</if>
<if test="e_time != null and e_time != '' ">
and create_time &lt;= #{e_time}
</if>
</where>
order by create_time DESC
</select>

[implements] - 一个接口的使用的更多相关文章

  1. 35.按要求编写Java程序: (1)编写一个接口:InterfaceA,只含有一个方法int method(int n); (2)编写一个类:ClassA来实现接口InterfaceA,实现int method(int n)接口方 法时,要求计算1到n的和; (3)编写另一个类:ClassB来实现接口InterfaceA,实现int method(int n)接口 方法时,要求计算n的阶乘(n

      35.按要求编写Java程序: (1)编写一个接口:InterfaceA,只含有一个方法int method(int n): (2)编写一个类:ClassA来实现接口InterfaceA,实现in ...

  2. Delphi 提示在Delphi的IDE中,按Ctrl+Shift+G键可以为一个接口生成一个新的GUID。

    对于Object Pascal语言来说,最近一段时间最有意义的改进就是从Delphi3开始支持接口(interface),接口定义了能够与一个对象进行交互操作的一组过程和函数.对一个接口进行定义包含两 ...

  3. 创建一个接口Shape,其中有抽象方法area,类Circle 、Rectangle实现area方法计算其面积并返回。又有Star实现Shape的area方法,其返回值是0,Star类另有一返回值boolean型方法isStar;在main方法里创建一个Vector,根据随机数的不同向其中加入Shape的不同子类对象(如是1,生成Circle对象;如是2,生成Rectangle对象;如是3,生成S

    题目补充: 创建一个接口Shape,其中有抽象方法area,类Circle .Rectangle实现area方法计算其面积并返回. 又有Star实现Shape的area方法,其返回值是0,Star类另 ...

  4. java一个接口可以继承另外一个接口吗

    一个接口可以继承多个接口. interface C extends A, B {}是可以的. 一个类可以实现多个接口: class D implements A,B,C{} 但是一个类只能继承一个类, ...

  5. java new一个接口到底要做什么

    转自:http://www.cnblogs.com/yjmyzz/p/3448330.html java中的匿名类有一个倍儿神奇的用法,见下面代码示例: 1 package contract; 2 3 ...

  6. new一个接口

    首先我们先看看接口的定义: 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口的方式,从而来继承接口的抽象方 ...

  7. spring的@primary和@qualifier注解解决一个接口多个实现的注入问题

    Spring中提供了@Primary和@Qualifier注解来解决一个接口多个实现的注入问题. @Primary注解 Spring中有提供一个@Primary注解,具体的作用是在一个接口有多个实现类 ...

  8. 【翻译】在TypeScript中,Extends和Implements一个抽象类有什么不同

    我们知道在TypeScript中一个类既可以被implement也可以被extends,有一些C#或java基础的同学可能会对此感到困惑,因为在上述两个面向对象的语言里面只有接口可以被implemen ...

  9. @Autowired 和 @Resource注解, 一个接口有多个实现类的时候Spring注入遇到的问题

    先说下我遇到的问题,有一个接口 CompensationService, 有两个实现类 MusicCompensationStrategyImpl  和  TakeDeliveryCompensati ...

随机推荐

  1. rest-framework 序列化格式Restful API设计规范

    理解RESTful架构 Restful API设计指南 理解RESTful架构 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式 ...

  2. 【Hadoop学习之十】MapReduce案例分析二-好友推荐

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 hadoop-3.1.1 最应该推荐的好友TopN,如何排名 ...

  3. linux常用命令:touch 命令

    linux的touch命令不常用,一般在使用make的时候可能会用到,用来修改文件时间戳,或者新建一个不存在的文件. 1.命令格式: touch [选项]... 文件... 2.命令参数: -a    ...

  4. HDU 3172 Virtual Friends (map+并查集)

    These days, you can do all sorts of things online. For example, you can use various websites to make ...

  5. python docopt模块详解

    python docopt模块详解 docopt 本质上是在 Python 中引入了一种针对命令行参数的形式语言,在代码的最开头使用 """ ""&q ...

  6. linux上限值网速、限值带宽

    Linux操作系统中的流量控制器TC(Traffic Control)用于Linux内核的流量控制,主要是通过在输出端口处建立一个队列来实现流量控制. Linux流量控制的基本原理如下图所示. 接收包 ...

  7. storm的trident编程模型

    storm的基本概念别人总结的, https://blog.csdn.net/pickinfo/article/details/50488226 编程模型最关键最难就是实现局部聚合的业务逻辑聚合类实现 ...

  8. 搭建ELK日志分析(亲测无毒!)截图没有附上。。凑合看。搭建出来没有问题

    ( 1 )安装 Logstash 依赖包 JDK Logstash 的运行依赖于 Java 运行环境, Logstash 1.5 以上版本不低于 java 7 推荐使用最新版本的 Java .由于我们 ...

  9. 怎样从外网访问内网Web?

    本地部署了一个Web服务端,只能在局域网内访问,怎样从外网也能访问到本地的Web服务呢?本文将介绍具体的实现步骤. 准备工作 部署并启动Web服务程序 默认部署的Web服务端口是8080. 实现步骤 ...

  10. 基于STM32F4移植W5500官方驱动库ioLibrary_Driver(转)

    源: 基于STM32F4移植W5500官方驱动库ioLibrary_Driver 参考: 基于STM32+W5500 的Ethernet和Internet移植 Upgrade W5500 Throug ...