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

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

Introduction

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

Prototype

Connection getConnection();

Source Link

Document

Retrieves inner database connection.

Usage

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

License:Apache License

/**
 * ?? UpsertPlugin  SelectiveEnhancedPlugin
 *///  ww w  .j  av  a  2s  .  c  o m
@Test
public void testWithUpsertAndSelectiveEnhancedPlugin() throws Exception {
    MyBatisGeneratorTool tool = MyBatisGeneratorTool
            .create("scripts/IncrementPlugin/mybatis-generator-with-upsert-and-selective-enhanced-plugin.xml");

    // upsertSelective ?
    tool.generate(() -> DBHelper.createDB("scripts/IncrementPlugin/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 tb = new ObjectUtil(loader, packagz + ".Tb");
            ObjectUtil tbColumnIncF1 = new ObjectUtil(loader, packagz + ".Tb$Column#incF1");

            tb.set("id", 10L);
            tb.set("field1", "ts1");
            tb.set("incF1", 10L);
            tb.invoke("increment", tbColumnIncF1.invoke("inc", 10L));

            // sql
            String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "upsertSelective", tb.getObject());
            Assert.assertEquals(sql,
                    "insert into tb ( id, field1, inc_f1 ) values ( 10, 'ts1', 10 ) on duplicate key update id = 10, field1 = 'ts1', inc_f1 = inc_f1 + 10");
            Object result = tbMapper.invoke("upsertSelective", tb.getObject(),
                    Array.newInstance(new ObjectUtil(loader, packagz + ".Tb$Column#field1").getCls(), 0));
            Assert.assertEquals(result, 1);
            // ??update
            tb.invoke("increment", tbColumnIncF1.invoke("inc", 10L));
            tbMapper.invoke("upsertSelective", tb.getObject(),
                    Array.newInstance(new ObjectUtil(loader, packagz + ".Tb$Column#field1").getCls(), 0));
            ResultSet rs = DBHelper.execute(sqlSession, "select * from tb where id = 10");
            rs.first();
            Assert.assertEquals(rs.getInt("inc_f1"), 20);
        }
    });

    // upsertByExampleSelective ?
    tool.generate(() -> DBHelper.createDB("scripts/IncrementPlugin/init.sql"), new AbstractShellCallback() {
        @Override
        public void reloadProject(SqlSession sqlSession, ClassLoader loader, String packagz) throws Exception {
            // 1. updateByExampleSelective
            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("andField1EqualTo", "ts123");

            ObjectUtil tb = new ObjectUtil(loader, packagz + ".Tb");
            ObjectUtil tbColumnIncF1 = new ObjectUtil(loader, packagz + ".Tb$Column#incF1");

            tb.set("id", 11L);
            tb.set("field1", "ts123");
            tb.set("incF1", 100L);
            tb.invoke("increment", tbColumnIncF1.invoke("inc", 100L));

            // sql
            // ?
            String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "upsertByExampleSelective",
                    tb.getObject(), tbExample.getObject());
            Assert.assertEquals(sql,
                    "update tb set id = 11, field1 = 'ts123', inc_f1 = inc_f1 + 100 WHERE ( field1 = 'ts123' ) ; insert into tb ( id, field1, inc_f1 ) select 11, 'ts123', 100 from dual where not exists ( select 1 from tb WHERE ( field1 = 'ts123' ) )");
            // 
            Object result = tbMapper.invoke("upsertByExampleSelective", tb.getObject(), tbExample.getObject(),
                    Array.newInstance(new ObjectUtil(loader, packagz + ".Tb$Column#field1").getCls(), 0));
            Assert.assertEquals(result, 0);
            ResultSet rs = DBHelper.execute(sqlSession.getConnection(), "select inc_f1 from tb where id = 11");
            rs.first();
            Assert.assertEquals(rs.getInt("inc_f1"), 100);

            tb.invoke("increment", tbColumnIncF1.invoke("dec", 50L));
            result = tbMapper.invoke("upsertByExampleSelective", tb.getObject(), tbExample.getObject(),
                    Array.newInstance(new ObjectUtil(loader, packagz + ".Tb$Column#field1").getCls(), 0));
            System.out.println("kks" + SqlHelper.getFormatMapperSql(tbMapper.getObject(),
                    "upsertByExampleSelective", tb.getObject(), tbExample.getObject(),
                    Array.newInstance(new ObjectUtil(loader, packagz + ".Tb$Column#field1").getCls(), 0)));

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

    // upsertSelective 
    tool.generate(() -> DBHelper.createDB("scripts/IncrementPlugin/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 tb = new ObjectUtil(loader, packagz + ".Tb");
            ObjectUtil tbColumnIncF1 = new ObjectUtil(loader, packagz + ".Tb$Column#incF1");

            tb.set("id", 20L);
            tb.set("field1", "ts1");
            tb.set("incF1", 20L);
            tb.invoke("increment", tbColumnIncF1.invoke("inc", 20L));

            ObjectUtil TbColumnId = new ObjectUtil(loader, packagz + ".Tb$Column#id");
            ObjectUtil TbColumnField1 = new ObjectUtil(loader, packagz + ".Tb$Column#field1");
            ObjectUtil TbColumnIncF2 = new ObjectUtil(loader, packagz + ".Tb$Column#incF2");
            Object columns = Array.newInstance(TbColumnField1.getCls(), 4);
            Array.set(columns, 0, TbColumnId.getObject());
            Array.set(columns, 1, TbColumnField1.getObject());
            Array.set(columns, 2, tbColumnIncF1.getObject());
            Array.set(columns, 3, TbColumnIncF2.getObject());

            // sql
            String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "upsertSelective", tb.getObject(),
                    columns);
            Assert.assertEquals(sql,
                    "insert into tb ( id , field1 , inc_f1 , inc_f2 ) values ( 20 , 'ts1' , 20 , null ) on duplicate key update id = 20 , field1 = 'ts1' , inc_f1 = inc_f1 + 20 , inc_f2 = null");
            Object result = tbMapper.invoke("upsertSelective", tb.getObject(), columns);
            Assert.assertEquals(result, 1);
            // ??update
            tb.invoke("increment", tbColumnIncF1.invoke("inc", 20L));
            result = tbMapper.invoke("upsertSelective", tb.getObject(), columns);
            Assert.assertEquals(result, 2);
            ResultSet rs = DBHelper.execute(sqlSession, "select * from tb where id = 20");
            rs.first();
            Assert.assertEquals(rs.getInt("inc_f1"), 40);
        }
    });

    // upsertByExampleSelective 
    tool.generate(() -> DBHelper.createDB("scripts/IncrementPlugin/init.sql"), new AbstractShellCallback() {
        @Override
        public void reloadProject(SqlSession sqlSession, ClassLoader loader, String packagz) throws Exception {
            // 1. updateByExampleSelective
            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("andField1EqualTo", "ts123");

            ObjectUtil tb = new ObjectUtil(loader, packagz + ".Tb");
            ObjectUtil tbColumnIncF1 = new ObjectUtil(loader, packagz + ".Tb$Column#incF1");

            tb.set("id", 11L);
            tb.set("field1", "ts123");
            tb.set("incF1", 100L);
            tb.invoke("increment", tbColumnIncF1.invoke("dec", 100L));

            ObjectUtil TbColumnId = new ObjectUtil(loader, packagz + ".Tb$Column#id");
            ObjectUtil TbColumnField1 = new ObjectUtil(loader, packagz + ".Tb$Column#field1");
            ObjectUtil TbColumnIncF2 = new ObjectUtil(loader, packagz + ".Tb$Column#incF2");
            Object columns = Array.newInstance(TbColumnField1.getCls(), 4);
            Array.set(columns, 0, TbColumnId.getObject());
            Array.set(columns, 1, TbColumnField1.getObject());
            Array.set(columns, 2, tbColumnIncF1.getObject());
            Array.set(columns, 3, TbColumnIncF2.getObject());

            // sql
            // ?
            String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "upsertByExampleSelective",
                    tb.getObject(), tbExample.getObject(), columns);
            Assert.assertEquals(sql,
                    "update tb set id = 11 , field1 = 'ts123' , inc_f1 = inc_f1 - 100 , inc_f2 = null WHERE ( field1 = 'ts123' ) ; insert into tb ( id , field1 , inc_f1 , inc_f2 ) select 11 , 'ts123' , 100 , null from dual where not exists ( select 1 from tb WHERE ( field1 = 'ts123' ) )");
            // 
            Object result = tbMapper.invoke("upsertByExampleSelective", tb.getObject(), tbExample.getObject(),
                    columns);
            Assert.assertEquals(result, 0);
            ResultSet rs = DBHelper.execute(sqlSession.getConnection(), "select inc_f1 from tb where id = 11");
            rs.first();
            Assert.assertEquals(rs.getInt("inc_f1"), 100);

            tb.invoke("increment", tbColumnIncF1.invoke("dec", 50L));
            result = tbMapper.invoke("upsertByExampleSelective", tb.getObject(), tbExample.getObject(),
                    columns);
            Assert.assertEquals(result, 1);
            // ?
            rs = DBHelper.execute(sqlSession.getConnection(), "select inc_f1 from tb where id = 11");
            rs.first();
            Assert.assertEquals(rs.getInt("inc_f1"), 50);
        }
    });
}

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

License:Apache License

/**
 * ?? LombokPlugin(?IncrementsPlugin?)/*from   w w  w .j  av a2  s.  com*/
 */
@Test
public void testWithLombokPlugin() throws Exception {
    MyBatisGeneratorTool tool = MyBatisGeneratorTool
            .create("scripts/IncrementPlugin/mybatis-generator-with-LombokPlugin.xml");

    tool.generate(() -> DBHelper.createDB("scripts/IncrementPlugin/init-lombok.sql"),
            new AbstractShellCallback() {
                @Override
                public void reloadProject(SqlSession sqlSession, ClassLoader loader, String packagz)
                        throws Exception {

                    // -------------------------------------  sql  ----------------------------------------
                    // 1. updateByExample?updateByExampleSelective
                    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", 3l);

                    ObjectUtil tbBuilder = new ObjectUtil(
                            loader.loadClass(packagz + ".Tb").getMethod("builder").invoke(null));
                    ObjectUtil tbColumnField2 = new ObjectUtil(loader, packagz + ".Tb$Column#field2");
                    ObjectUtil tb = new ObjectUtil(tbBuilder.invoke("build"));

                    tb.invoke("increment", tbColumnField2.invoke("inc", 100));

                    // sql
                    String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "updateByExample",
                            tb.getObject(), tbExample.getObject());
                    Assert.assertEquals(sql,
                            "update tb set id = null, field1 = 'null', field2 = field2 + 100 WHERE ( id = '3' )");
                    sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "updateByExampleSelective",
                            tb.getObject(), tbExample.getObject());
                    Assert.assertEquals(sql, "update tb SET field2 = field2 + 100 WHERE ( id = '3' )");
                    // 
                    // inc_f1 100
                    Object result = tbMapper.invoke("updateByExampleSelective", tb.getObject(),
                            tbExample.getObject());
                    Assert.assertEquals(result, 1);
                    ResultSet rs = DBHelper.execute(sqlSession.getConnection(),
                            "select field2 from tb where id = 3");
                    rs.first();
                    Assert.assertEquals(rs.getInt("field2"), 103);

                    // 2. SuperBuilder
                    ObjectUtil tbLombokMapper = new ObjectUtil(
                            sqlSession.getMapper(loader.loadClass(packagz + ".TbLombokMapper")));

                    ObjectUtil tbLombokExample = new ObjectUtil(loader, packagz + ".TbLombokExample");
                    criteria = new ObjectUtil(tbLombokExample.invoke("createCriteria"));
                    criteria.invoke("andKey1EqualTo", "key1");

                    ObjectUtil tbLombokWithBLOBsBuilder = new ObjectUtil(
                            loader.loadClass(packagz + ".TbLombokWithBLOBs").getMethod("builder").invoke(null));
                    tbLombokWithBLOBsBuilder.invoke("field3", "f3");
                    tbLombokWithBLOBsBuilder.invoke("field1", "ts33");
                    tbLombokWithBLOBsBuilder.invoke("key1", "key100");

                    ObjectUtil tbLombokWithBLOBs = new ObjectUtil(tbLombokWithBLOBsBuilder.invoke("build"));

                    ObjectUtil tbLombokWithBLOBsColumnIncF1 = new ObjectUtil(loader,
                            packagz + ".TbLombokWithBLOBs$Column#incF1");
                    tbLombokWithBLOBs.invoke("increment",
                            tbLombokWithBLOBsColumnIncF1.invoke("inc", (short) 1));
                    ObjectUtil tbLombokWithBLOBsColumnId = new ObjectUtil(loader,
                            packagz + ".TbLombokWithBLOBs$Column#id");
                    tbLombokWithBLOBs.invoke("increment", tbLombokWithBLOBsColumnId.invoke("dec", 100L));

                    // sql
                    sql = SqlHelper.getFormatMapperSql(tbLombokMapper.getObject(), "updateByExampleSelective",
                            tbLombokWithBLOBs.getObject(), tbLombokExample.getObject());
                    Assert.assertEquals(sql,
                            "update tb_lombok SET id = id - 100, key1 = 'key100', field1 = 'ts33', inc_f1 = inc_f1 + 1, field3 = 'f3' WHERE ( key1 = 'key1' )");
                    // 
                    result = tbLombokMapper.invoke("updateByExampleSelective", tbLombokWithBLOBs.getObject(),
                            tbLombokExample.getObject());
                    Assert.assertEquals(result, 1);
                    rs = DBHelper.execute(sqlSession.getConnection(),
                            "select * from tb_lombok where key1 = 'key100'");
                    rs.first();
                    Assert.assertEquals(rs.getInt("inc_f1"), 1);
                    Assert.assertEquals(rs.getInt("id"), -99);

                }
            });
}

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

License:Apache License

/**
 * ?sql/*from w w w  .j a v  a2 s .c  om*/
 */
@Test
public void testSqlAndExecute() throws Exception {
    MyBatisGeneratorTool tool = MyBatisGeneratorTool.create("scripts/IncrementsPlugin/mybatis-generator.xml");
    tool.generate(new IBeforeCallback() {
        @Override
        public void run() throws Exception {
            DBHelper.resetDB("scripts/IncrementsPlugin/init.sql");
        }
    }, new AbstractShellCallback() {
        @Override
        public void reloadProject(SqlSession sqlSession, ClassLoader loader, String packagz) throws Exception {

            // 1. updateByExample?updateByExampleSelective
            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", 3l);

            ObjectUtil tbBuilder = new ObjectUtil(loader, packagz + ".Tb$Builder");
            ObjectUtil tbBuilderInc = new ObjectUtil(loader, packagz + ".Tb$Builder$Inc#INC");
            tbBuilder.invoke("incF1", 100l, tbBuilderInc.getObject());

            // sql
            String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "updateByExample",
                    tbBuilder.invoke("build"), tbExample.getObject());
            Assert.assertEquals(sql,
                    "update tb set id = null, field1 = 'null', inc_f1 = inc_f1 + 100 , inc_f2 = null, inc_f3 = null WHERE ( id = '3' )");
            sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "updateByExampleSelective",
                    tbBuilder.invoke("build"), tbExample.getObject());
            Assert.assertEquals(sql, "update tb SET inc_f1 = inc_f1 + 100 WHERE ( id = '3' )");
            // 
            // inc_f1 100
            Object result = tbMapper.invoke("updateByExampleSelective", tbBuilder.invoke("build"),
                    tbExample.getObject());
            Assert.assertEquals(result, 1);
            ResultSet rs = DBHelper.execute(sqlSession.getConnection(), "select inc_f1 from tb where id = 3");
            rs.first();
            Assert.assertEquals(rs.getInt("inc_f1"), 103);

            // inc_f1 ??50
            ObjectUtil tbBuilderDec = new ObjectUtil(loader, packagz + ".Tb$Builder$Inc#DEC");
            tbBuilder.invoke("incF1", 50l, tbBuilderDec.getObject());
            result = tbMapper.invoke("updateByExampleSelective", tbBuilder.invoke("build"),
                    tbExample.getObject());
            Assert.assertEquals(result, 1);
            // ?
            rs = DBHelper.execute(sqlSession.getConnection(), "select inc_f1 from tb where id = 3");
            rs.first();
            Assert.assertEquals(rs.getInt("inc_f1"), 53);

            // 2. updateByPrimaryKey?updateByPrimaryKeySelective
            ObjectUtil tbKeysMapper = new ObjectUtil(
                    sqlSession.getMapper(loader.loadClass(packagz + ".TbKeysMapper")));

            ObjectUtil tbKeysBuilderInc = new ObjectUtil(loader, packagz + ".TbKeys$Builder$Inc#INC");

            ObjectUtil tbKeysBuilder = new ObjectUtil(loader, packagz + ".TbKeys$Builder");
            tbKeysBuilder.invoke("key1", 1l);
            tbKeysBuilder.invoke("key2", "k1");
            tbKeysBuilder.invoke("incF1", 10l, tbKeysBuilderInc.getObject());
            tbKeysBuilder.invoke("incF3", 30l, tbKeysBuilderInc.getObject());

            // sql
            sql = SqlHelper.getFormatMapperSql(tbKeysMapper.getObject(), "updateByPrimaryKey",
                    tbKeysBuilder.invoke("build"));
            Assert.assertEquals(sql,
                    "update tb_keys set field1 = 'null', field2 = null, inc_f1 = inc_f1 + 10 , inc_f2 = null , inc_f3 = inc_f3 + 30 where key1 = 1 and key2 = 'k1'");
            sql = SqlHelper.getFormatMapperSql(tbKeysMapper.getObject(), "updateByPrimaryKeySelective",
                    tbKeysBuilder.invoke("build"));
            Assert.assertEquals(sql,
                    "update tb_keys SET inc_f1 = inc_f1 + 10 , inc_f3 = inc_f3 + 30 where key1 = 1 and key2 = 'k1'");
            // 
            result = tbKeysMapper.invoke("updateByPrimaryKeySelective", tbKeysBuilder.invoke("build"));
            Assert.assertEquals(result, 1);
            // ?
            rs = DBHelper.execute(sqlSession.getConnection(),
                    "select inc_f1, inc_f3 from tb_keys where key1 = 1 and key2 = 'k1'");
            rs.first();
            Assert.assertEquals(rs.getInt("inc_f1"), 11);
            Assert.assertEquals(rs.getInt("inc_f3"), 33);

            // 3. updateByExampleWithBLOBs?updateByPrimaryKeyWithBLOBs
            ObjectUtil tbBlobsMapper = new ObjectUtil(
                    sqlSession.getMapper(loader.loadClass(packagz + ".TbBlobsMapper")));

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

            ObjectUtil tbBlobsWithBLOBsBuilder = new ObjectUtil(loader, packagz + ".TbBlobsWithBLOBs$Builder");
            ObjectUtil tbBlobsBuilderInc = new ObjectUtil(loader, packagz + ".TbBlobs$Builder$Inc#INC");
            tbBlobsWithBLOBsBuilder.invoke("incF1", 100l, tbBlobsBuilderInc.getObject());
            tbBlobsWithBLOBsBuilder.invoke("incF2", 50l);
            tbBlobsWithBLOBsBuilder.invoke("field3", "blob");

            // sql
            sql = SqlHelper.getFormatMapperSql(tbBlobsMapper.getObject(), "updateByExampleWithBLOBs",
                    tbBlobsWithBLOBsBuilder.invoke("build"), tbBlobsExample.getObject());
            Assert.assertEquals(sql,
                    "update tb_blobs set id = null, field1 = 'null', inc_f1 = inc_f1 + 100 , inc_f2 = 50, inc_f3 = null , field2 = 'null', field3 = 'blob' WHERE ( id = '3' )");

            tbBlobsWithBLOBsBuilder.invoke("id", 3l);
            sql = SqlHelper.getFormatMapperSql(tbBlobsMapper.getObject(), "updateByPrimaryKeyWithBLOBs",
                    tbBlobsWithBLOBsBuilder.invoke("build"));
            Assert.assertEquals(sql,
                    "update tb_blobs set field1 = 'null', inc_f1 = inc_f1 + 100 , inc_f2 = 50, inc_f3 = null , field2 = 'null', field3 = 'blob' where id = 3");

            // 
            tbBlobsWithBLOBsBuilder.invoke("incF3", 10l);
            // ??
            sql = SqlHelper.getFormatMapperSql(tbBlobsMapper.getObject(), "updateByPrimaryKeyWithBLOBs",
                    tbBlobsWithBLOBsBuilder.invoke("build"));
            Assert.assertEquals(sql,
                    "update tb_blobs set field1 = 'null', inc_f1 = inc_f1 + 100 , inc_f2 = 50, inc_f3 = 10 , field2 = 'null', field3 = 'blob' where id = 3");
            result = tbBlobsMapper.invoke("updateByPrimaryKeyWithBLOBs",
                    tbBlobsWithBLOBsBuilder.invoke("build"));
            Assert.assertEquals(result, 1);
        }
    });
}

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

License:Apache License

/**
 * ? SelectiveEnhancedPlugin ?/*  w  w w  .  j  a  va2s .c  o  m*/
 */
@Test
public void testWithSelectiveEnhancedPlugin() throws Exception {
    MyBatisGeneratorTool tool = MyBatisGeneratorTool
            .create("scripts/IncrementsPlugin/mybatis-generator-with-selective-enhanced-plugin.xml");
    tool.generate(new IBeforeCallback() {
        @Override
        public void run() throws Exception {
            DBHelper.resetDB("scripts/IncrementsPlugin/init.sql");
        }
    }, new AbstractShellCallback() {
        @Override
        public void reloadProject(SqlSession sqlSession, ClassLoader loader, String packagz) throws Exception {
            // 1. updateByExampleSelective
            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", 3l);

            ObjectUtil tbBuilder = new ObjectUtil(loader, packagz + ".Tb$Builder");
            ObjectUtil tbBuilderInc = new ObjectUtil(loader, packagz + ".Tb$Builder$Inc#INC");
            tbBuilder.invoke("incF1", 100l, tbBuilderInc.getObject());
            tbBuilder.invoke("incF2", 200l);

            // selective
            ObjectUtil TbColumnField1 = new ObjectUtil(loader, packagz + ".Tb$Column#field1");
            ObjectUtil TbColumnIncF1 = new ObjectUtil(loader, packagz + ".Tb$Column#incF1");
            ObjectUtil TbColumnIncF2 = new ObjectUtil(loader, packagz + ".Tb$Column#incF2");
            Object columns = Array.newInstance(TbColumnField1.getCls(), 3);
            Array.set(columns, 0, TbColumnField1.getObject());
            Array.set(columns, 1, TbColumnIncF1.getObject());
            Array.set(columns, 2, TbColumnIncF2.getObject());

            // sql
            // ?
            String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "updateByExampleSelective",
                    tbBuilder.invoke("build"), tbExample.getObject());
            Assert.assertEquals(sql, "update tb SET inc_f1 = inc_f1 + 100 , inc_f2 = 200 WHERE ( id = '3' )");
            // selective 
            sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "updateByExampleSelective",
                    tbBuilder.invoke("build"), tbExample.getObject(), columns);
            Assert.assertEquals(sql,
                    "update tb SET field1 = 'null' , inc_f1 = inc_f1 + 100 , inc_f2 = 200 WHERE ( id = '3' )");
            // 
            // inc_f1 100
            Object result = tbMapper.invoke("updateByExampleSelective", tbBuilder.invoke("build"),
                    tbExample.getObject(), columns);
            Assert.assertEquals(result, 1);
            ResultSet rs = DBHelper.execute(sqlSession.getConnection(), "select inc_f1 from tb where id = 3");
            rs.first();
            Assert.assertEquals(rs.getInt("inc_f1"), 103);

            // inc_f1 ??50
            ObjectUtil tbBuilderDec = new ObjectUtil(loader, packagz + ".Tb$Builder$Inc#DEC");
            tbBuilder.invoke("incF1", 50l, tbBuilderDec.getObject());
            result = tbMapper.invoke("updateByExampleSelective", tbBuilder.invoke("build"),
                    tbExample.getObject(), Array.newInstance(TbColumnField1.getCls(), 0));
            Assert.assertEquals(result, 1);
            // ?
            rs = DBHelper.execute(sqlSession.getConnection(), "select inc_f1 from tb where id = 3");
            rs.first();
            Assert.assertEquals(rs.getInt("inc_f1"), 53);

            // 2. updateByPrimaryKeySelective
            ObjectUtil tbKeysMapper = new ObjectUtil(
                    sqlSession.getMapper(loader.loadClass(packagz + ".TbKeysMapper")));

            ObjectUtil tbKeysBuilderInc = new ObjectUtil(loader, packagz + ".TbKeys$Builder$Inc#INC");

            ObjectUtil tbKeysBuilder = new ObjectUtil(loader, packagz + ".TbKeys$Builder");
            tbKeysBuilder.invoke("key1", 1l);
            tbKeysBuilder.invoke("key2", "k1");
            tbKeysBuilder.invoke("incF1", 10l, tbKeysBuilderInc.getObject());
            tbKeysBuilder.invoke("incF3", 30l, tbKeysBuilderInc.getObject());

            // selective
            ObjectUtil TbColumnKey1 = new ObjectUtil(loader, packagz + ".TbKeys$Column#key1");
            TbColumnIncF1 = new ObjectUtil(loader, packagz + ".TbKeys$Column#incF1");
            columns = Array.newInstance(TbColumnKey1.getCls(), 2);
            Array.set(columns, 0, TbColumnKey1.getObject());
            Array.set(columns, 1, TbColumnIncF1.getObject());

            // sql
            // ?
            sql = SqlHelper.getFormatMapperSql(tbKeysMapper.getObject(), "updateByPrimaryKeySelective",
                    tbKeysBuilder.invoke("build"));
            Assert.assertEquals(sql,
                    "update tb_keys SET inc_f1 = inc_f1 + 10 , inc_f3 = inc_f3 + 30 where key1 = 1 and key2 = 'k1'");
            // selective 
            sql = SqlHelper.getFormatMapperSql(tbKeysMapper.getObject(), "updateByPrimaryKeySelective",
                    tbKeysBuilder.invoke("build"), columns);
            Assert.assertEquals(sql,
                    "update tb_keys SET key1 = 1 , inc_f1 = inc_f1 + 10 where key1 = 1 and key2 = 'k1'");
            // 
            result = tbKeysMapper.invoke("updateByPrimaryKeySelective", tbKeysBuilder.invoke("build"), columns);
            Assert.assertEquals(result, 1);
            // ?
            rs = DBHelper.execute(sqlSession.getConnection(),
                    "select inc_f1, inc_f3 from tb_keys where key1 = 1 and key2 = 'k1'");
            rs.first();
            Assert.assertEquals(rs.getInt("inc_f1"), 11);
        }
    });
}

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

License:Apache License

/**
 *  autoDelimitKeywords/* w w w.ja  va2  s .  com*/
 */
@Test
public void testWithAutoDelimitKeywords() throws Exception {
    MyBatisGeneratorTool tool = MyBatisGeneratorTool
            .create("scripts/IncrementsPlugin/mybatis-generator-with-autoDelimitKeywords.xml");
    tool.generate(new IBeforeCallback() {
        @Override
        public void run() throws Exception {
            DBHelper.resetDB("scripts/IncrementsPlugin/init.sql");
        }
    }, new AbstractShellCallback() {
        @Override
        public void reloadProject(SqlSession sqlSession, ClassLoader loader, String packagz) throws Exception {
            // 1. updateByExample?updateByExampleSelective
            ObjectUtil TbKeyWord = new ObjectUtil(
                    sqlSession.getMapper(loader.loadClass(packagz + ".TbKeyWordMapper")));

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

            ObjectUtil TbKeyWordBuilder = new ObjectUtil(loader, packagz + ".TbKeyWord$Builder");
            ObjectUtil TbKeyWordBuilderInc = new ObjectUtil(loader, packagz + ".TbKeyWord$Builder$Inc#INC");
            TbKeyWordBuilder.invoke("update", 100l, TbKeyWordBuilderInc.getObject());

            // 
            // inc_f1 100
            Object result = TbKeyWord.invoke("updateByExampleSelective", TbKeyWordBuilder.invoke("build"),
                    TbKeyWordExample.getObject());
            Assert.assertEquals(result, 1);
            // ?
            ResultSet rs = DBHelper.execute(sqlSession.getConnection(),
                    "select * from tb_key_word where id = 1");
            rs.first();
            Assert.assertEquals(rs.getLong("update"), 101);
        }
    });
}

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

License:Apache License

/**
 * ?? UpsertPlugin  SelectiveEnhancedPlugin
 *///  w ww . jav  a  2s.  com
@Test
public void testWithUpsertAndSelectiveEnhancedPlugin() throws Exception {
    MyBatisGeneratorTool tool = MyBatisGeneratorTool
            .create("scripts/IncrementsPlugin/mybatis-generator-with-upsert-and-selective-enhanced-plugin.xml");

    // upsertSelective ?
    tool.generate(new IBeforeCallback() {
        @Override
        public void run() throws Exception {
            DBHelper.resetDB("scripts/IncrementsPlugin/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 tbBuilder = new ObjectUtil(loader, packagz + ".Tb$Builder");
            ObjectUtil tbBuilderInc = new ObjectUtil(loader, packagz + ".Tb$Builder$Inc#INC");
            tbBuilder.invoke("id", 10L);
            tbBuilder.invoke("field1", "ts1");
            tbBuilder.invoke("incF1", 10L, tbBuilderInc.getObject());

            // sql
            String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "upsertSelective",
                    tbBuilder.invoke("build"));
            Assert.assertEquals(sql,
                    "insert into tb ( id, field1, inc_f1 ) values ( 10, 'ts1', 10 ) on duplicate key update id = 10, field1 = 'ts1', inc_f1 = inc_f1 + 10");
            Object result = tbMapper.invoke("upsertSelective", tbBuilder.invoke("build"),
                    Array.newInstance(new ObjectUtil(loader, packagz + ".Tb$Column#field1").getCls(), 0));
            Assert.assertEquals(result, 1);
            // ??update
            tbBuilder.invoke("incF1", 10L, tbBuilderInc.getObject());
            tbMapper.invoke("upsertSelective", tbBuilder.invoke("build"),
                    Array.newInstance(new ObjectUtil(loader, packagz + ".Tb$Column#field1").getCls(), 0));
            ResultSet rs = DBHelper.execute(sqlSession, "select * from tb where id = 10");
            rs.first();
            Assert.assertEquals(rs.getInt("inc_f1"), 20);
        }
    });

    // upsertByExampleSelective ?
    tool.generate(new IBeforeCallback() {
        @Override
        public void run() throws Exception {
            DBHelper.resetDB("scripts/IncrementsPlugin/init.sql");
        }
    }, new AbstractShellCallback() {
        @Override
        public void reloadProject(SqlSession sqlSession, ClassLoader loader, String packagz) throws Exception {
            // 1. updateByExampleSelective
            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("andField1EqualTo", "ts123");

            ObjectUtil tbBuilder = new ObjectUtil(loader, packagz + ".Tb$Builder");
            ObjectUtil tbBuilderInc = new ObjectUtil(loader, packagz + ".Tb$Builder$Inc#INC");
            tbBuilder.invoke("id", 11L);
            tbBuilder.invoke("field1", "ts123");
            tbBuilder.invoke("incF1", 100L, tbBuilderInc.getObject());

            // sql
            // ?
            String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "upsertByExampleSelective",
                    tbBuilder.invoke("build"), tbExample.getObject());
            Assert.assertEquals(sql,
                    "update tb set id = 11, field1 = 'ts123', inc_f1 = inc_f1 + 100 WHERE ( field1 = 'ts123' ) ; insert into tb ( id, field1, inc_f1 ) select 11, 'ts123', 100 from dual where not exists ( select 1 from tb WHERE ( field1 = 'ts123' ) )");
            // 
            Object result = tbMapper.invoke("upsertByExampleSelective", tbBuilder.invoke("build"),
                    tbExample.getObject(),
                    Array.newInstance(new ObjectUtil(loader, packagz + ".Tb$Column#field1").getCls(), 0));
            Assert.assertEquals(result, 0);
            ResultSet rs = DBHelper.execute(sqlSession.getConnection(), "select inc_f1 from tb where id = 11");
            rs.first();
            Assert.assertEquals(rs.getInt("inc_f1"), 100);

            ObjectUtil tbBuilderDec = new ObjectUtil(loader, packagz + ".Tb$Builder$Inc#INC");
            tbBuilder.invoke("incF1", 50L, tbBuilderDec.getObject());
            result = tbMapper.invoke("upsertByExampleSelective", tbBuilder.invoke("build"),
                    tbExample.getObject(),
                    Array.newInstance(new ObjectUtil(loader, packagz + ".Tb$Column#field1").getCls(), 0));
            Assert.assertEquals(result, 1);
            // ?
            rs = DBHelper.execute(sqlSession.getConnection(), "select inc_f1 from tb where id = 11");
            rs.first();
            Assert.assertEquals(rs.getInt("inc_f1"), 150);
        }
    });

    // upsertSelective 
    tool.generate(new IBeforeCallback() {
        @Override
        public void run() throws Exception {
            DBHelper.resetDB("scripts/IncrementsPlugin/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 tbBuilder = new ObjectUtil(loader, packagz + ".Tb$Builder");
            ObjectUtil tbBuilderInc = new ObjectUtil(loader, packagz + ".Tb$Builder$Inc#INC");
            tbBuilder.invoke("id", 20L);
            tbBuilder.invoke("field1", "ts1");
            tbBuilder.invoke("incF1", 20L, tbBuilderInc.getObject());

            ObjectUtil TbColumnId = new ObjectUtil(loader, packagz + ".Tb$Column#id");
            ObjectUtil TbColumnField1 = new ObjectUtil(loader, packagz + ".Tb$Column#field1");
            ObjectUtil TbColumnIncF1 = new ObjectUtil(loader, packagz + ".Tb$Column#incF1");
            ObjectUtil TbColumnIncF2 = new ObjectUtil(loader, packagz + ".Tb$Column#incF2");
            Object columns = Array.newInstance(TbColumnField1.getCls(), 4);
            Array.set(columns, 0, TbColumnId.getObject());
            Array.set(columns, 1, TbColumnField1.getObject());
            Array.set(columns, 2, TbColumnIncF1.getObject());
            Array.set(columns, 3, TbColumnIncF2.getObject());

            // sql
            String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "upsertSelective",
                    tbBuilder.invoke("build"), columns);
            Assert.assertEquals(sql,
                    "insert into tb ( id , field1 , inc_f1 , inc_f2 ) values ( 20 , 'ts1' , 20 , null ) on duplicate key update id = 20 , field1 = 'ts1' , inc_f1 = inc_f1 + 20 , inc_f2 = null");
            Object result = tbMapper.invoke("upsertSelective", tbBuilder.invoke("build"), columns);
            Assert.assertEquals(result, 1);
            // ??update
            tbBuilder.invoke("incF1", 20L, tbBuilderInc.getObject());
            result = tbMapper.invoke("upsertSelective", tbBuilder.invoke("build"), columns);
            Assert.assertEquals(result, 2);
            ResultSet rs = DBHelper.execute(sqlSession, "select * from tb where id = 20");
            rs.first();
            Assert.assertEquals(rs.getInt("inc_f1"), 40);
        }
    });

    // upsertByExampleSelective 
    tool.generate(new IBeforeCallback() {
        @Override
        public void run() throws Exception {
            DBHelper.resetDB("scripts/IncrementsPlugin/init.sql");
        }
    }, new AbstractShellCallback() {
        @Override
        public void reloadProject(SqlSession sqlSession, ClassLoader loader, String packagz) throws Exception {
            // 1. updateByExampleSelective
            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("andField1EqualTo", "ts123");

            ObjectUtil tbBuilder = new ObjectUtil(loader, packagz + ".Tb$Builder");
            ObjectUtil tbBuilderInc = new ObjectUtil(loader, packagz + ".Tb$Builder$Inc#DEC");
            tbBuilder.invoke("id", 11L);
            tbBuilder.invoke("field1", "ts123");
            tbBuilder.invoke("incF1", 100L, tbBuilderInc.getObject());

            ObjectUtil TbColumnId = new ObjectUtil(loader, packagz + ".Tb$Column#id");
            ObjectUtil TbColumnField1 = new ObjectUtil(loader, packagz + ".Tb$Column#field1");
            ObjectUtil TbColumnIncF1 = new ObjectUtil(loader, packagz + ".Tb$Column#incF1");
            ObjectUtil TbColumnIncF2 = new ObjectUtil(loader, packagz + ".Tb$Column#incF2");
            Object columns = Array.newInstance(TbColumnField1.getCls(), 4);
            Array.set(columns, 0, TbColumnId.getObject());
            Array.set(columns, 1, TbColumnField1.getObject());
            Array.set(columns, 2, TbColumnIncF1.getObject());
            Array.set(columns, 3, TbColumnIncF2.getObject());

            // sql
            // ?
            String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "upsertByExampleSelective",
                    tbBuilder.invoke("build"), tbExample.getObject(), columns);
            Assert.assertEquals(sql,
                    "update tb set id = 11 , field1 = 'ts123' , inc_f1 = inc_f1 - 100 , inc_f2 = null WHERE ( field1 = 'ts123' ) ; insert into tb ( id , field1 , inc_f1 , inc_f2 ) select 11 , 'ts123' , 100 , null from dual where not exists ( select 1 from tb WHERE ( field1 = 'ts123' ) )");
            // 
            Object result = tbMapper.invoke("upsertByExampleSelective", tbBuilder.invoke("build"),
                    tbExample.getObject(), columns);
            Assert.assertEquals(result, 0);
            ResultSet rs = DBHelper.execute(sqlSession.getConnection(), "select inc_f1 from tb where id = 11");
            rs.first();
            Assert.assertEquals(rs.getInt("inc_f1"), 100);

            ObjectUtil tbBuilderDec = new ObjectUtil(loader, packagz + ".Tb$Builder$Inc#DEC");
            tbBuilder.invoke("incF1", 50L, tbBuilderDec.getObject());
            result = tbMapper.invoke("upsertByExampleSelective", tbBuilder.invoke("build"),
                    tbExample.getObject(), columns);
            Assert.assertEquals(result, 1);
            // ?
            rs = DBHelper.execute(sqlSession.getConnection(), "select inc_f1 from tb where id = 11");
            rs.first();
            Assert.assertEquals(rs.getInt("inc_f1"), 50);
        }
    });
}

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

License:Apache License

/**
 *  logicalDeleteByExample//from  www .j a va 2 s  .  co  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//from  ww w  .  j  ava2  s.  co m
 */
@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.OptimisticLockerPluginTest.java

License:Apache License

/**
 *  deleteWithVersionByExample//from  w  ww .jav a2  s  . 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  w w. jav  a2 s .  com*/
 */
@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);
        }
    });
}