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. sitecore系统教程之使用修补程序文件自定义Sitecore配置

    您可以使用修补程序文件在Sitecore中添加或更改配置设置.Sitecore将修补程序文件与Sitecore.config 文件合并,以创建在运行时使用的配置文件. 本主题描述: 补丁文件放置 补丁 ...

  2. 理解本真的 REST 架构风格

    1. http://kb.cnblogs.com/page/186516/ 2. http://www.infoq.com/cn/articles/rest-introduction 3. http: ...

  3. MQ的使用场景

    一.消息队列概述消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构.目前使用较多的消息队列有ActiveMQ,RabbitM ...

  4. 增强for循环遍历集合或数组

    遍历:for循环遍历数组或集合:iterator迭代器遍历集合:还有增强for循环(for each)遍历数组或集合: 遍历数组: 遍历集合:

  5. PyCharm2017破解步骤

    前段时间买了一套python的学习视频,附带一个Pycharm的安装包和注册码,现在注册码被JetBrains封杀了,不得已在网上找了一下破解的教程,在这里记录一下: 先找到破解补丁无需使用注册码,下 ...

  6. MongoDB With Spark遇到的2个错误,不能初始化和sample重复的key

    1.$sample stage could not find a non-duplicate document while using a random cursor 这个问题比较难解决,因为我用mo ...

  7. vue-i18n国际化插件

    vue-i18n国际化插件 安装,到项目目录下执行:npm install vue-i18n 配置在src\main.js里面引入vue-i18n // 语言包插件import VueI18n fro ...

  8. Google Analytics for Firebase 是一款免费的应用评估解决方案,可提供关于应用使用和用户互动情况的数据分析

    Google Analytics for Firebase Google Analytics for Firebase 是一款免费的应用评估解决方案,可提供关于应用使用和用户互动情况的数据分析.Fir ...

  9. bzoj3196 二逼平衡树

    题目链接 平衡树系列最后一题 坑啊 10s时间限制跑了9764ms...还是要学一学bit套主席树啦... 经典的线段树套treap...至于第一发为什么要TLE(我不会告诉你treap插入的时候忘了 ...

  10. Different between MB SD Connect Compact 5 and MB SD C4 Star Diagnostic Tool

    MB SD C4 Star Diagnostic Tool is the professional MB Star Diagnostic Tools for benz cars and trucks. ...