Cedar Data 数据持久层框架

旧文档请移至README_old.md

Maven

<dependency>
  <groupId>com.github.cedar12</groupId>
  <artifactId>cedar-data</artifactId>
  <version>1.3.2</version>
</dependency>

Gradle

compile group: 'com.github.cedar12', name: 'cedar-data', version: '1.3.2'

特点

  1. 体积小
  2. 无第三方依赖
  3. 简单易使用
  4. 灵活
  5. sqljava代码分离
  6. 支持动态sql
  7. 字段映射
  8. 只需定义interface无需实现

SQL配置文件

语法格式

变量

使用def关键字定义一个常量名table值为test的变量如下:

def table=test;

如值的前后需要空格可用””

def table="  test  ";

注:只能写在一行并已;结束

取值

定义queryTableTest并使用常量table,使用#{}表达式取变量table的值如下:

def queryTableTest=select * from #{table};

sql体

定义一个id为query的sql体,返回结果为List<Map<String,Object>如下:

query:{
    select * from test
};

返回结果为List<实体类>如下:

query 实体类全路径:{
    select * from test
};

insert语句返回自增长id(需数据库支持),使用key如下:

add key:{
    insert into test values(null,now())
};

注:必需以;结束

动态sql

/*
#if 条件:
 条件真 
#end

#if 条件:
 条件真 
#else 
 条件假 
#end

#if 条件1:
 条件1真 
#elif 条件2:
 条件2真
#else
 条件1、条件2都为假
#end
*/
query:{
    select * from test 
    #if $id!=null:
        where
    #end
    #if ?id!=null:
        id=$id
    end
};

导入其它配置

可导入其它配置文件非private修饰的常量定义、sql体以及import配置。使用import关键字如下

import a;

以下常量和sql体不可被导入

private def table=test;
private query:{
    select * from test
};

注释

上手例子

新建实体类如下

package test.cat;

public class Cat{
    private Integer id;
    private String name;
    public Cat() {}
    public Cat(Integer id, String name) {
    	this.id = id;
    	this.name = name;
    }
    //getter setter setter不写会直接注入到字段,优先注入setter
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "Cat [id=" + id + ", name=" + name + "]";
    }
    
}

新建Dao接口如下

/*
cd 指定配置文件位置,从classpath目录开始
*/
package test.cat;

import java.util.List;

import cn.cedar.data.annotation.CedarData;
import cn.cedar.data.annotation.Param;

@CedarData(cd="CatDao")
public interface CatDao{
    
    List<Cat> findAll();
    
    Cat findById(@Param("id")Integer id);
    
    int add(@Param("cat")Cat cat);
    
    boolean modify(@Param("cat")Cat cat);
    
}

新建配置CatDao.cd如下


def cat_class="test.cat.Cat";

findAll #{cat_class}:{
    select *  from cat
};
/* 
$id 名称取参数值 取CatDao findById方法的参数值 id对应@Param()内参数
*/
findById #{cat_class}:{
    select * from cat where id=$id
};
/* 
?1 占位取参数值 取CatDao add方法的参数值 1对应方法第一个参数
*/
add key:{
    insert into cat values( ?1.id , $cat.name )
};

modify:{
	update cat set name=$cat.name where id=?1.id
};

新建Test如下

package test.cat;

import java.util.List;

import org.junit.Test;

import com.alibaba.druid.pool.DruidDataSource;

import cn.cedar.data.InstanceFactory;
import cn.cedar.data.JdbcManager;

public class CatTest {
	// 获取实现类
	private static CatDao catDao = InstanceFactory.getInstance(CatDao.class);
	@Test
	public void test() {
        // 设置数据源, 这里以使用druid数据源连接mysql为例
        DruidDataSource druidDataSource=new DruidDataSource();
        druidDataSource.setUrl("jdbc:mysql://127.0.0.1:3306/test");
        druidDataSource.setUsername("用户");
        druidDataSource.setPassword("密码");
        druidDataSource.setDriverClassName("com.mysql.jdbc.Driver");
        JdbcManager.setDataSource(druidDataSource);
        
        // 新增数据
        Cat garfield=new Cat();
        garfield.setId(null);
        garfield.setName("加菲猫5");
        int id=catDao.add(garfield);
        System.out.println(id);
        
        // 修改刚新增的数据
        garfield.setId(99);
        garfield.setName("我是被修改了");
        boolean result=catDao.modify(garfield);
        System.out.println(result);

        // 调用dao接口获取全部数据
        List<Cat> cats=catDao.findAll();
        System.out.println(cats);

        // 查询指定id的数据
        Cat cat=catDao.findById(1);
        System.out.println(cat);

	}
}

上手例子结束

让配置文件有颜色和提示

安装方法

cedar-data-file-syntax-highlight-for-eclipse_1.0.0.jar文件复制到eclipse根目录/plugins/目录下,重启eclipse即可

image