本架构参照了现有的关系型、文档型、内存型等多种数据载体,封装了一套不依赖任何具体数据库命令的纯面向对象数据操作API
本架构的最终目的为不管将来业务如何发展,数据载体的数据结构如何变化,本架构都只依照对数据的本质需求进行面向对象封装
面向对象数据操作API需要使用者自己实现相关数据载体的功能,并维护相应连接会话
本架构自身也有提供2套实现
基于全部关系型数据库JDBC驱动的实现
基于Mongodb数据库MongoDB Java Driver驱动的实现
如果需要实现面向对象数据操作API可以实现org.jtry.framework.database.nosql.DataAccess接口
public interface DataAccess<T> {
boolean init(String dbName, String tableName, Class<T> dataClass);
boolean save(T data);
boolean saveList(List<T> data);
long wipe(Condition condition);
T find();
T find(Condition condition);
List<T> findList();
List<T> findList(Condition condition);
List<T> findPage(int page, int size);
List<T> findPage(Condition condition, int page, int size);
long swop(Condition condition, T newData);
long size();
long size(Condition condition);
void lose();
}
具体实现方式可以参照本架构基于JDBC实现的类org.jtry.framework.database.nosql.JDBCDataAccessObject
面向对象数据操作API的全部功能都通过已经实现的数据访问对象进行使用
如果要获取已经实现好的数据访问对象可以使用org.jtry.framework.database.nosql.DB类的dao方法,调用方式如下
DataAccess<User> userDao = DB.dao(ClassUtil.forClass(JDBCDataAccessObject.
class), User.class, "erp", "Users");
以上方法传入一个API实现类class与业务定义的javabean的class和数据载体标识与数据载体容器标识
如果数据载体为关系型数据库,那么对应的数据载体标识就是数据源配置的数据库标识,数据载体容器标识就是表名。
如果数据载体为Mongodb,那么对应的数据载体标识就是Mongodb中的数据库名,数据载体容器标识就是集合名。
DataAccess<User> userDao = DB.dao(User.
class, "erp", "Users");
以上方法传入一个业务定义的javabean的class和数据载体标识与数据载体容器标识
API实现将使用全局配置的默认实现类,可以在配置管理工具中 框架配置-系统配置-默认配置 中更改
DataAccess<User> userDao = DB.dao(User.
class, "erp");
以上方法传入一个业务定义的javabean的class和数据载体标识
数据载体容器标识将会使用传入的javabean的class中定义的@Table注解的值
@Table("Users")
public class User {
如果没有使用@Table注解,那么将会使用类名除首字母之外凡大写字母前加“_”的形式作为数据载体容器标识
DataAccess<User> userDao = DB.dao(User.
class);
以上方法传入一个业务定义的javabean的class
数据载体标识将使用全局配置的默认数据载体标识名,可以在配置管理工具中 框架配置-系统配置-默认配置 中更改
如果业务定义的javabean继承了org.jtry.framework.common.entity.AbstractEntity类的话可以直接使用如下方式获取数据访问对象
User user = new User();
DataAccess<User> userDao = user.dao();
要使用数据访问对象操纵数据载体的数据可以使用API定义的如下方法
如果需要获取数据载体容器中的第一个数据可以调用find方法
DataAccess<User> userDao = DB.dao(User.
class);
User user = userDao.find();
如果需要根据条件获取数据载体容器中的某一个数据可以调用find方法的带条件参数重载
DataAccess<User> userDao = DB.dao(User.
class);
User user = userDao.find(Condition.init().is(
"name", "test"));
条件对象org.jtry.framework.database.nosql.Condition为根据获取数据的方式封装的专有对象
该对象对应判断的方式封装了如下的方法
is 根据传入的属性名,在数据载体容器中查找是否有等于传入的值的具体数据
notIs根据传入的属性名,在数据载体容器中查找是否有不等于传入的值的具体数据
gt根据传入的属性名,在数据载体容器中查找是否有大于传入的值的具体数据
gte根据传入的属性名,在数据载体容器中查找是否有大于并等于传入的值的具体数据
lt 根据传入的属性名,在数据载体容器中查找是否有小于并等于传入的值的具体数据
lte 根据传入的属性名,在数据载体容器中查找是否有小于并等于传入的值的具体数据
like根据传入的属性名,在数据载体容器中查找是否有匹配传入的正则表达式的具体数据
in 根据传入的属性名,在数据载体容器中查找是否有等于传入的多个值的具体数据
notIn 根据传入的属性名,在数据载体容器中查找是否有不等于传入的多个值的具体数据
or根据传入的条件对象,建立与这个对象包含判断条件的或者关系
not 根据传入的条件对象,建立与这个对象包含判断条件的不等关系
该对象只能使用该类的init方法实例化。
如果需要建立一条表达式为name等于Test并且age等于26的条件可以如下声明
Condition condition = Condition.init().is(
"name", "Test").is("age", 26);
也可以这样声明
User user = new User();
user.setName("Test");
user.setAge(26);
Condition condition = Condition.init().is(
user);
以上为对条件对象使用的讲解,
如果需要获取数据载体容器中的全部数据可以调用findList方法
DataAccess<User> userDao = DB.dao(User.
class);
List<User> userList = userDao.findList();
如果需要根据条件获取数据载体容器中的一些数据可以调用findList方法的带条件参数重载
DataAccess<User> userDao = DB.dao(User.
class);
List<User> userList = userDao.findList(Condition.init().like(
"name", "%刘"));
如果需要以分页的形式获取数据载体容器中的数据可以调用findPage方法
DataAccess<User> userDao = DB.dao(User.
class);
List<User> userList = userDao.findPage(1, 10);
如果需要根据条件以分页的形式获取数据载体容器中的数据可以调用findPage方法的带条件参数重载
DataAccess<User> userDao = DB.dao(User.
class);
List<User> userList = userDao.findPage(Condition.init().gt(
"age", 18), 1, 10);
如果需要知道数据载体容器中全部数据条数可以使用size方法
DataAccess<User> userDao = DB.dao(User.
class);
long size = userDao.size();
如果需要知道数据载体容器中符合某种条件的数据条数可以使用size方法的带条件参数重载
DataAccess<User> userDao = DB.dao(User.
class);
long size = userDao.size(Condition.init().gt(
"age", 18));
如果需要保存一个数据到数据载体容器中可以使用save方法
DataAccess<User> userDao = DB.dao(User.
class);
User user = new User();
user.setName("Test");
user.setAge(26);
user.setPhone("13900000000");
userDao.save(user);
如果需要保存多个数据到数据载体容器中可以使用saveList方法
DataAccess<User> userDao = DB.dao(User.
class);
List<User> userList = userDao.findList();
userDao.saveList(userList);
如果需要根据条件更新数据载体容器中的某些数据为指定新数据可以使用swop方法
DataAccess<User> userDao = DB.dao(User.
class);
User user = new User();
user.setName("小孩");
userDao.swop(Condition.init().lt(
"age", 18), user);
如果需要根据条件删除数据载体容器中的某些数据可以使用wipe方法
DataAccess<User> userDao = DB.dao(User.
class);
userDao.wipe(Condition.init().is(
"name", null));
如果需要删除数据载体容器和全部数据可以使用lose方法
DataAccess<User> userDao = DB.dao(User.
class);
userDao.lose();
以上为面向对象数据操作API的全部内容,希望该API可以满足任何业务对任何数据载体的任何数据需求