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.BugFixedTest.java

License:Apache License

/**
 * ?????SelectiveEnhancedPlugin?selective?
 * https://github.com/itfsw/mybatis-generator-plugin/issues/69
 * @throws Exception/*from  w ww. j av  a  2s .com*/
 */
@Test
public void issues69() throws Exception {
    for (int i = 0; i < 2; i++) {
        MyBatisGeneratorTool tool = MyBatisGeneratorTool.create("scripts/BugFixedTest/issues-69-" + i + ".xml");
        tool.generate(() -> DBHelper.createDB("scripts/BugFixedTest/issues-69.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("version", 152L);
                        tb.set("incF2", 10L);
                        tb.set("incF3", 5L);

                        // selective
                        ObjectUtil TbColumnId = new ObjectUtil(loader, packagz + ".Tb$Column#id");
                        ObjectUtil TbColumnVersion = new ObjectUtil(loader, packagz + ".Tb$Column#version");
                        ObjectUtil TbColumnIncF2 = new ObjectUtil(loader, packagz + ".Tb$Column#incF2");
                        Object columns = Array.newInstance(TbColumnId.getCls(), 3);
                        Array.set(columns, 0, TbColumnId.getObject());
                        Array.set(columns, 1, TbColumnVersion.getObject());
                        Array.set(columns, 2, TbColumnIncF2.getObject());

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

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

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

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

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

License:Apache License

/**
 * batchInsertSelective//w ww.  ja v a2s. co  m
 * https://github.com/itfsw/mybatis-generator-plugin/issues/70
 * ????? ?pommybatis?3.5.0
 * @throws Exception
 */
@Test
public void issues70() throws Exception {
    //        MyBatisGeneratorTool tool = MyBatisGeneratorTool.create("scripts/BugFixedTest/issues-70-mybatis-3-4-0.xml");
    MyBatisGeneratorTool tool = MyBatisGeneratorTool.create("scripts/BugFixedTest/issues-70-mybatis-3-5-0.xml");
    tool.generate(() -> DBHelper.createDB("scripts/BugFixedTest/issues-70.sql"), new AbstractShellCallback() {
        @Override
        public void reloadProject(SqlSession sqlSession, ClassLoader loader, String packagz) throws Exception {
            // 1. sql
            ObjectUtil tbMapper = new ObjectUtil(sqlSession.getMapper(loader.loadClass(packagz + ".TbMapper")));
            List<Object> params = new ArrayList<>();
            params.add(new ObjectUtil(loader, packagz + ".Tb").set("field1", "test").getObject());
            params.add(
                    new ObjectUtil(loader, packagz + ".Tb").set("field1", "test").set("field2", 1).getObject());

            ObjectUtil columnField1 = new ObjectUtil(loader, packagz + ".Tb$Column#field1");
            Object columns = Array.newInstance(columnField1.getCls(), 1);
            Array.set(columns, 0, columnField1.getObject());

            String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "batchInsertSelective", params,
                    columns);
            Assert.assertEquals(sql, "insert into tb ( field1 ) values ( 'test' ) , ( 'test' )");
            // 2. sql
            Object count = tbMapper.invoke("batchInsertSelective", params, columns);
            Assert.assertEquals(count, 2);

            for (int i = 0; i < params.size(); i++) {
                ObjectUtil item = new ObjectUtil(params.get(i));
                Assert.assertEquals(item.get("id"), 1L + i);
            }
        }
    });
}

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

License:Apache License

/**
 * upsertSelective/*from www.  ja  v  a2s. co m*/
 * https://github.com/itfsw/mybatis-generator-plugin/issues/76
 * @throws Exception
 */
@Test
public void issues76() throws Exception {
    MyBatisGeneratorTool tool = MyBatisGeneratorTool.create("scripts/BugFixedTest/issues-76.xml");
    tool.generate(() -> DBHelper.createDB("scripts/BugFixedTest/issues-76.sql"), new AbstractShellCallback() {
        @Override
        public void reloadProject(SqlSession sqlSession, ClassLoader loader, String packagz) throws Exception {
            // 1. 
            ObjectUtil tbMapper = new ObjectUtil(sqlSession.getMapper(loader.loadClass(packagz + ".TbMapper")));

            ObjectUtil tb = new ObjectUtil(loader, packagz + ".Tb");
            tb.set("field1", "ts1");

            // sql
            String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "upsertSelective", tb.getObject());
            Assert.assertEquals(sql,
                    "insert into tb ( field1 ) values ( 'ts1' ) on duplicate key update field1 = 'ts1'");
            Object result = tbMapper.invoke("upsertSelective", tb.getObject());
            Assert.assertEquals(result, 1);
            Assert.assertEquals(tb.get("id"), 1L);
        }
    });
}

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

License:Apache License

/**
 * ?batchUpsert/*  w w  w  . j a  va  2  s.  c  om*/
 * https://github.com/itfsw/mybatis-generator-plugin/issues/77
 * @throws Exception
 */
@Test
public void issues77() throws Exception {
    MyBatisGeneratorTool tool = MyBatisGeneratorTool.create("scripts/BugFixedTest/issues-77.xml");
    tool.generate(() -> DBHelper.createDB("scripts/BugFixedTest/issues-77.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")));
            List<Object> params = new ArrayList<>();
            params.add(new ObjectUtil(loader, packagz + ".Tb").set("id", 1L).set("field1", "ts1").getObject());
            params.add(
                    new ObjectUtil(loader, packagz + ".Tb").set("field1", "ts2").set("field2", 1).getObject());

            String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "batchUpsert", params);
            Assert.assertEquals(sql,
                    "insert into tb (id, field1, field2) values (1, 'ts1', null ) , (null, 'ts2', 1 ) on duplicate key update id = values(id), field1 = values(field1), field2 = values(field2)");
            // 2. sql
            Object count = tbMapper.invoke("batchUpsert", params);
            Assert.assertEquals(count, 3);

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

            rs = DBHelper.execute(sqlSession, "select * from tb where id = 4");
            rs.first();
            Assert.assertEquals(rs.getString("field1"), "ts2");
        }
    });
}

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

License:Apache License

/**
 * selectByExampleSelective//from   www .  j  ava2  s.c  o  m
 */
@Test
public void issues92() throws Exception {
    MyBatisGeneratorTool tool = MyBatisGeneratorTool.create("scripts/BugFixedTest/issues-92.xml");
    tool.generate(() -> DBHelper.createDB("scripts/BugFixedTest/issues-92.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")));

            // selective
            ObjectUtil tbColumnId = new ObjectUtil(loader, packagz + ".Tb$Column#id");
            ObjectUtil tbColumnMyName = new ObjectUtil(loader, packagz + ".Tb$Column#myName");
            Object columns = Array.newInstance(tbColumnId.getCls(), 2);
            Array.set(columns, 0, tbColumnId.getObject());
            Array.set(columns, 1, tbColumnMyName.getObject());

            String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "selectByExampleSelective", null,
                    columns);
            Assert.assertEquals(sql, "select id , my_name from tb");
            // 2. sql
            List<Object> list = (List<Object>) tbMapper.invoke("selectByExampleSelective", null, columns);
            Assert.assertTrue(new ObjectUtil(list.get(0)).get("myName") != null);
        }
    });
}

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

License:Apache License

/**
 * ?example/*from   www  .j  a  va  2  s. co m*/
 */
@Test
public void testExample() throws Exception {
    MyBatisGeneratorTool tool = MyBatisGeneratorTool
            .create("scripts/ExampleEnhancedPlugin/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 tbExampleCriteria = new ObjectUtil(tbExample.invoke("createCriteria"));

            // example
            String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "selectByExample",
                    tbExampleCriteria.invoke("example"));
            Assert.assertEquals(sql, "select id, field1 from tb");
        }
    });
}

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

License:Apache License

/**
 * ?orderBy//from   w w w . j a  va  2s.  c  om
 */
@Test
public void testOrderBy() throws Exception {
    MyBatisGeneratorTool tool = MyBatisGeneratorTool
            .create("scripts/ExampleEnhancedPlugin/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");
            Object order = Array.newInstance(String.class, 2);
            Array.set(order, 0, "id desc");
            Array.set(order, 1, "field1 asc");
            tbExample.invoke("orderBy", order); // ???order by

            String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "selectByExample",
                    tbExample.getObject());
            Assert.assertEquals(sql, "select id, field1 from tb order by id desc , field1 asc");
        }
    });
}

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

License:Apache License

/**
 * andIf/*from   w w w .j  a va  2 s. c om*/
 */
@Test
public void testAndIf() throws Exception {
    MyBatisGeneratorTool tool = MyBatisGeneratorTool
            .create("scripts/ExampleEnhancedPlugin/mybatis-generator.xml");
    tool.generate(new AbstractShellCallback() {
        @Override
        public void reloadProject(SqlSession sqlSession, ClassLoader loader, String packagz) {
            try {
                ObjectUtil tbMapper = new ObjectUtil(
                        sqlSession.getMapper(loader.loadClass(packagz + ".TbMapper")));

                // 1. andIf true
                ObjectUtil tbExample = new ObjectUtil(loader, packagz + ".TbExample");
                ObjectUtil tbExampleCriteria = new ObjectUtil(tbExample.invoke("createCriteria"));

                // ??
                Object criteriaAdd = Proxy.newProxyInstance(loader,
                        new Class[] { loader.loadClass(packagz + ".TbExample$Criteria$ICriteriaAdd") },
                        new TestInvocationHandler());
                Method method = tbExampleCriteria.getMethods("andIf").get(0);
                method.invoke(tbExampleCriteria.getObject(), true, criteriaAdd);

                String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "selectByExample",
                        tbExample.getObject());
                Assert.assertEquals(sql, "select id, field1 from tb WHERE ( id = '5' )");

                // 2. andIf false
                ObjectUtil tbExample1 = new ObjectUtil(loader, packagz + ".TbExample");
                ObjectUtil tbExampleCriteria1 = new ObjectUtil(tbExample1.invoke("createCriteria"));

                method = tbExampleCriteria1.getMethods("andIf").get(0);
                method.invoke(tbExampleCriteria1.getObject(), false, criteriaAdd);

                sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "selectByExample",
                        tbExample1.getObject());
                Assert.assertEquals(sql, "select id, field1 from tb");
            } catch (Exception e) {
                e.printStackTrace();
                Assert.assertTrue(false);
            }
        }
    });
}

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

License:Apache License

/**
 * ?sql/*www. j  ava2 s  .  c  om*/
 */
@Test
public void testSqlAndExecute() throws Exception {
    MyBatisGeneratorTool tool = MyBatisGeneratorTool.create("scripts/IncrementPlugin/mybatis-generator.xml");
    tool.generate(() -> DBHelper.createDB("scripts/IncrementPlugin/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 tb = new ObjectUtil(loader, packagz + ".Tb");
            ObjectUtil tbColumnIncF1 = new ObjectUtil(loader, packagz + ".Tb$Column#incF1");
            Object tbR = tb.invoke("increment", tbColumnIncF1.invoke("inc", 100L));

            Assert.assertEquals(tb.getObject().getClass(), tbR.getClass());

            // sql
            String sql = SqlHelper.getFormatMapperSql(tbMapper.getObject(), "updateByExample", tb.getObject(),
                    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", tb.getObject(),
                    tbExample.getObject());
            Assert.assertEquals(sql, "update tb SET inc_f1 = inc_f1 + 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 inc_f1 from tb where id = 3");
            rs.first();
            Assert.assertEquals(rs.getInt("inc_f1"), 103);

            // inc_f1 ??50
            tb.invoke("increment", tbColumnIncF1.invoke("dec", 50L));
            result = tbMapper.invoke("updateByExampleSelective", tb.getObject(), 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 tbKeysColumnIncF1 = new ObjectUtil(loader, packagz + ".TbKeys$Column#incF1");
            ObjectUtil tbKeysColumnIncF3 = new ObjectUtil(loader, packagz + ".TbKeys$Column#incF3");

            ObjectUtil tbKeys = new ObjectUtil(loader, packagz + ".TbKeys");
            tbKeys.set("key1", 1l);
            tbKeys.set("key2", "k1");
            tbKeys.invoke("increment", tbKeysColumnIncF1.invoke("inc", 10L));
            tbKeys.invoke("increment", tbKeysColumnIncF3.invoke("inc", 30L));

            // sql
            sql = SqlHelper.getFormatMapperSql(tbKeysMapper.getObject(), "updateByPrimaryKey",
                    tbKeys.getObject());
            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",
                    tbKeys.getObject());
            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", tbKeys.getObject());
            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 tbBlobsWithBLOBs = new ObjectUtil(loader, packagz + ".TbBlobsWithBLOBs");
            ObjectUtil tbBlobsWithBLOBsIncF1 = new ObjectUtil(loader,
                    packagz + ".TbBlobsWithBLOBs$Column#incF1");
            tbBlobsWithBLOBs.invoke("increment", tbBlobsWithBLOBsIncF1.invoke("inc", 100L));

            tbBlobsWithBLOBs.set("incF2", 50L);
            tbBlobsWithBLOBs.set("field3", "blob");

            // sql
            sql = SqlHelper.getFormatMapperSql(tbBlobsMapper.getObject(), "updateByExampleWithBLOBs",
                    tbBlobsWithBLOBs.getObject(), 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' )");

            tbBlobsWithBLOBs.set("id", 3l);
            sql = SqlHelper.getFormatMapperSql(tbBlobsMapper.getObject(), "updateByPrimaryKeyWithBLOBs",
                    tbBlobsWithBLOBs.getObject());
            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");

            // 
            tbBlobsWithBLOBs.set("incF3", 10l);
            // ??
            sql = SqlHelper.getFormatMapperSql(tbBlobsMapper.getObject(), "updateByPrimaryKeyWithBLOBs",
                    tbBlobsWithBLOBs.getObject());
            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", tbBlobsWithBLOBs.getObject());
            Assert.assertEquals(result, 1);
        }
    });
}

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

License:Apache License

/**
 * ? SelectiveEnhancedPlugin ?/*from   w w  w  .  j  av  a  2 s .  co  m*/
 */
@Test
public void testWithSelectiveEnhancedPlugin() throws Exception {
    MyBatisGeneratorTool tool = MyBatisGeneratorTool
            .create("scripts/IncrementPlugin/mybatis-generator-with-selective-enhanced-plugin.xml");
    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("andIdEqualTo", 3l);

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

            tb.invoke("increment", tbColumnIncF1.invoke("inc", 100L));
            tb.set("incF2", 200l);

            // selective
            ObjectUtil TbColumnField1 = new ObjectUtil(loader, packagz + ".Tb$Column#field1");
            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",
                    tb.getObject(), 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", tb.getObject(),
                    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", tb.getObject(), 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
            tb.invoke("increment", tbColumnIncF1.invoke("dec", 50L));
            result = tbMapper.invoke("updateByExampleSelective", tb.getObject(), 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 tbKeys = new ObjectUtil(loader, packagz + ".TbKeys");
            ObjectUtil tbKeysColumnIncF1 = new ObjectUtil(loader, packagz + ".TbKeys$Column#incF1");
            ObjectUtil tbKeysColumnIncF3 = new ObjectUtil(loader, packagz + ".TbKeys$Column#incF3");
            tbKeys.set("key1", 1l);
            tbKeys.set("key2", "k1");
            tbKeys.invoke("increment", tbKeysColumnIncF1.invoke("inc", 10L));
            tbKeys.invoke("increment", tbKeysColumnIncF3.invoke("inc", 30L));

            // 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",
                    tbKeys.getObject());
            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",
                    tbKeys.getObject(), 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", tbKeys.getObject(), 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);
        }
    });
}