# beetlsql-experimental **Repository Path**: sk2k/beetlsql-experimental ## Basic Information - **Project Name**: beetlsql-experimental - **Description**: experimental java8 + lombok + beetlsql - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 8 - **Created**: 2017-04-21 - **Last Updated**: 2022-05-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README Markdown Plus exported HTML

#beetlsql-experimental

beetlsql + java8 + lombok 结合使用,达到代码最简洁效果, 并且可阅读性更强

注解 Ignore , 在使用dao接口时忽略方法, 不需要内置处理. (只有在使用增强dao才有效)

增强dao示例

示例中实体类只需要实现接口,而不需要任何继承就能达到想要的效果. (Effective Java 第18条:接口优于抽象类)

简洁玩法 (实现$Sql, 实体类就拥有save, update, delete方法.)

@Data
@FieldDefaults(level = AccessLevel.PRIVATE)  // 属性默认都是private
@lombok.experimental.Accessors(chain = true) // 链式编程
@Table(name = "tb_bird")
public class Bee implements $Sql { // 实现$Sql接口, 可以在对象上直接使用 save, update, delete 方法 (不是必须的)

    int id;
    /** 年龄 */
    Integer age;
    /** 名字 */
    String name;
    /** 描述 */
    String description;
}

简洁玩法测试用例 使用链式编程达到代码最简洁

@Log4j
public class BeeChainTest {
    @Test
    public void testChainSave() {
        // 自动拥有getter,setter, 无需手动敲击这些代码
        new Bee().setAge(18).setName("小伙子!").save();
    }

    @Test
    public void testUpdate() {
        Bee bee = Bee.Dao.$.unique(1);
        bee.setName("迪米特").update();
    }

    @Test
    public void testDelete() {
        Bee bee = Bee.Dao.$.unique(1);
        bee.delete();
    }
}

新增一些自定义方法 (与数据库交互)

import static org.beetl.sql.experimental.iohao.core.SqlKit.mapper;

@Data
@FieldDefaults(level = AccessLevel.PRIVATE)  // 属性默认都是private
@lombok.experimental.Accessors(chain = true) // 链式编程
@Table(name = "tb_bird")                     // 实体类与表映射
public class Bee implements $Sql { // 实现$Sql接口, 可以在对象上直接使用 save, update, delete 方法 (不是必须的)
    int id;
    /** 年龄 */
    Integer age;
    /** 名字 */
    String name;
    /** 描述 */
    String description;

    // 自定义sqlDao处理类. (如果没有自定义sql就没必要定义这个接口), 无需编写dao实现类.
    public interface Dao extends $Mapper<Bee> {
        /** 约定使用$符号表示自己 (这句代码也不是必须的) */
        Dao $ = mapper(Dao.class);

        // 使用注解忽略默认的内置处理, 也可以写成下面的方式, 这里只是示例使用
        @Ignore
        default List<Integer> findIds() {
            return $().execute(new SQLReady("select id from tb_bird"), Integer.class);
        }

        // 这里无需再写接口实现类, 只需要在bee.md文件写sql
        @SqlStatement(params = "age,name,description")
        Bee findOne(int age, String name, String description);

        // 这里无需再写接口实现类, 只需要在bee.md文件写sql
        @SqlStatement(params = "age,name")
        List<Bee> finds(int age, String name);
    }
}

新增自定义方法的dao层测试用例

@Log4j
public class BeeFindTest {
    @Test
    public void findIds() {
        // 查询所有主键
        List<Integer> ids = Bee.Dao.$.findIds();
        log.info(ids);
    }

    @Test
    public void findOne() {
        Bee one = Bee.Dao.$.findOne(18, "a", "n");
        log.info(one);
    }

    @Test
    public void finds() {
        List<Bee> list = Bee.Dao.$.finds(18, "b");
        log.info(list);
    }
}

执行dir/sql目录下的sql, 可以运行查询test.

idea首次使用lombok请安装插件, 并配置

image