#beetlsql-experimental
匠的追求, 极简之上. dao无注解 无实现类 无框架的强耦合
-
beetlsql + java8 + lombok结合使用,达到代码最简洁效果, 并且可阅读性更强
-
Effective Java 第18条:接口优于抽象类
简洁玩法 (实现$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, 就可以运行查询测试用例.