/**
 * Copyright (c) 2011-2014, hubin (jobob@qq.com).
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
package com.baomidou.mybatisplus.test.oracle;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import com.baomidou.mybatisplus.MybatisSessionFactoryBuilder;
import com.baomidou.mybatisplus.entity.GlobalConfiguration;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.test.oracle.entity.TestUser;
import com.baomidou.mybatisplus.test.oracle.mapper.TestUserMapper;

/**
 * <p>
 * MybatisPlus 测试类
 * </p>
 *
 * @author hubin
 * @Date 2016-04-25
 */
public class TestUserMapperTest {


    /**
     * RUN 测试（ 更多查看 MySql 测试类 ）
     */
    public static void main(String[] args) {

        //加载配置文件
        InputStream in = TestUserMapperTest.class.getClassLoader().getResourceAsStream("oracle-config.xml");

		/*
         * 此处采用 MybatisSessionFactoryBuilder 构建
		 * SqlSessionFactory，目的是引入BaseMapper功能
		 */
        MybatisSessionFactoryBuilder mf = new MybatisSessionFactoryBuilder();

        /** 设置数据库类型为 oracle */
        GlobalConfiguration gc = new GlobalConfiguration();
        gc.setDbType("oracle");
        mf.setGlobalConfig(gc);

		/*
         * 1、数据库字段驼峰命名不需要任何设置
		 * 2、当前演示是驼峰下划线混合命名
		 * 3、如下开启，表示数据库字段使用下划线命名，该设置是全局的。
		 *	 开启该设置实体可无 @TableId(value = "test_id") 字段映射
		 */
        //mf.setDbColumnUnderline(true);

        SqlSessionFactory sessionFactory = mf.build(in);
        SqlSession session = sessionFactory.openSession();
        TestUserMapper testUserMapper = session.getMapper(TestUserMapper.class);
        System.err.println(" debug run 查询执行 test_user 表数据变化！ ");
        session.delete("deleteAll");

        /**
         * 插入
         */
        int rlt = testUserMapper.insert(new TestUser("10", "abc", 18, 1));
        System.err.println("\n--------------insert-------" + rlt);
        sleep();

        /**
         * 批量插入
         */
        List<TestUser> ul = new ArrayList<>();
        ul.add(new TestUser("11", "1a", 11, 1));
        ul.add(new TestUser("12", "2a", 12, 2));
        ul.add(new TestUser("a", 1, 1));
        ul.add(new TestUser("b", 2, 2));
        ul.add(new TestUser("c", 3, 1));
        for (TestUser u : ul) {
            rlt = testUserMapper.insert(u);
        }
        System.err.println("\n--------------insertBatch-------" + rlt);
        sleep();

        /**
         * 批量更新
         */
        List<TestUser> ul1 = new ArrayList<>();
        ul1.add(new TestUser("10", "update-0a", 11, 1));
        ul1.add(new TestUser("11", "update-1a", 11, 1));
        ul1.add(new TestUser("12", "update-2a", 12, 2));
        for (TestUser u : ul1) {
            rlt = testUserMapper.updateById(u);
        }
        System.err.println("\n--------------updateBatchById-------" + rlt);
        sleep();

        System.err.println("\n------------------list 分页查询 ----查询 testType = 1 的所有数据--id--DESC--排序--------");
        Page<TestUser> page = new Page<>(1, 2);
        EntityWrapper<TestUser> ew = new EntityWrapper<>(new TestUser(1), "TEST_ID DESC");
        List<TestUser> paginList = testUserMapper.selectPage(page, ew);
        page.setRecords(paginList);
        for (int i = 0; i < page.getRecords().size(); i++) {
            print(page.getRecords().get(i));
        }
        System.err.println(" 翻页：" + page.toString());

		/* 删除测试数据  */
        rlt = session.delete("deleteAll");
        System.err.println("清空测试数据！ rlt=" + rlt);

        /**
         * 提交
         */
        session.commit();
    }


    /*
     * 打印测试信息
     */
    private static void print(TestUser user) {
        sleep();
        if (user != null) {
            System.out.println("\n user: id="
                + user.getTestId() + ", name=" + user.getName() + ", age=" + user.getAge() + ", testType="
                + user.getTestType());
        } else {
            System.out.println("\n user is null.");
        }
    }


    /*
     * 慢点打印
     */
    private static void sleep() {
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
