# dynamic-dao
**Repository Path**: haosijiahsj/dynamic-dao
## Basic Information
- **Project Name**: dynamic-dao
- **Description**: 基于jdbcTemplate开发的注解驱动orm工具包,支持spring和非spring环境使用
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2021-06-15
- **Last Updated**: 2021-08-06
## Categories & Tags
**Categories**: Uncategorized
**Tags**: ORM, JdbcTemplate
## README
# dynamic-dao
java, simple-orm, reflect
## 概述
基于jdbcTemplate实现的注解驱动的orm框架
## 配置方式
* 使用注解方式,该方式使用BeanPostProcessor处理,因此在service层使用dao时,需要使用@InjectDao或@DynamicDao进行注入
```java
@Configuration
public class DynamicDaoConfig {
@Bean
public InjectDaoBeanPostProcessor injectDaoBeanPostProcessor() {
return new InjectDaoBeanPostProcessor();
}
}
```
* 使用注解方式,该方式与sping无缝集成,service层使用dao可直接使用sping的@Autowire进行注入
```java
@Configuration
@DynamicDaoScan(value = "com.husj.dynamicdao.dao", dataSourceRef = "dataSource")
public class DynamicDaoAutowiredConfig {
private static final String DRIVER_CLASS_NAME = "com.mysql.jdbc.Driver";
@Bean
public DataSource dataSource() {
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setDriverClassName(DRIVER_CLASS_NAME);
druidDataSource.setUrl("jdbc:mysql://localhost:3306/hello-world?characterEncoding=utf-8");
druidDataSource.setUsername("root");
druidDataSource.setPassword("123456");
return druidDataSource;
}
}
```
* 使用xml方式
```java
```
* 使用方式
dao层在接口上使用注解@Save @Update @BatchUpdate @Query
service层在dao接口字段使用@DynamicDao注解
## 使用示例
1. @Save
* 使用?占位符
```java
@Save("INSERT INTO table_name(column1, column2, column3) VALUES (?, ?, ?)")
int save(int column1, int column2, String column3);
```
* 使用具名占位符
```java
@Save("INSERT INTO table_name(column1, column2, column3) VALUES (:1, :2, :3)")
int save(Map map);
@Save("INSERT INTO table_name(column1, column2, column3) VALUES (:1, :2, :3)")
int save(@Param("1") int a, @Param("2") int b, @Param("3") int c);
```
* 返回主键(默认返回成功条数)
```java
@Save(value = "INSERT INTO table_name(column1, column2, column3) VALUES (?, ?, ?)", returnKey = true)
int save(int column1, int column2, String column3);
@Save(value = "INSERT INTO table_name(column1, column2, column3) VALUES (:1, :2, :3)", returnKey = true)
int save(Map map);
```
* 实体类使用JPA注解
```java
@Save
int save(Entity entity);
```
2. @Update
* 使用?占位符
```java
@Update("UPDATE table_name SET column1 = ?, column2 = ? WHERE id = ?")
int update(String column1, String column2, int id);
```
* 使用具名占位符
```java
@Update(value = "UPDATE table_name SET column1 = :2, column2 = :3 WHERE id = :1")
int update(Map map);
```
* 实体类使用JPA注解(此方式默认使用实体类中的@id字段作为WHERE条件)
```java
@Update
int update(Entity entity);
```
3. @Query
* 返回List