9.22--IP查询

1 在数据库中增加存储主机公网ip和内网ip对应关系的表

1.1 功能说明

在配置文件的monitorcenter数据库里加一个表,用这个表来存储主机的公网IP和内网IP的对应关系,实现公网IP查内网IP和内网查公网的数据库操作,定义controller实现查询、增加、修改、删除记录的rest api

1.2 数据库操作的配置文件和表中记录

路径位置:\src\main\resources\mappers\IPInfo.xml
数据库monitorcenter中的t_conversion_ip表中一共有三个字段,id(主键)、publicIp和neyworkIp,其中publicIp表示公网ip,networkIp表示内网ip。

1.3 数据库操作
功能操作IDSql语句
查询公网IP是否存在isPublicIpExistsSELECT COUNT(1) FROM t_conversion_ip where publicIp = #{publicIp};
查询内网IP是否存在isNetworkIpExistsSELECT COUNT(1) FROM t_conversion_ip where networkIp = #{networkIp};
根据内网IP查询公网IPgetPublicIpSELECT * FROM t_conversion_ip where networkIp = #{networkIp};
根据公网IP查新内网IPgetNetworkIpSELECT * FROM t_conversion_ip where publicIp = #{publicIp};
向表中增加IP记录addIpINSERT INTO t_conversion_ip (publicIp,networkIp) VALUES (#{publicIp},#{networkIp});
根据内网IP删除表中记录deleteIpDELETE FROM t_conversion_ip WHERE networkIp = #{networkIp};
根据内网IP修改公网IPupdateIpUPDATE t_conversion_ip SET publicIp = #{publicIp} WHERE networkIp = #{networkIp}

代码示例:

 <select id="isPublicIpExists" parameterType="java.lang.String" resultType="java.lang.Boolean">
        SELECT COUNT(1) FROM t_conversion_ip where publicIp = #{publicIp};
    </select>

    <select id="isNetworkIpExists" parameterType="java.lang.String" resultType="java.lang.Boolean">
        SELECT COUNT(1) FROM t_conversion_ip where networkIp = #{networkIp};
    </select>

    <select id="getPublicIp" parameterType="java.lang.String" resultType="com.mobisys.monitorcenter.videoConference.domain.IPInfo">
        SELECT * FROM t_conversion_ip where networkIp = #{networkIp};
    </select>

    <select id="getNetworkIp" parameterType="java.lang.String" resultType="com.mobisys.monitorcenter.videoConference.domain.IPInfo">
        SELECT * FROM t_conversion_ip where publicIp = #{publicIp};
    </select>

    <insert id="addIp" parameterType="com.mobisys.monitorcenter.videoConference.domain.IPInfo">
        INSERT INTO t_conversion_ip (publicIp,networkIp) VALUES (#{publicIp},#{networkIp});
    </insert>

    <delete id="deleteIp" parameterType="java.lang.String">
        DELETE FROM t_conversion_ip WHERE networkIp = #{networkIp};
    </delete>

    <update id="updateIp" parameterType="com.mobisys.monitorcenter.videoConference.domain.IPInfo">
        UPDATE t_conversion_ip SET
        publicIp = #{publicIp}
        WHERE networkIp = #{networkIp}
    </update>
1.4 IPInfo类

该类中有私有属性publicIp、networkIp和id,这三个属性的set、get函数以及带参和不带参函数。
该类作用是用于在数据库操作中将公网和内网IP属性封装在一个对象中。

1.5 VideoIpService接口

接口说明:根据上面数据库操作所编写的对应的方法。

函数说明参数说明返回值说明
boolean isPublicIpExists(String publicIp);publicIp指定公网IP存在返回1,反之为0
boolean isNetworkIpExists(String networkIp);networkIp指定内网IP灿在返回1,反之为0
IPInfo getPublicIp(String networkIp);networkIp指定内网ip查公网ip返回一个IPInfo对象,属性为查询结果
IPInfo getNetworkIp(String publicIp);publicIp指定公网ip查内网ip返回一个IPInfo对象,属性为查询结果
int addIp(IPInfo ipInfo);将IPInfo对象的属性值存入数据库中成功插入返回1,反之为0
int deleteIp(String networkIp);根据指定networkIp删除记录成功删除返回1,反之为0
int updateIp(IPInfo ipInfo);根据指定IPInfo对象更新记录成功更新返回1,反之为0
1.6VideoIpServiceImpl实现类

根据配置文件中的数据库操作id,实现对数据库的操作。
示例代码:

@Repository
public class VideoIpServiceImpl implements VideoIpService {

    @Autowired
    private MonitorCenterDBSession monitorCenterDBSession;

    @Override
    public boolean isPublicIpExists(String publicIp) {
        return monitorCenterDBSession.get(this.getClass().getPackage().getName(),
                "isPublicIpExists",publicIp);
    }

    @Override
    public boolean isNetworkIpExists(String networkIp) {
        return monitorCenterDBSession.get(this.getClass().getPackage().getName(),
                "isNetworkIpExists",networkIp);
    }

    @Override
    public IPInfo getPublicIp(String networkIp) {
        return monitorCenterDBSession.get(this.getClass().getPackage().getName(),
                "getPublicIp",networkIp);
    }

    @Override
    public IPInfo getNetworkIp(String publicIp) {
        return monitorCenterDBSession.get(this.getClass().getPackage().getName(),
                "getNetworkIp",publicIp);
    }

    @Override
    public int addIp(IPInfo ipInfo) {
        return monitorCenterDBSession.insert(this.getClass().getPackage().getName(),
                "addIp",ipInfo);
    }

    @Override
    public int deleteIp(String networkIp) {
        return monitorCenterDBSession.delete(this.getClass().getPackage().getName(),
                "deleteIp",networkIp);
    }

    @Override
    public int updateIp(IPInfo ipInfo) {
        return monitorCenterDBSession.update(this.getClass().getPackage().getName(),
                "updateIp",ipInfo);
    }
}
1.7 IPController
1.7.1 查询公网IP

注解@GetMapping获取网页上获取的内网IP,作为参数传给VideoIpService实现类中的isNetworkIpExists以校验数据库中是否有此条IP,若有则查询该内网IP对应的公网IP,并作为结果返回,没有返回“没有此项IP记录,查询失败”的失败信息。这里使用RespBeanFactory静态方法表示操作的结果。

@ApiOperation(value = "查询公网IP")
@GetMapping(value = "/api/v1/videoConference/IP/getPublicIP/{networkIP}", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public BaseRespBean getPublicIP(@PathVariable String networkIP){
        if (videoIpService.isNetworkIpExists(networkIP)){
            return RespBeanFactory.succeed(videoIpService.getPublicIp(networkIP));
        }
        return RespBeanFactory.fail("没有此项IP记录,查询失败");
    }
1.7.2 查询内网IP

查询内网IP与1.7.1查询公网IP相似。

 @ApiOperation(value = "查询内网IP")
    @GetMapping(value = "/api/v1/videoConference/IP/getNetworkIP/{publicIP}", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public BaseRespBean getNetworkIP(@PathVariable String publicIP){
        if (videoIpService.isPublicIpExists(publicIP)){
            return RespBeanFactory.succeed(videoIpService.getNetworkIp(publicIP));
        }
        return RespBeanFactory.fail("没有此项IP记录,查询失败");
    }
1.7.3 增加记录

该方法将网页上的信息包装成一个IPInfo对象传给VideoIpService实现类中的insertIP函数,然后检查数据库中是否已存在该IPInfo对象中的数据信息,若存在则返回“IP冲突”的错误信息,不存在,则将该IPInfo对象中的属性插入数据库中。

@ApiOperation(value = "增加记录")
    @PutMapping(value = "api/v1/videoConference/IP/insertIP", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public BaseRespBean insertIP(@RequestBody IPInfo ipInfo){
        if(videoIpService.isPublicIpExists(ipInfo.getPublicIp()) ||
                videoIpService.isNetworkIpExists(ipInfo.getNetworkIp())){
            return RespBeanFactory.error(BaseRespBean.CodeHolder.CODE_TENANT_NAME_ALREADY_EXIST,
                    "IP冲突");
        }
        int flag = videoIpService.addIp(ipInfo);
        if (flag == 1){
            return RespBeanFactory.succeed(null);
        }else {
            return RespBeanFactory.fail("添加IP记录失败");
        }
    }
1.7.4 更新记录

在网页上获取需要更新的IPInfo对象,先检查该对象的属性是否存在,若不存在,则返回“内网IP不存在”的错误信息,若存在,则根据内网ip更新对应公网ip,最后返回is护具库操作的结果。

@ApiOperation(value = "更新记录")
    @PostMapping(value = "api/v1/videoConference/IP/postIP", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public BaseRespBean postIP(@RequestBody IPInfo ipInfo){
        if(!videoIpService.isNetworkIpExists(ipInfo.getNetworkIp())){
            return RespBeanFactory.error(BaseRespBean.CodeHolder.CODE_TENANT_NAME_ALREADY_EXIST,
                    "内网IP不存在");
        }
        int flag = videoIpService.updateIp(ipInfo);
        if (flag == 1){
            return RespBeanFactory.succeed(null);
        }else {
            return RespBeanFactory.fail("修改IP记录失败");
        }
    }
1.7.5 删除记录

获取网页中需要删除的内网IP,首先在数据库中查询是否存在该内网ip,若存在则将内网ip对应的记录从数据库中删除,若不存在,就返回“没有此项IP记录,删除失败”的错误信息。

@ApiOperation(value = "删除记录")
    @DeleteMapping(value = "api/v1/videoConference/IP/deleteIP/{networkIp}",produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public BaseRespBean deleteIP(@PathVariable String networkIp){
        if(videoIpService.isNetworkIpExists(networkIp)){
           int flag = videoIpService.deleteIp(networkIp);
           if (flag == 1){
               return RespBeanFactory.succeed(null);
           }
        }
        return RespBeanFactory.fail("没有此项IP记录,删除失败");
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值