[implements] - 一个接口的使用
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 >= #{b_time}
</if>
<if test="e_time != null and e_time != '' ">
and create_time <= #{e_time}
</if>
</where>
order by create_time DESC
</select>
[implements] - 一个接口的使用的更多相关文章
- 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 ...
- Delphi 提示在Delphi的IDE中,按Ctrl+Shift+G键可以为一个接口生成一个新的GUID。
对于Object Pascal语言来说,最近一段时间最有意义的改进就是从Delphi3开始支持接口(interface),接口定义了能够与一个对象进行交互操作的一组过程和函数.对一个接口进行定义包含两 ...
- 创建一个接口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类另 ...
- java一个接口可以继承另外一个接口吗
一个接口可以继承多个接口. interface C extends A, B {}是可以的. 一个类可以实现多个接口: class D implements A,B,C{} 但是一个类只能继承一个类, ...
- java new一个接口到底要做什么
转自:http://www.cnblogs.com/yjmyzz/p/3448330.html java中的匿名类有一个倍儿神奇的用法,见下面代码示例: 1 package contract; 2 3 ...
- new一个接口
首先我们先看看接口的定义: 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口的方式,从而来继承接口的抽象方 ...
- spring的@primary和@qualifier注解解决一个接口多个实现的注入问题
Spring中提供了@Primary和@Qualifier注解来解决一个接口多个实现的注入问题. @Primary注解 Spring中有提供一个@Primary注解,具体的作用是在一个接口有多个实现类 ...
- 【翻译】在TypeScript中,Extends和Implements一个抽象类有什么不同
我们知道在TypeScript中一个类既可以被implement也可以被extends,有一些C#或java基础的同学可能会对此感到困惑,因为在上述两个面向对象的语言里面只有接口可以被implemen ...
- @Autowired 和 @Resource注解, 一个接口有多个实现类的时候Spring注入遇到的问题
先说下我遇到的问题,有一个接口 CompensationService, 有两个实现类 MusicCompensationStrategyImpl 和 TakeDeliveryCompensati ...
随机推荐
- rest-framework 序列化格式Restful API设计规范
理解RESTful架构 Restful API设计指南 理解RESTful架构 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式 ...
- 【Hadoop学习之十】MapReduce案例分析二-好友推荐
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 hadoop-3.1.1 最应该推荐的好友TopN,如何排名 ...
- linux常用命令:touch 命令
linux的touch命令不常用,一般在使用make的时候可能会用到,用来修改文件时间戳,或者新建一个不存在的文件. 1.命令格式: touch [选项]... 文件... 2.命令参数: -a ...
- HDU 3172 Virtual Friends (map+并查集)
These days, you can do all sorts of things online. For example, you can use various websites to make ...
- python docopt模块详解
python docopt模块详解 docopt 本质上是在 Python 中引入了一种针对命令行参数的形式语言,在代码的最开头使用 """ ""&q ...
- linux上限值网速、限值带宽
Linux操作系统中的流量控制器TC(Traffic Control)用于Linux内核的流量控制,主要是通过在输出端口处建立一个队列来实现流量控制. Linux流量控制的基本原理如下图所示. 接收包 ...
- storm的trident编程模型
storm的基本概念别人总结的, https://blog.csdn.net/pickinfo/article/details/50488226 编程模型最关键最难就是实现局部聚合的业务逻辑聚合类实现 ...
- 搭建ELK日志分析(亲测无毒!)截图没有附上。。凑合看。搭建出来没有问题
( 1 )安装 Logstash 依赖包 JDK Logstash 的运行依赖于 Java 运行环境, Logstash 1.5 以上版本不低于 java 7 推荐使用最新版本的 Java .由于我们 ...
- 怎样从外网访问内网Web?
本地部署了一个Web服务端,只能在局域网内访问,怎样从外网也能访问到本地的Web服务呢?本文将介绍具体的实现步骤. 准备工作 部署并启动Web服务程序 默认部署的Web服务端口是8080. 实现步骤 ...
- 基于STM32F4移植W5500官方驱动库ioLibrary_Driver(转)
源: 基于STM32F4移植W5500官方驱动库ioLibrary_Driver 参考: 基于STM32+W5500 的Ethernet和Internet移植 Upgrade W5500 Throug ...