Java 之 批量从mysql导入Redis

一、pom

从插入 redis 数据需要转成 JSON => 需要 jackson 的三个包!

java 操作 redis => 使用 Jedis

<dependencies>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.6</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.38</version>
    </dependency>
<!-- java 拿到 List<Object> => 转成 JSON -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.10.0</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.10.0</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.10.0</version>
    </dependency>
    <!-- redis -->
    <!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
    <dependency>
      <groupId>redis.clients</groupId>
      <artifactId>jedis</artifactId>
      <version>3.1.0</version>
    </dependency>
  </dependencies>

二、目录

三、配置

mybatis.cfg.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC
        "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <typeAliases>
        <typeAlias type="com.njbdqn.mor.entity.SalrsOrder" alias="so"></typeAlias>
    </typeAliases>
    <environments default="cm">
        <environment id="cm">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://192.168.56.111:3306/sales_source"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mapper/so.xml"></mapper>
    </mappers>
</configuration>

mapper/so.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.njbdqn.mor.dao.SalesOrderDao">
<select id="findAll" resultType="so">
SELECT order_number AS orderNumber,
customer_number AS customerNumber,
product_code AS productCode,
order_date AS orderDate,
entry_date AS entryDate,
order_amount AS orderAmount FROM sales_order
</select>
</mapper>

四、代码

实体类:

public class SalesOrder {
    private int orderNumber;
    private int customerNumber;
    private int productCode;
    private Date orderDate;
    private Date entryDate;
    private int orderAmount ;

dao 层:

public interface SalesOrderDao {
    List<SalesOrder> findAll();}

Test 层:

public static String tucketNo(int i){
        // 此方法如果 String 值特别大会出现负数
        // hadoop 默认的 hashpartitioner 中为了解决这个问题,使用与运算:(key.hashCode() & Integer.MAX_VALUE) % numReduceTasks;
        return (i+"").hashCode()%100000+"";
    }
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">void</span> main(String[] args) <span style="color: rgba(0, 0, 255, 1)">throws</span><span style="color: rgba(0, 0, 0, 1)"> Exception {
    Reader read </span>= Resources.getResourceAsReader("mybatis.cfg.xml"<span style="color: rgba(0, 0, 0, 1)">);
    SqlSessionFactory factory </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> SqlSessionFactoryBuilder().build(read);
    SqlSession session </span>=<span style="color: rgba(0, 0, 0, 1)"> factory.openSession();
    SalesOrderDao sod </span>= session.getMapper(SalesOrderDao.<span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)">);
    List</span>&lt;SalesOrder&gt; all =<span style="color: rgba(0, 0, 0, 1)"> sod.findAll();
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 转化成json,在redis默认第0个hashmap中,salesorder这个key中存所有记录</span>
    ObjectMapper om = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> ObjectMapper();
    Jedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">new</span> Jedis("192.168.56.111",6379<span style="color: rgba(0, 0, 0, 1)">);
    </span><span style="color: rgba(0, 0, 255, 1)">for</span><span style="color: rgba(0, 0, 0, 1)"> (SalesOrder so :all){ <span style="color: rgba(51, 153, 102, 1)">// 存JSON格式的String</span>
        jedis.lpush(</span>"salesorder"<span style="color: rgba(0, 0, 0, 1)">,om.writeValueAsString(so));
    }
    jedis.close();
    session.close();</span></pre></code-box>

五、验证 Redis 中数据

192.168.56.111:6379> LLEN salesorder
(integer) 100000
192.168.56.111:6379> LINDEX salesorder 100
"{\"orderNumber\":99900,\"customerNumber\":2,\"productCode\":3,\"orderDate\":1531929600000,\"entryDate\":1531929600000,\"orderAmount\":1454}"

 


__EOF__

  • 本文作者: PEAR2020
  • 本文链接: https://www.cnblogs.com/sabertobih/p/14101970.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。