# baseDao **Repository Path**: kiryu1223/baseDao ## Basic Information - **Project Name**: baseDao - **Description**: java lambda to static expressionTree to SQL 像写代码一样与数据库交互! - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 12 - **Forks**: 1 - **Created**: 2023-10-13 - **Last Updated**: 2025-09-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # baseDao java lambda to static expressionTree to SQL 基于java lambda表达式的orm框架,现仅支持mysql 需要jdk8 欢迎使用,点star,issue,谢谢喵 # maven ```xml io.github.kiryu1223 baseDao 1.0.10 ``` # how to start 1.添加maven依赖,并且在共享构建过程VM选项中添加 >-Djps.track.ap.dependencies=false 2.添加配置类 ```java @Configuration public class baseDaoConfig { @Bean public BaseDao baseDao(DataSource dataSource) { return new BaseDao(dataSource, DataBase.Type.Mysql); } } ``` 3.使用idea连接数据库并右键生成持久化映射 4.~~为你需要使用类添加`@Resolve`或`@Dao`注解~~ 不再需要 ```java @SpringBootTest class HelloDockerApplicationTests { @Autowired BaseDao bd; @Test void contextLoads() { bd.query(BookInfo.class) .where(a -> 1 == 1) .select(a -> a) .toListAndThen(r -> System.out.println(r)); //Sql: select a.* from `book_info` as a where ? = ? //values: [1, 1] } } ``` 5.项目 启动! ## 查询(query) >query中的sql拼接顺序为链式调用的顺序,以select为结尾,比如 ```java baseDao.query(user.class) .leftJoin(book.class).on((a,b) -> a.getId == b.getId) .where((a,b) -> a.getCode == 1669) .orderBy((a,b) -> b.getId) .take(50) .select((a,b)-> (MyType) new MyType(){{ setCode(a.getCode); setName(b.getName); }}); ``` >会变成 ```sql select a.code,b.name from user as a left join book as b on a.id = b.id where a.code = 1669 order by b.id limit 50 ``` ----- 1.`query` **返回查询pojo类所对应的表的行为,基本上等同于mybatis返回一个sqlsession** ```java baseDao.query(user.class); ``` 等同于 ``` sql select a.* from user as a ``` ----- 2.`select` **设置select选择的数据库字段与java返回类型,可以选择三种返回方式** - 直接返回查询的pojo类 ```java baseDao.query(user.class).select(a->a); ``` 等同于 ``` sql select a.* from user as a ``` - ~~返回单个数据库字段~~ 暂时不再支持 ```java ``` 等同于 ``` sql ``` - 返回自己定义的新对象 ```java baseDao.query(user.class) .select(a-> (MyType) new MyType(){{ setId(a.getId); setName(a.getName); }}); ``` 等同于 ```java select a.id,a.name from user as a ``` ----- 3.`where` **查询条件,可以与数据库相关也可以无关(理论上什么都可以写)** ```java baseDao.query(user.class) .where(a->a.getName().contains("kiryu")); ``` 等同于 ```sql select a.* from user as a where a.id like "%kiryu%" ``` ----- 4.`innerJoin`,`leftJoin`,`rightJoin`,`fullJoin` **选择连表** ```java baseDao.query(user.class) .leftJoin(book.class) .select((a,b)->b); ``` 等同于 ```sql select b.* from user as a left join book as b ``` ----- 5.`on` **连表时的on条件** ```java baseDao.query(user.class) .leftJoin(book.class).on((a,b) -> a.getId == b.getId) .select((a,b)->b); ``` 等同于 ```sql select b.* from user as a left join book as b on a.id = b.id ``` ----- 6.`orderBy`,`descOrderBy` **根据选择的字段在数据库排序** ```java baseDao.query(user.class) .orderBy(a->a.getid()); ``` 等同于 ```sql select a.* from user as a order by a.id ``` ----- 7.`take`,`skip` **获取xx跳过xx,等同于mysql中的limit和offset** ```java baseDao.query(user.class) .take(3) .skip(1); ``` 等同于 ```sql select a.* from user as a limit 3 offset 1 ``` ----- 9.`toList` **返回List结果集** >默认为ArrayList ```java List res = baseDao.query(User.class).toList(); //单表情况下可以在无select的情况下直接toList,此时会返回查询的pojo类的集合 List res = baseDao.query(User.class).select(a->a).toList(); //select a.* from user as a List res = baseDao.query(User.class).select(a->a.getId).toList(); //select a.id from user as a List res = baseDao.query(User.class) .where(a -> a.getId == 5) .select(a -> (MyType) new MyType(){{ setId(a.getId); setName(a.getName); }}) .toList(); //select a.id,a.name from user as a where a.id = 5 ``` ----- 10.`toMap` **返回Map结果集** >默认为HashMap ```java Map res = baseDao.query(User.class).toMap(k -> k.getId()); //参数为一个表达式时,对返回的集合进行遍历获取MapKey //select a.* from user as a Map res = baseDao.query(User.class).toMap(k -> k.getId(),v -> v.getName()); //参数为两个个表达式时,对返回的集合进行遍历同时获取MapKey和MapValue //select a.* from user as a ``` ## 新增(save) 1.`save(obj)` 对一个pojo对象的除@Id注解字段外的非null字段插入数据库 2.`save(objList)` pojo对象列表的批量插入,条件同上 ## 更新(update) todo ## 删除(delete) todo