Example usage for org.apache.ibatis.session SqlSession getMapper

List of usage examples for org.apache.ibatis.session SqlSession getMapper

Introduction

In this page you can find the example usage for org.apache.ibatis.session SqlSession getMapper.

Prototype

<T> T getMapper(Class<T> type);

Source Link

Document

Retrieves a mapper.

Usage

From source file:com.itfsw.mybatis.generator.plugins.LogicalDeletePluginTest.java

License:Apache License

/**
 *  logicalDeleteByExample/*from   w  ww.  j a  v a 2  s  . c o  m*/
 */
@Test
public void testLogicalDeleteByExample() throws Exception {
    MyBatisGeneratorTool tool = MyBatisGeneratorTool
            .create("scripts/LogicalDeletePlugin/mybatis-generator.xml");
    tool.generate(new AbstractShellCallback() {
        @Override
        public void reloadProject(SqlSession sqlSession, ClassLoader loader, String packagz) throws Exception {
            ObjectUtil tbMapper = new ObjectUtil(sqlSession.getMapper(loader.loadClass(packagz + ".TbMapper")));

            ObjectUtil tbExample = new ObjectUtil(loader, packagz + ".TbExample");
            ObjectUtil criteria = new ObjectUtil(tbExample.invoke("createCriteria"));
            criteria.invoke("andIdEqualTo", 1l);

            // ?sql
            String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "logicalDeleteByExample",
                    tbExample.getObject());
            Assert.assertEquals(sql, "update tb set del_flag = 1 WHERE ( id = '1' )");
            // ?
            Object result = tbMapper.invoke("logicalDeleteByExample", tbExample.getObject());
            Assert.assertEquals(result, 1);
            ResultSet rs = DBHelper.execute(sqlSession.getConnection(), "select del_flag from tb where id = 1");
            rs.first();
            Assert.assertEquals(rs.getInt("del_flag"), 1);
        }
    });
}

From source file:com.itfsw.mybatis.generator.plugins.LogicalDeletePluginTest.java

License:Apache License

/**
 *  logicalDeleteByPrimaryKey/*w w  w  .java  2  s .com*/
 */
@Test
public void testLogicalDeleteByPrimaryKey() throws Exception {
    MyBatisGeneratorTool tool = MyBatisGeneratorTool
            .create("scripts/LogicalDeletePlugin/mybatis-generator.xml");
    tool.generate(new AbstractShellCallback() {
        @Override
        public void reloadProject(SqlSession sqlSession, ClassLoader loader, String packagz) throws Exception {
            ObjectUtil tbMapper = new ObjectUtil(sqlSession.getMapper(loader.loadClass(packagz + ".TbMapper")));

            // ?sql
            String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "logicalDeleteByPrimaryKey", 2l);
            Assert.assertEquals(sql, "update tb set del_flag = 1 where id = 2");
            // ?
            Object result = tbMapper.invoke("logicalDeleteByPrimaryKey", 2l);
            Assert.assertEquals(result, 1);
            ResultSet rs = DBHelper.execute(sqlSession.getConnection(), "select del_flag from tb where id = 2");
            rs.first();
            Assert.assertEquals(rs.getInt("del_flag"), 1);
        }
    });
}

From source file:com.itfsw.mybatis.generator.plugins.LogicalDeletePluginTest.java

License:Apache License

/**
 * ???/*from  w  w  w .  java2s.  c o m*/
 */
@Test
public void testOtherMethods() throws Exception {
    MyBatisGeneratorTool tool = MyBatisGeneratorTool
            .create("scripts/LogicalDeletePlugin/mybatis-generator.xml");
    tool.generate(new AbstractShellCallback() {
        @Override
        public void reloadProject(SqlSession sqlSession, ClassLoader loader, String packagz) throws Exception {
            ObjectUtil tbMapper = new ObjectUtil(sqlSession.getMapper(loader.loadClass(packagz + ".TbMapper")));

            ObjectUtil tbExample = new ObjectUtil(loader, packagz + ".TbExample");
            ObjectUtil criteria = new ObjectUtil(tbExample.invoke("createCriteria"));
            criteria.invoke("andDeleted", true);
            criteria.invoke("andIdEqualTo", 3l);

            // ?sql
            String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "selectByExample",
                    tbExample.getObject());
            Assert.assertEquals(sql,
                    "select id, del_flag, and_logical_deleted, ts_1, ts_3, ts_4 from tb WHERE ( del_flag = '1' and id = '3' )");
            // ?
            Object result = tbMapper.invoke("selectByExample", tbExample.getObject());
            Assert.assertEquals(((List) result).size(), 1);
        }
    });
}

From source file:com.itfsw.mybatis.generator.plugins.LogicalDeletePluginTest.java

License:Apache License

/**
 * ?//from   ww  w . j  a v a  2  s  .c o m
 */
@Test
public void testCustomConst() throws Exception {
    MyBatisGeneratorTool tool = MyBatisGeneratorTool
            .create("scripts/LogicalDeletePlugin/mybatis-generator-with-customConstName.xml");
    tool.generate(new AbstractShellCallback() {
        @Override
        public void reloadProject(SqlSession sqlSession, ClassLoader loader, String packagz) throws Exception {
            ObjectUtil tbMapper = new ObjectUtil(sqlSession.getMapper(loader.loadClass(packagz + ".TbMapper")));
            ObjectUtil Tb = new ObjectUtil(loader, packagz + ".Tb");

            ObjectUtil tbExample = new ObjectUtil(loader, packagz + ".TbExample");
            ObjectUtil criteria = new ObjectUtil(tbExample.invoke("createCriteria"));
            criteria.invoke("andDelFlagEqualTo", Tb.get("UN_DEL"));
            criteria.invoke("andIdEqualTo", 3l);

            // ?sql
            String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "selectByExample",
                    tbExample.getObject());
            Assert.assertEquals(sql,
                    "select id, del_flag, and_logical_deleted, ts_1, ts_3, ts_4 from tb WHERE ( del_flag = '0' and id = '3' )");
            // ?
            Object result = tbMapper.invoke("selectByExample", tbExample.getObject());
            Assert.assertEquals(((List) result).size(), 0);
        }
    });
}

From source file:com.itfsw.mybatis.generator.plugins.LogicalDeletePluginTest.java

License:Apache License

/**
 *  selectByPrimaryKeyWithLogicalDelete//from   w w w . j  a  v a 2 s  .c  o m
 */
@Test
public void testSelectByPrimaryKeyWithLogicalDelete() throws Exception {
    MyBatisGeneratorTool tool = MyBatisGeneratorTool
            .create("scripts/LogicalDeletePlugin/mybatis-generator-with-customConstName.xml");
    tool.generate(new AbstractShellCallback() {
        @Override
        public void reloadProject(SqlSession sqlSession, ClassLoader loader, String packagz) throws Exception {
            ObjectUtil tbMapper = new ObjectUtil(sqlSession.getMapper(loader.loadClass(packagz + ".TbMapper")));

            // ?sql
            String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(),
                    "selectByPrimaryKeyWithLogicalDelete", 5l, true);
            Assert.assertEquals(sql,
                    "select id, del_flag, and_logical_deleted, ts_1, ts_3, ts_4 , ts_2 from tb where id = 5 and del_flag = '1'");
            // ?
            Object result = tbMapper.invoke("selectByPrimaryKeyWithLogicalDelete", 5l, true);
            Assert.assertNull(result);

            // ?
            result = tbMapper.invoke("selectByPrimaryKeyWithLogicalDelete", 5l, false);
            Assert.assertNotNull(result);
        }
    });
}

From source file:com.itfsw.mybatis.generator.plugins.OptimisticLockerPluginTest.java

License:Apache License

/**
 *  deleteWithVersionByExample//from   w  w w  .  j a v a2s .  c o m
 */
@Test
public void testDeleteWithVersionByExample() throws Exception {
    MyBatisGeneratorTool tool = MyBatisGeneratorTool
            .create("scripts/OptimisticLockerPlugin/mybatis-generator.xml");
    tool.generate(new IBeforeCallback() {
        @Override
        public void run() throws Exception {
            DBHelper.resetDB("scripts/OptimisticLockerPlugin/init.sql");
        }
    }, new AbstractShellCallback() {
        @Override
        public void reloadProject(SqlSession sqlSession, ClassLoader loader, String packagz) throws Exception {
            ObjectUtil tbMapper = new ObjectUtil(sqlSession.getMapper(loader.loadClass(packagz + ".TbMapper")));

            ObjectUtil tbExample = new ObjectUtil(loader, packagz + ".TbExample");
            ObjectUtil criteria = new ObjectUtil(tbExample.invoke("createCriteria"));
            criteria.invoke("andIdEqualTo", 1l);

            // sql
            String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "deleteWithVersionByExample", 100L,
                    tbExample.getObject());
            Assert.assertEquals(sql, "delete from tb WHERE inc_f1 = 100 and ( ( id = '1' ) )");

            // ?100??
            Object result = tbMapper.invoke("deleteWithVersionByExample", 100L, tbExample.getObject());
            Assert.assertEquals(result, 0);

            // id = 1 ?0
            result = tbMapper.invoke("deleteWithVersionByExample", 0L, tbExample.getObject());
            Assert.assertEquals(result, 1);

            // ?
            ResultSet rs = DBHelper.execute(sqlSession.getConnection(), "select * from tb where id = 1");
            Assert.assertEquals(rs.first(), false);
        }
    });
}

From source file:com.itfsw.mybatis.generator.plugins.OptimisticLockerPluginTest.java

License:Apache License

/**
 *  deleteWithVersionByPrimaryKey/*from   w ww.j  a v  a  2s.  c  o m*/
 */
@Test
public void testDeleteWithVersionByPrimaryKey() throws Exception {
    MyBatisGeneratorTool tool = MyBatisGeneratorTool
            .create("scripts/OptimisticLockerPlugin/mybatis-generator.xml");

    // ???key@Param("key")
    tool.generate(new IBeforeCallback() {
        @Override
        public void run() throws Exception {
            DBHelper.resetDB("scripts/OptimisticLockerPlugin/init.sql");
        }
    }, new AbstractShellCallback() {
        @Override
        public void reloadProject(SqlSession sqlSession, ClassLoader loader, String packagz) throws Exception {
            ObjectUtil tbMapper = new ObjectUtil(sqlSession.getMapper(loader.loadClass(packagz + ".TbMapper")));

            // sql
            String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "deleteWithVersionByPrimaryKey",
                    100L, 1L);
            Assert.assertEquals(sql, "delete from tb where inc_f1 = 100 and id = 1");

            // ?100??
            Object result = tbMapper.invoke("deleteWithVersionByPrimaryKey", 100L, 1L);
            Assert.assertEquals(result, 0);

            // id = 1 ?0
            result = tbMapper.invoke("deleteWithVersionByPrimaryKey", 0L, 1L);
            Assert.assertEquals(result, 1);

            // ?
            ResultSet rs = DBHelper.execute(sqlSession.getConnection(), "select * from tb where id = 1");
            Assert.assertEquals(rs.first(), false);
        }
    });

    // ?key@Param("record")
    tool.generate(new IBeforeCallback() {
        @Override
        public void run() throws Exception {
            DBHelper.resetDB("scripts/OptimisticLockerPlugin/init.sql");
        }
    }, new AbstractShellCallback() {
        @Override
        public void reloadProject(SqlSession sqlSession, ClassLoader loader, String packagz) throws Exception {
            ObjectUtil tbKeysMapper = new ObjectUtil(
                    sqlSession.getMapper(loader.loadClass(packagz + ".TbKeysMapper")));

            ObjectUtil tbKeysKey = new ObjectUtil(loader, packagz + ".TbKeysKey");
            tbKeysKey.set("key1", 1L);
            tbKeysKey.set("key2", "k1");

            // sql
            String sql = SqlHelper.getFormatMapperSql(tbKeysMapper.getObject(), "deleteWithVersionByPrimaryKey",
                    100L, tbKeysKey.getObject());
            Assert.assertEquals(sql, "delete from tb_keys where inc_f1 = 100 and key1 = 1 and key2 = 'k1'");

            // ?100??
            Object result = tbKeysMapper.invoke("deleteWithVersionByPrimaryKey", 100L, tbKeysKey.getObject());
            Assert.assertEquals(result, 0);

            // key1 = 1, key2 = k1 ?1
            result = tbKeysMapper.invoke("deleteWithVersionByPrimaryKey", 1L, tbKeysKey.getObject());
            Assert.assertEquals(result, 1);

            // ?
            ResultSet rs = DBHelper.execute(sqlSession.getConnection(),
                    "select * from tb_keys where key1 = 1 and key2 = 'k1'");
            Assert.assertEquals(rs.first(), false);
        }
    });
}

From source file:com.itfsw.mybatis.generator.plugins.OptimisticLockerPluginTest.java

License:Apache License

/**
 *  updateWithVersionByExampleSelective/*w  w  w  .  ja  va2 s . c  om*/
 */
@Test
public void testUpdateWithVersionByExampleSelective() throws Exception {
    // ?
    MyBatisGeneratorTool tool = MyBatisGeneratorTool
            .create("scripts/OptimisticLockerPlugin/mybatis-generator.xml");
    tool.generate(new IBeforeCallback() {
        @Override
        public void run() throws Exception {
            DBHelper.resetDB("scripts/OptimisticLockerPlugin/init.sql");
        }
    }, new AbstractShellCallback() {
        @Override
        public void reloadProject(SqlSession sqlSession, ClassLoader loader, String packagz) throws Exception {
            ObjectUtil tbMapper = new ObjectUtil(sqlSession.getMapper(loader.loadClass(packagz + ".TbMapper")));

            ObjectUtil tbExample = new ObjectUtil(loader, packagz + ".TbExample");
            ObjectUtil criteria = new ObjectUtil(tbExample.invoke("createCriteria"));
            criteria.invoke("andIdEqualTo", 1l);

            ObjectUtil tb = new ObjectUtil(loader, packagz + ".Tb");
            tb.set("id", 1L);
            tb.set("incF1", 152L); // ?sql?
            tb.set("incF2", 10L);
            tb.set("incF3", 5L);

            // sql
            String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(),
                    "updateWithVersionByExampleSelective", 100L, tb.getObject(), tbExample.getObject());
            Assert.assertEquals(sql,
                    "update tb SET inc_f1 = inc_f1 + 1, id = 1, inc_f2 = 10, inc_f3 = 5 WHERE inc_f1 = 100 and ( ( id = '1' ) )");

            // ?100?0
            Object result = tbMapper.invoke("updateWithVersionByExampleSelective", 100L, tb.getObject(),
                    tbExample.getObject());
            Assert.assertEquals(result, 0);

            // id = 1 ?0
            result = tbMapper.invoke("updateWithVersionByExampleSelective", 0L, tb.getObject(),
                    tbExample.getObject());
            Assert.assertEquals(result, 1);

            // ???1
            ResultSet rs = DBHelper.execute(sqlSession.getConnection(), "select * from tb where id = 1");
            rs.first();
            Assert.assertEquals(rs.getInt("inc_f1"), 1);
        }
    });

    // ?
    tool = MyBatisGeneratorTool
            .create("scripts/OptimisticLockerPlugin/mybatis-generator-customizedNextVersion.xml");
    tool.generate(new IBeforeCallback() {
        @Override
        public void run() throws Exception {
            DBHelper.resetDB("scripts/OptimisticLockerPlugin/init.sql");
        }
    }, new AbstractShellCallback() {
        @Override
        public void reloadProject(SqlSession sqlSession, ClassLoader loader, String packagz) throws Exception {
            ObjectUtil tbMapper = new ObjectUtil(sqlSession.getMapper(loader.loadClass(packagz + ".TbMapper")));

            ObjectUtil tbExample = new ObjectUtil(loader, packagz + ".TbExample");
            ObjectUtil criteria = new ObjectUtil(tbExample.invoke("createCriteria"));
            criteria.invoke("andIdEqualTo", 1l);

            ObjectUtil tb = new ObjectUtil(loader, packagz + ".Tb");
            tb.set("id", 1L);
            tb.invoke("setIncF1", 152L); // nextVersion
            tb.set("incF2", 10L);
            tb.set("incF3", 5L);

            // sql
            String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(),
                    "updateWithVersionByExampleSelective", 100L, tb.getObject(), tbExample.getObject());
            Assert.assertEquals(sql,
                    "update tb SET inc_f1 = 152, id = 1, inc_f2 = 10, inc_f3 = 5 WHERE inc_f1 = 100 and ( ( id = '1' ) )");

            // ?100?0
            Object result = tbMapper.invoke("updateWithVersionByExampleSelective", 100L, tb.getObject(),
                    tbExample.getObject());
            Assert.assertEquals(result, 0);

            // id = 1 ?0
            result = tbMapper.invoke("updateWithVersionByExampleSelective", 0L, tb.getObject(),
                    tbExample.getObject());
            Assert.assertEquals(result, 1);

            // ???1
            ResultSet rs = DBHelper.execute(sqlSession.getConnection(), "select * from tb where id = 1");
            rs.first();
            Assert.assertEquals(rs.getInt("inc_f1"), 152);
        }
    });
}

From source file:com.itfsw.mybatis.generator.plugins.OptimisticLockerPluginTest.java

License:Apache License

/**
 *  updateWithVersionByExample/* w  w w.  ja v a 2 s  .co m*/
 */
@Test
public void testUpdateWithVersionByExample() throws Exception {
    MyBatisGeneratorTool tool = MyBatisGeneratorTool
            .create("scripts/OptimisticLockerPlugin/mybatis-generator.xml");
    // ?or
    tool.generate(new IBeforeCallback() {
        @Override
        public void run() throws Exception {
            DBHelper.resetDB("scripts/OptimisticLockerPlugin/init.sql");
        }
    }, new AbstractShellCallback() {
        @Override
        public void reloadProject(SqlSession sqlSession, ClassLoader loader, String packagz) throws Exception {
            ObjectUtil tbMapper = new ObjectUtil(sqlSession.getMapper(loader.loadClass(packagz + ".TbMapper")));

            ObjectUtil tbExample = new ObjectUtil(loader, packagz + ".TbExample");
            ObjectUtil criteria = new ObjectUtil(tbExample.invoke("createCriteria"));
            criteria.invoke("andIdEqualTo", 1l);

            ObjectUtil tb = new ObjectUtil(loader, packagz + ".Tb");
            tb.set("id", 1L);
            tb.set("incF1", 152L); // ?sql?
            tb.set("incF2", 10L);
            tb.set("incF3", 5L);

            // sql
            String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "updateWithVersionByExample", 100L,
                    tb.getObject(), tbExample.getObject());
            Assert.assertEquals(sql,
                    "update tb set inc_f1 = inc_f1 + 1, id = 1, field1 = 'null', inc_f2 = 10, inc_f3 = 5 WHERE inc_f1 = 100 and ( ( id = '1' ) )");

            // ?100?0
            Object result = tbMapper.invoke("updateWithVersionByExample", 100L, tb.getObject(),
                    tbExample.getObject());
            Assert.assertEquals(result, 0);

            // id = 1 ?0
            result = tbMapper.invoke("updateWithVersionByExample", 0L, tb.getObject(), tbExample.getObject());
            Assert.assertEquals(result, 1);

            // ???1
            ResultSet rs = DBHelper.execute(sqlSession.getConnection(), "select * from tb where id = 1");
            rs.first();
            Assert.assertEquals(rs.getInt("inc_f1"), 1);
        }
    });

    //  byExample or ???
    tool.generate(new IBeforeCallback() {
        @Override
        public void run() throws Exception {
            DBHelper.resetDB("scripts/OptimisticLockerPlugin/init.sql");
        }
    }, new AbstractShellCallback() {
        @Override
        public void reloadProject(SqlSession sqlSession, ClassLoader loader, String packagz) throws Exception {
            ObjectUtil tbMapper = new ObjectUtil(sqlSession.getMapper(loader.loadClass(packagz + ".TbMapper")));

            ObjectUtil tbExample = new ObjectUtil(loader, packagz + ".TbExample");
            ObjectUtil criteria = new ObjectUtil(tbExample.invoke("createCriteria"));
            criteria.invoke("andIdEqualTo", 1l);

            ObjectUtil orCriteria = new ObjectUtil(tbExample.invoke("or"));
            orCriteria.invoke("andField1EqualTo", "ts1");

            ObjectUtil tb = new ObjectUtil(loader, packagz + ".Tb");
            tb.set("id", 1L);
            tb.set("incF1", 152L); // ?sql?
            tb.set("incF2", 10L);
            tb.set("incF3", 5L);

            // sql
            String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "updateWithVersionByExample", 100L,
                    tb.getObject(), tbExample.getObject());
            Assert.assertEquals(sql,
                    "update tb set inc_f1 = inc_f1 + 1, id = 1, field1 = 'null', inc_f2 = 10, inc_f3 = 5 WHERE inc_f1 = 100 and ( ( id = '1' ) or( field1 = 'ts1' ) )");

            // ?100?0
            Object result = tbMapper.invoke("updateWithVersionByExample", 100L, tb.getObject(),
                    tbExample.getObject());
            Assert.assertEquals(result, 0);
        }
    });

    // ?
    tool = MyBatisGeneratorTool
            .create("scripts/OptimisticLockerPlugin/mybatis-generator-customizedNextVersion.xml");
    tool.generate(new IBeforeCallback() {
        @Override
        public void run() throws Exception {
            DBHelper.resetDB("scripts/OptimisticLockerPlugin/init.sql");
        }
    }, new AbstractShellCallback() {
        @Override
        public void reloadProject(SqlSession sqlSession, ClassLoader loader, String packagz) throws Exception {
            ObjectUtil tbMapper = new ObjectUtil(sqlSession.getMapper(loader.loadClass(packagz + ".TbMapper")));

            ObjectUtil tbExample = new ObjectUtil(loader, packagz + ".TbExample");
            ObjectUtil criteria = new ObjectUtil(tbExample.invoke("createCriteria"));
            criteria.invoke("andIdEqualTo", 1l);

            ObjectUtil tb = new ObjectUtil(loader, packagz + ".Tb");
            tb.set("id", 1L);
            tb.invoke("nextVersion", 152L); // nextVersion
            tb.set("incF2", 10L);
            tb.set("incF3", 5L);

            // sql
            String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "updateWithVersionByExample", 100L,
                    tb.getObject(), tbExample.getObject());
            Assert.assertEquals(sql,
                    "update tb set inc_f1 = 152, id = 1, field1 = 'null', inc_f2 = 10, inc_f3 = 5 WHERE inc_f1 = 100 and ( ( id = '1' ) )");

            // ?100?0
            Object result = tbMapper.invoke("updateWithVersionByExample", 100L, tb.getObject(),
                    tbExample.getObject());
            Assert.assertEquals(result, 0);

            // id = 1 ?0
            result = tbMapper.invoke("updateWithVersionByExample", 0L, tb.getObject(), tbExample.getObject());
            Assert.assertEquals(result, 1);

            // ???1
            ResultSet rs = DBHelper.execute(sqlSession.getConnection(), "select * from tb where id = 1");
            rs.first();
            Assert.assertEquals(rs.getInt("inc_f1"), 152);
        }
    });
}

From source file:com.itfsw.mybatis.generator.plugins.OptimisticLockerPluginTest.java

License:Apache License

/**
 *  updateWithVersionByExampleWithBLOBs//from   w  ww.  j  av a  2 s. c o m
 */
@Test
public void testUpdateWithVersionByExampleWithBLOBs() throws Exception {
    MyBatisGeneratorTool tool = MyBatisGeneratorTool
            .create("scripts/OptimisticLockerPlugin/mybatis-generator.xml");

    // withoutBLOBs
    tool.generate(new IBeforeCallback() {
        @Override
        public void run() throws Exception {
            DBHelper.resetDB("scripts/OptimisticLockerPlugin/init.sql");
        }
    }, new AbstractShellCallback() {
        @Override
        public void reloadProject(SqlSession sqlSession, ClassLoader loader, String packagz) throws Exception {
            ObjectUtil tbBlobsMapper = new ObjectUtil(
                    sqlSession.getMapper(loader.loadClass(packagz + ".TbBlobsMapper")));

            ObjectUtil tbBlobsExample = new ObjectUtil(loader, packagz + ".TbBlobsExample");
            ObjectUtil criteria = new ObjectUtil(tbBlobsExample.invoke("createCriteria"));
            criteria.invoke("andIdEqualTo", 1l);

            ObjectUtil tbBlobs = new ObjectUtil(loader, packagz + ".TbBlobs");
            tbBlobs.set("id", 1L);
            tbBlobs.set("incF1", 152L); // ?sql?
            tbBlobs.set("incF2", 10L);
            tbBlobs.set("incF3", 5L);

            // sql
            String sql = SqlHelper.getFormatMapperSql(tbBlobsMapper.getObject(), "updateWithVersionByExample",
                    100L, tbBlobs.getObject(), tbBlobsExample.getObject());
            Assert.assertEquals(sql,
                    "update tb_blobs set inc_f1 = inc_f1 + 1, id = 1, field1 = 'null', inc_f2 = 10, inc_f3 = 5 WHERE inc_f1 = 100 and ( ( id = '1' ) )");

            // ?100?0
            Object result = tbBlobsMapper.invoke("updateWithVersionByExample", 100L, tbBlobs.getObject(),
                    tbBlobsExample.getObject());
            Assert.assertEquals(result, 0);

            // id = 1 ?1
            result = tbBlobsMapper.invoke("updateWithVersionByExample", 1L, tbBlobs.getObject(),
                    tbBlobsExample.getObject());
            Assert.assertEquals(result, 1);

            // ???1
            ResultSet rs = DBHelper.execute(sqlSession.getConnection(), "select * from tb_blobs where id = 1");
            rs.first();
            Assert.assertEquals(rs.getInt("inc_f1"), 2);
        }
    });

    // withBLOBs
    tool.generate(new IBeforeCallback() {
        @Override
        public void run() throws Exception {
            DBHelper.resetDB("scripts/OptimisticLockerPlugin/init.sql");
        }
    }, new AbstractShellCallback() {
        @Override
        public void reloadProject(SqlSession sqlSession, ClassLoader loader, String packagz) throws Exception {
            ObjectUtil tbBlobsMapper = new ObjectUtil(
                    sqlSession.getMapper(loader.loadClass(packagz + ".TbBlobsMapper")));

            ObjectUtil tbBlobsExample = new ObjectUtil(loader, packagz + ".TbBlobsExample");
            ObjectUtil criteria = new ObjectUtil(tbBlobsExample.invoke("createCriteria"));
            criteria.invoke("andIdEqualTo", 1l);

            ObjectUtil tbBlobsWithBLOBs = new ObjectUtil(loader, packagz + ".TbBlobsWithBLOBs");
            tbBlobsWithBLOBs.set("id", 1L);
            tbBlobsWithBLOBs.set("incF1", 152L); // ?sql?
            tbBlobsWithBLOBs.set("incF2", 10L);
            tbBlobsWithBLOBs.set("incF3", 5L);
            tbBlobsWithBLOBs.set("field1", "ts1");

            // sql
            String sql = SqlHelper.getFormatMapperSql(tbBlobsMapper.getObject(),
                    "updateWithVersionByExampleWithBLOBs", 100L, tbBlobsWithBLOBs.getObject(),
                    tbBlobsExample.getObject());
            Assert.assertEquals(sql,
                    "update tb_blobs set inc_f1 = inc_f1 + 1, id = 1, field1 = 'ts1', inc_f2 = 10, inc_f3 = 5, field2 = 'null', field3 = 'null' WHERE inc_f1 = 100 and ( ( id = '1' ) )");

            // ?100?0
            Object result = tbBlobsMapper.invoke("updateWithVersionByExampleWithBLOBs", 100L,
                    tbBlobsWithBLOBs.getObject(), tbBlobsExample.getObject());
            Assert.assertEquals(result, 0);

            // id = 1 ?1
            result = tbBlobsMapper.invoke("updateWithVersionByExampleWithBLOBs", 1L,
                    tbBlobsWithBLOBs.getObject(), tbBlobsExample.getObject());
            Assert.assertEquals(result, 1);

            // ???1
            ResultSet rs = DBHelper.execute(sqlSession.getConnection(), "select * from tb_blobs where id = 1");
            rs.first();
            Assert.assertEquals(rs.getInt("inc_f1"), 2);
            Assert.assertEquals(rs.getString("field1"), "ts1");
        }
    });

    // ================================================ ?
    // =======================================================
    tool = MyBatisGeneratorTool
            .create("scripts/OptimisticLockerPlugin/mybatis-generator-customizedNextVersion.xml");
    // withoutBLOBs
    tool.generate(new IBeforeCallback() {
        @Override
        public void run() throws Exception {
            DBHelper.resetDB("scripts/OptimisticLockerPlugin/init.sql");
        }
    }, new AbstractShellCallback() {
        @Override
        public void reloadProject(SqlSession sqlSession, ClassLoader loader, String packagz) throws Exception {
            ObjectUtil tbBlobsMapper = new ObjectUtil(
                    sqlSession.getMapper(loader.loadClass(packagz + ".TbBlobsMapper")));

            ObjectUtil tbBlobsExample = new ObjectUtil(loader, packagz + ".TbBlobsExample");
            ObjectUtil criteria = new ObjectUtil(tbBlobsExample.invoke("createCriteria"));
            criteria.invoke("andIdEqualTo", 1l);

            ObjectUtil tbBlobsBuilder = new ObjectUtil(loader, packagz + ".TbBlobs$Builder");
            tbBlobsBuilder.invoke("id", 1L);
            tbBlobsBuilder.invoke("incF1", 152L); // set
            tbBlobsBuilder.invoke("incF2", 10L);
            tbBlobsBuilder.invoke("incF3", 5L);

            // sql
            String sql = SqlHelper.getFormatMapperSql(tbBlobsMapper.getObject(), "updateWithVersionByExample",
                    100L, tbBlobsBuilder.invoke("build"), tbBlobsExample.getObject());
            Assert.assertEquals(sql,
                    "update tb_blobs set inc_f1 = 152, id = 1, field1 = 'null', inc_f2 = 10, inc_f3 = 5 WHERE inc_f1 = 100 and ( ( id = '1' ) )");

            // ?100?0
            Object result = tbBlobsMapper.invoke("updateWithVersionByExample", 100L,
                    tbBlobsBuilder.invoke("build"), tbBlobsExample.getObject());
            Assert.assertEquals(result, 0);

            // id = 1 ?1
            result = tbBlobsMapper.invoke("updateWithVersionByExample", 1L, tbBlobsBuilder.invoke("build"),
                    tbBlobsExample.getObject());
            Assert.assertEquals(result, 1);

            // ???1
            ResultSet rs = DBHelper.execute(sqlSession.getConnection(), "select * from tb_blobs where id = 1");
            rs.first();
            Assert.assertEquals(rs.getInt("inc_f1"), 152);
        }
    });

    // withBLOBs
    tool.generate(new IBeforeCallback() {
        @Override
        public void run() throws Exception {
            DBHelper.resetDB("scripts/OptimisticLockerPlugin/init.sql");
        }
    }, new AbstractShellCallback() {
        @Override
        public void reloadProject(SqlSession sqlSession, ClassLoader loader, String packagz) throws Exception {
            ObjectUtil tbBlobsMapper = new ObjectUtil(
                    sqlSession.getMapper(loader.loadClass(packagz + ".TbBlobsMapper")));

            ObjectUtil tbBlobsExample = new ObjectUtil(loader, packagz + ".TbBlobsExample");
            ObjectUtil criteria = new ObjectUtil(tbBlobsExample.invoke("createCriteria"));
            criteria.invoke("andIdEqualTo", 1l);

            ObjectUtil tbBlobsBuilder = new ObjectUtil(loader, packagz + ".TbBlobsWithBLOBs$Builder");
            tbBlobsBuilder.invoke("id", 1L);
            tbBlobsBuilder.invoke("nextVersion", 152L); // nextVersion 
            tbBlobsBuilder.invoke("incF2", 10L);
            tbBlobsBuilder.invoke("incF3", 5L);
            tbBlobsBuilder.invoke("field1", "ts1");

            // sql
            String sql = SqlHelper.getFormatMapperSql(tbBlobsMapper.getObject(),
                    "updateWithVersionByExampleWithBLOBs", 100L, tbBlobsBuilder.invoke("build"),
                    tbBlobsExample.getObject());
            Assert.assertEquals(sql,
                    "update tb_blobs set inc_f1 = 152, id = 1, field1 = 'ts1', inc_f2 = 10, inc_f3 = 5, field2 = 'null', field3 = 'null' WHERE inc_f1 = 100 and ( ( id = '1' ) )");

            // ?100?0
            Object result = tbBlobsMapper.invoke("updateWithVersionByExampleWithBLOBs", 100L,
                    tbBlobsBuilder.invoke("build"), tbBlobsExample.getObject());
            Assert.assertEquals(result, 0);

            // id = 1 ?1
            result = tbBlobsMapper.invoke("updateWithVersionByExampleWithBLOBs", 1L,
                    tbBlobsBuilder.invoke("build"), tbBlobsExample.getObject());
            Assert.assertEquals(result, 1);

            // ???1
            ResultSet rs = DBHelper.execute(sqlSession.getConnection(), "select * from tb_blobs where id = 1");
            rs.first();
            Assert.assertEquals(rs.getInt("inc_f1"), 152);
            Assert.assertEquals(rs.getString("field1"), "ts1");
        }
    });
}