# beetlsql-experimental **Repository Path**: iohao/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**: 16 - **Forks**: 8 - **Created**: 2017-04-17 - **Last Updated**: 2022-05-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README Markdown Plus exported HTML

#beetlsql-experimental

匠的追求, 极简之上. dao无注解 无实现类 无框架的强耦合

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

@Data                                        // 提供getter setter toString 等方法
@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                                       // 提供getter setter toString 等方法
@FieldDefaults(level = AccessLevel.PRIVATE) // 属性默认都是private
@Table(name = "animal")                     // 实体类与表映射
public class BeeAnimal implements $Sql { // 实现$Sql接口可以在对象上使用save,update,delete方法(不是必须的)
    int id;
    int age;
    String name;
    String description;

    /** animal_info表的字段: 分布区域 */
    String regionName;

    /**
     * 匠的追求, 极简之上.
     * 无注解 无实现类 无框架的强耦合. 直接可以使用.
     * 自定义sqlDao处理类. (如果没有自定义sql就没必要定义这个接口).
     */
    public interface Dao extends $Mapper<BeeAnimal> {
        Dao $ = mapper(Dao.class);

        List<BeeAnimal> findAnimals(int animalInfoId, int age);

        BeeAnimal findOne(String name, int animalInfoId, int age);
    }
}

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

@Log4j
public class BeeAnimalTest {
    @Test
    public void findAnimals() {
        int animalInfoId = 2;
        int age = 15;
        List<BeeAnimal> animals = BeeAnimal.Dao.$.findAnimals(animalInfoId, age);

        log.info(animals);
    }

    @Test
    public void findOne() {
        String name = "海豚";
        int animalInfoId = 2;
        int age = 9;
        BeeAnimal animal = BeeAnimal.Dao.$.findOne(name, animalInfoId, age);
        log.info(animal);
        log.info(animal.getRegionName());
    }
}

执行dir/sql目录下的sql, 就可以运行查询测试用例.

dao无注解: 在idea中配置 -parameters

image

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

image