jdbc封装工具类代码_SpringBoot实战:整合Redis、mybatis,封装RedisUtils工具类等(附源码)...

1435dbc5eac58f1a192449f55e924679.png

# 创建SpringBoot项目

在线创建方式

网址:https://start.spring.io/

73979d13b1cb21c660a81d76405b69ad.png

然后创建Controller、Mapper、Service包

8a36627146a1dcba89add6c385d73f24.png

# SpringBoot整合Redis

引入Redis依赖

                            org.springframework.boot            spring-boot-starter-data-redis        

完整pom.xml

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0modelVersion>    <parent>        <groupId>org.springframework.bootgroupId>        <artifactId>spring-boot-starter-parentartifactId>        <version>2.3.3.RELEASEversion>        <relativePath/>     parent>    <groupId>com.cybgroupId>    <artifactId>chenyb-mobile-redisartifactId>    <version>0.0.1-SNAPSHOTversion>    <name>chenyb-mobile-redisname>    <description>Demo project for Spring Bootdescription>    <properties>        <java.version>1.8java.version>    properties>    <dependencies>        <dependency>            <groupId>org.springframework.bootgroupId>            <artifactId>spring-boot-starter-webartifactId>        dependency>        <dependency>            <groupId>org.springframework.bootgroupId>            <artifactId>spring-boot-starter-testartifactId>            <scope>testscope>            <exclusions>                <exclusion>                    <groupId>org.junit.vintagegroupId>                    <artifactId>junit-vintage-engineartifactId>                exclusion>            exclusions>        dependency>        <dependency>            <groupId>io.projectreactorgroupId>            <artifactId>reactor-testartifactId>            <scope>testscope>        dependency>                <dependency>            <groupId>org.springframework.bootgroupId>            <artifactId>spring-boot-starter-data-redisartifactId>        dependency>    dependencies>    <build>        <plugins>            <plugin>                <groupId>org.springframework.bootgroupId>                <artifactId>spring-boot-maven-pluginartifactId>            plugin>        plugins>    build>project>

设置Redis的Template

1cad851f02a9058b6064c4012188d882.png

RedisConfig.java

package com.cyb.mobile.config;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.redis.connection.RedisConnectionFactory;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.serializer.RedisSerializer;import org.springframework.data.redis.serializer.StringRedisSerializer;/** * @ClassName:RedisConfig * @Description:Redis配置类 * @Author:chenyb * @Date:2020/8/16 11:48 下午 * @Versiion:1.0 */@Configuration //当前类为配置类public class RedisConfig {    @Bean //redisTemplate注入到Spring容器    public RedisTemplate redisTemplate(RedisConnectionFactory factory){        RedisTemplate redisTemplate=new RedisTemplate<>();        RedisSerializer redisSerializer = new StringRedisSerializer();        redisTemplate.setConnectionFactory(factory);        //key序列化        redisTemplate.setKeySerializer(redisSerializer);        //value序列化        redisTemplate.setValueSerializer(redisSerializer);        //value hashmap序列化        redisTemplate.setHashKeySerializer(redisSerializer);        //key hashmap序列化        redisTemplate.setHashValueSerializer(redisSerializer);        return redisTemplate;    }}

设置Redis连接信息

bc49c00e8504308c3405a108124d6bd4.png

# 连接的那个数据库spring.redis.database=0# redis服务的ip地址spring.redis.host=192.168.199.142# redis端口号spring.redis.port=6379# redis的密码,没设置过密码,可为空spring.redis.password=12345678

Redis工具类

redisTemplate API

  • opsForValue ==》String

  • opsForSet ==》Set

  • opsForHash ==》hash

  • opsForZset ==》SortSet

  • opsForList ==》list队列

RedisUtils.java

cc17bdcc4862da91498521c47e08d00d.png

package com.cyb.mobile.utils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.redis.core.*;import org.springframework.stereotype.Service;import java.io.Serializable;import java.util.List;import java.util.Set;import java.util.concurrent.TimeUnit;/** * @ClassName:RedisUtils * @Description:Redis工具类 * @Author:chenyb * @Date:2020/8/17 12:05 上午 * @Versiion:1.0 */@Servicepublic class RedisUtils {    @Autowired    private RedisTemplate redisTemplate;    private static double size = Math.pow(2, 32);    /**     * 写入缓存     *     * @param key     * @param offset   位 8Bit=1Byte     * @return     */    public boolean setBit(String key, long offset, boolean isShow) {        boolean result = false;        try {            ValueOperationsObject> operations = redisTemplate.opsForValue();            operations.setBit(key, offset, isShow);            result = true;        } catch (Exception e) {            e.printStackTrace();        }        return result;    }    /**     * 写入缓存     *     * @param key     * @param offset     * @return     */    public boolean getBit(String key, long offset) {        boolean result = false;        try {            ValueOperationsObject> operations = redisTemplate.opsForValue();            result = operations.getBit(key, offset);        } catch (Exception e) {            e.printStackTrace();        }        return result;    }    /**     * 写入缓存     *     * @param key     * @param value     * @return     */    public boolean set(final String key, Object value) {        boolean result = false;        try {            ValueOperationsObject> operations = redisTemplate.opsForValue();            operations.set(key, value);            result = true;        } catch (Exception e) {            e.printStackTrace();        }        return result;    }    /**     * 写入缓存设置时效时间     *     * @param key     * @param value     * @return     */    public boolean set(final String key, Object value, Long expireTime) {        boolean result = false;        try {            ValueOperationsObject> operations = redisTemplate.opsForValue();            operations.set(key, value);            redisTemplate.expire(key, expireTime, TimeUnit.SECONDS);            result = true;        } catch (Exception e) {            e.printStackTrace();        }        return result;    }    /**     * 批量删除对应的value     *     * @param keys     */    public void remove(final String... keys) {        for (String key : keys) {            remove(key);        }    }    /**     * 删除对应的value     *     * @param key     */    public void remove(final String key) {        if (exists(key)) {            redisTemplate.delete(key);        }    }    /**     * 判断缓存中是否有对应的value     *     * @param key     * @return     */    public boolean exists(final String key) {        return redisTemplate.hasKey(key);    }    /**     * 读取缓存     *     * @param key     * @return     */    public Object get(final String key) {        Object result = null;        ValueOperationsObject> operations = redisTemplate.opsForValue();        result = operations.get(key);        return result;    }    /**     * 哈希 添加     *     * @param key     * @param hashKey     * @param value     */    public void hmSet(String key, Object hashKey, Object value) {        HashOperations<String, Object, Object> hash = redisTemplate.opsForHash();        hash.put(key, hashKey, value);    }    /**     * 哈希获取数据     *     * @param key     * @param hashKey     * @return     */    public Object hmGet(String key, Object hashKey) {        HashOperations<String, Object, Object> hash = redisTemplate.opsForHash();        return hash.get(key, hashKey);    }    /**     * 列表添加     *     * @param k     * @param v     */    public void lPush(String k, Object v) {        ListOperations<String, Object> list = redisTemplate.opsForList();        list.rightPush(k, v);    }    /**     * 列表获取     *     * @param k     * @param l     * @param l1     * @return     */    public List<Object> lRange(String k, long l, long l1) {        ListOperations<String, Object> list = redisTemplate.opsForList();        return list.range(k, l, l1);    }    /**     * 集合添加     *     * @param key     * @param value     */    public void add(String key, Object value) {        SetOperations<String, Object> set = redisTemplate.opsForSet();        set.add(key, value);    }    /**     * 集合获取     *     * @param key     * @return     */    public Set<Object> setMembers(String key) {        SetOperations<String, Object> set = redisTemplate.opsForSet();        return set.members(key);    }    /**     * 有序集合添加     *     * @param key     * @param value     * @param scoure     */    public void zAdd(String key, Object value, double scoure) {        ZSetOperations<String, Object> zset = redisTemplate.opsForZSet();        zset.add(key, value, scoure);    }    /**     * 有序集合获取     *     * @param key     * @param scoure     * @param scoure1     * @return     */    public Set<Object> rangeByScore(String key, double scoure, double scoure1) {        ZSetOperations<String, Object> zset = redisTemplate.opsForZSet();        redisTemplate.opsForValue();        return zset.rangeByScore(key, scoure, scoure1);    }    //第一次加载的时候将数据加载到redis中    public void saveDataToRedis(String name) {        double index = Math.abs(name.hashCode() % size);        long indexLong = new Double(index).longValue();        boolean availableUsers = setBit("availableUsers", indexLong, true);    }    //第一次加载的时候将数据加载到redis中    public boolean getDataToRedis(String name) {        double index = Math.abs(name.hashCode() % size);        long indexLong = new Double(index).longValue();        return getBit("availableUsers", indexLong);    }    /**     * 有序集合获取排名     *     * @param key 集合名称     * @param value 值     */    public Long zRank(String key, Object value) {        ZSetOperations<String, Object> zset = redisTemplate.opsForZSet();        return zset.rank(key,value);    }    /**     * 有序集合获取排名     *     * @param key     */    public SetObject>> zRankWithScore(        ZSetOperations<String, Object> zset = redisTemplate.opsForZSet();        SetObject>> ret = zset.rangeWithScores(key,start,end);        return ret;    }    /**     * 有序集合添加     *     * @param key     * @param value     */    public Double zSetScore(String key, Object value) {        ZSetOperations<String, Object> zset = redisTemplate.opsForZSet();        return zset.score(key,value);    }    /**     * 有序集合添加分数     *     * @param key     * @param value     * @param scoure     */    public void incrementScore(String key, Object value, double scoure) {        ZSetOperations<String, Object> zset = redisTemplate.opsForZSet();        zset.incrementScore(key, value, scoure);    }    /**     * 有序集合获取排名     *     * @param key     */    public SetObject>> reverseZRankWithScore(        ZSetOperations<String, Object> zset = redisTemplate.opsForZSet();        SetObject>> ret = zset.reverseRangeByScoreWithScores(key,start,end);        return ret;    }    /**     * 有序集合获取排名     *     * @param key     */    public SetObject>> reverseZRankWithRank(        ZSetOperations<String, Object> zset = redisTemplate.opsForZSet();        SetObject>> ret = zset.reverseRangeWithScores(key, start, end);        return ret;    }}

控制层

cba1c0df40e13b001ea1bc6bfe59e5fa.png

RedisController.java

package com.cyb.mobile.controller;import com.cyb.mobile.utils.RedisUtils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;/** * @ClassName:TestController * @Description:Redis控制器 * @Author:chenyb * @Date:2020/8/17 12:07 上午 * @Versiion:1.0 */@RestControllerpublic class RedisController {    @Autowired    private RedisUtils redisUtils;    @RequestMapping("setAndGet")    public String test(String k,String v){        redisUtils.set(k,v);        return (String) redisUtils.get(k);    }}

# SpringBoot整合Mybatis

添加依赖

                            org.mybatis.spring.boot            mybatis-spring-boot-starter            2.1.3                                    mysql            mysql-connector-java                                    com.alibaba            druid            1.1.23        

完整pom.xml

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0modelVersion>    <parent>        <groupId>org.springframework.bootgroupId>        <artifactId>spring-boot-starter-parentartifactId>        <version>2.3.3.RELEASEversion>        <relativePath/>     parent>    <groupId>com.cybgroupId>    <artifactId>chenyb-mobile-redisartifactId>    <version>0.0.1-SNAPSHOTversion>    <name>chenyb-mobile-redisname>    <description>Demo project for Spring Bootdescription>        <properties>        <java.version>1.8java.version>    properties>    <dependencies>        <dependency>            <groupId>org.springframework.bootgroupId>            <artifactId>spring-boot-starter-webartifactId>        dependency>        <dependency>            <groupId>org.springframework.bootgroupId>            <artifactId>spring-boot-starter-testartifactId>            <scope>testscope>            <exclusions>                <exclusion>                    <groupId>org.junit.vintagegroupId>                    <artifactId>junit-vintage-engineartifactId>                exclusion>            exclusions>        dependency>        <dependency>            <groupId>io.projectreactorgroupId>            <artifactId>reactor-testartifactId>            <scope>testscope>        dependency>                <dependency>            <groupId>org.springframework.bootgroupId>            <artifactId>spring-boot-starter-data-redisartifactId>        dependency>                <dependency>            <groupId>org.mybatis.spring.bootgroupId>            <artifactId>mybatis-spring-boot-starterartifactId>            <version>2.1.3version>        dependency>                <dependency>            <groupId>mysqlgroupId>            <artifactId>mysql-connector-javaartifactId>        dependency>                <dependency>            <groupId>com.alibabagroupId>            <artifactId>druidartifactId>            <version>1.1.23version>        dependency>    dependencies>    <build>        <plugins>            <plugin>                <groupId>org.springframework.bootgroupId>                <artifactId>spring-boot-maven-pluginartifactId>            plugin>        plugins>    build>project>

设置配置文件

application.properties

# 连接的那个数据库spring.redis.database=0# redis服务的ip地址spring.redis.host=192.168.199.142# redis端口号spring.redis.port=6379# redis的密码,没设置过密码,可为空spring.redis.password=12345678# 端口号server.port=8081# ========================数据库相关配置=====================spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driverspring.datasource.url=jdbc:mysql://localhost:3306/nba?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghaispring.datasource.username=rootspring.datasource.password=root# 使用阿里巴巴druid数据源,默认使用自带spring.datasource.type=com.alibaba.druid.pool.DruidDataSource#开启控制台打印sqlmybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl# mybatis 下划线转驼峰配置,两者都可以# mybatis.configuration.mapUnderscoreToCamelCase=truemybatis.configuration.map-underscore-to-camel-case=true# 配置扫描mybatis.mapper-locations=classpath:mapper/*.xml# 实体类所在的包别名mybatis.type-aliases-package=com.cyb.mobile.domain

启动类上添加扫描路径

6a9e70a48eb35ad3480bd61d97710b55.png

NbaPlayer.java(实体类)

7e77eee38ebe5ad94881f32c49d184e5.png

NbaPlayerMapper.xml

358a542f3c37765005f321754cdcb074.png

<?xml version="1.0" encoding="UTF-8" ?>/span>        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">            SELECT * FROM nba_player    

NbaPlayerMapper.java

8c8440db640026b6b75564cafe5df17c.png

NbaPlayerService.java

1da524b3fd03bf58f513f7db651c86ff.png

NbaPlayerServiceImpl.java

744ee57fca2e5a2779d0d00b8157f179.png

控制器(Controller)

9e8d4d4824a46461b35f66410d6f1bb2.png

测试

1672329f58cc783645db3c26ddcce6b7.png

# redis作为mybatis缓存

用户第一次访问的时候获取数据库的值,再次访问时直接从缓存中获取数据

设置缓存过期时间

代码演示

添加FastJSON依赖

                <dependency>            <groupId>com.alibabagroupId>            <artifactId>fastjsonartifactId>            <version>1.2.73version>        dependency>
    @RequestMapping("test")    public Object test(){        //step1 先从redis中取        String strJson=(String) redisUtils.get("nbaPlayerCache");        if (strJson==null){            System.out.println("从db取值");            // step2如果拿不到则从DB取值           List listNbaPlayer=nbaPlayerService.ListNbaPlayer();           // step3 DB非空情况刷新redis值           if (listNbaPlayer!=null){               redisUtils.set("nbaPlayerCache", JSON.toJSONString(listNbaPlayer));               return listNbaPlayer;           }           return null;        }else        {            System.out.println("从redis缓存取值");            return JSONObject.parseArray(strJson,NbaPlayer.class);        }    }

注意

项目8080是对外端口(向外部暴露的端口),区别于内部进程号,查内部端口用ps -ef|grep port,查外部端口用lsof -i:port

904db4aad005cc110d8c971e102c3cf3.png

# 压测工具

上面我们已经SpringBoot整合Redis和Mybatis,但是无法知道具体QPS多少,此时我们可以使用压测工具来测压,比如ab

# 资料下载

SpringBoot整合Redis、Mybatis下载#

链接: https://pan.baidu.com/s/198yGCWEG_vtJK6Q5DYIAnw 提取码: 65e7

作者:陈彦斌

出处:https://www.cnblogs.com/chenyanbin/

 往期推荐 

?

  • 12个非常适合做外包项目的开源后台管理系统
  • Google这是要“放弃”Java了!
  • 审阅“史上”最烂的代码

ceff2c757b7b7149bfac8b3583227a6d.png

3e37118c586c57f9d6c0fa0e5a159504.gif 

点击 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值