#beetlsql-experimental
beetlsql + java8 + lombok 结合使用,达到代码最简洁效果, 并且可阅读性更强
注解 Ignore , 在使用dao接口时忽略方法, 不需要内置处理. (只有在使用增强dao才有效)
增强dao示例
- 使用动态代理结合dao层
- 推荐使用lombok结合编程, 以便代码量达到最少. 这样代码更加简洁,清晰
示例中实体类只需要实现接口,而不需要任何继承就能达到想要的效果. (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.