Package net.paoding.rose.jade

Source Code of net.paoding.rose.jade.BatchUpdateTest$User

package net.paoding.rose.jade;

import java.util.LinkedList;
import java.util.List;

import javax.sql.DataSource;

import net.paoding.rose.jade.annotation.DAO;
import net.paoding.rose.jade.annotation.SQL;
import net.paoding.rose.jade.annotation.ShardBy;
import net.paoding.rose.jade.context.application.JadeFactory;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

/**
* 通过集成DAO和JadeFactory,验证 {@link DataSources}的可用
*
* @author qieqie
*
*/
public class BatchUpdateTest {

    @DAO
    interface UserDAO {

        @SQL("create table user (id int, name varchar(200));")
        void createTable();

        @SQL("create table $user (id int, name varchar(200));")
        void createTableAt(@ShardBy int hash);

        @SQL("insert into user (id, name) values(:1.id, :1.name);")
        int[] insertIntoOneTable(List<User> users);

        @SQL("insert into $user (id, name) values(:1.id, :1.name);")
        int[] insertIntoHashTables(@ShardBy("id") List<User> users);

        @SQL("select id, name from user order by id")
        List<User> findAll();

        @SQL("select id, name from $user order by id")
        List<User> findAllAt(@ShardBy int hash);

        @SQL("delete from user")
        void deleteAll();

    }

    public static class User {

        long id;

        String name;

        public long getId() {
            return id;
        }

        public void setId(long id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        @Override
        public int hashCode() {
            return (int) id;
        }

        @Override
        public boolean equals(Object obj) {
            if (!(obj instanceof User)) {
                return false;
            }
            User that = (User) obj;
            return this.id == that.id && this.name.equals(that.name);
        }

        @Override
        public String toString() {
            return "user:" + id + "(" + name + ")";
        }
    }

    @Before
    public void init() {

    }

    @Test
    public void testBatchInsertIntoHashTables() {
        UserDAO dao = getHashTables();
        //
        List<User> users0 = new LinkedList<BatchUpdateTest.User>();
        List<User> users1 = new LinkedList<BatchUpdateTest.User>();
        User user = new User();
        user.id = 1;
        user.name = "zhiliang.wang";
        users1.add(user);
        //
        user = new User();
        user.id = 2;
        user.name = "helen.wang";
        users0.add(user);
        //
        user = new User();
        user.id = 3;
        user.name = "bad boy";
        users1.add(user);
        //

        List<User> users = new LinkedList<BatchUpdateTest.User>();
        users.addAll(users0);
        users.addAll(users1);
        dao.insertIntoHashTables(users);
        //
        List<User> users0FromDB = dao.findAllAt(0);
        List<User> users1FromDB = dao.findAllAt(1);
        Assert.assertEquals(users0, users0FromDB);
        Assert.assertEquals(users1, users1FromDB);
    }

    @Test
    public void testBatchInsertIntoOneTable() {
        UserDAO dao = getOneTable();
        //
        List<User> users = new LinkedList<BatchUpdateTest.User>();
        User user = new User();
        user.id = 1;
        user.name = "zhiliang.wang";
        users.add(user);
        //
        user = new User();
        user.id = 2;
        user.name = "helen.wang";
        users.add(user);
        //
        user = new User();
        user.id = 3;
        user.name = "bad boy";
        users.add(user);
        //
        dao.insertIntoOneTable(users);
        //
        List<User> usersFromDB = dao.findAll();
        Assert.assertEquals(users, usersFromDB);
    }

    private UserDAO getOneTable() {
        DataSource dataSource = DataSources.createUniqueDataSource();
        JadeFactory factory = new JadeFactory(dataSource);
        UserDAO dao = factory.create(UserDAO.class);
        dao.createTable();
        return dao;
    }

    /**
     * 散表的一个实现
     * @return
     */
    private UserDAO getHashTables() {
        DataSource dataSource = DataSources.createUniqueDataSource();
        JadeFactory factory = new JadeFactory(dataSource);
        factory.addInterpreter(new ShardInterpreter('$', 2));// Spring下可以配置ShardInterpreter在xml中让jade自动载入
        UserDAO dao = factory.create(UserDAO.class);
        dao.createTableAt(0);
        dao.createTableAt(1);
        return dao;
    }
}
TOP

Related Classes of net.paoding.rose.jade.BatchUpdateTest$User

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.