DbUtil
入门
代码生成器
使用DBBaseModel
CRUD数据操作
getOne
var code = "0220"
Person person = Person.getOne($" code = '{code}'");
public static T getOne(String whereSql)
- whereSql 不能为空,为空会抛出ArgumentNullException提示筛选条件为空
- 如果查询到多条数据会抛出 Exception提示查询到多条数据
getList
var name = "张三"
List<Person> persons = Person.getList($" name like '%{name}%'");
public static List<T> getList(String whereSql = "")
- 默认查询集合为空的话,返回空数组。
getListPage
var name = "张三"
List<Person> persons = Person.getListPage($" name like '%{name}%'");
public static List<T> getListPage(String whereSql, int pageSize = 10, int PageNo = 1)
- 默认查询集合为空的话,返回空数组。
- 默认查询前10条
getById
Person persons = Person.getById("13");
或
var person = new Person();
person.id = 13
Person personSearch = Person.getById(person);
public static T getById(String id)
public static T getById(DBBaseModel<T> obj)
- 如果不存在此id返回对象的默认值 null
getById(DBBaseModel<T> obj)
如果不存在此对象设置的主键[TableId]
筛选值返回空对象,可以应用于复合主键实体。
getOneByProperty
Person persons = Person.getOneByProperty(q=>q.id,"13");
public static T getOneByProperty(Expression<Func<T, object>> expression, String val)
- 使用表达式树构建查询方法,表达式声明筛选字段
- 默认追加 limit 1
- 如果不存在此字段筛选值返回对象的默认值 null,
getListByProperty
List<Person> persons = Person.getListByProperty(q=>q.sex,"女");
public static List<T> getListByProperty(Expression<Func<T, object>> expression, String val)
- 使用表达式树构建查询方法,表达式声明筛选字段
- 如果不存在此字段筛选值返回空集合,
insert
var person = new Person();
person.id = 13
Person.insert(person);
或
person.insert();
public static int insert(DBBaseModel<T> t, bool isParam = false)
public int insert(bool isParam = false)
- 数据库插值方法,默认根据设置的字段元注解 [TableField(“数据库字段名称”, “字段备注”)]生成数据库insert 语句。 如果字段没有设置元注解 则使用字段名称作为数据库字段名称
- 注意: 使用 [TableIgnore] 标注的字段,和 [TableId] 标注的字段则会生成语句时忽略掉。
- isParam 属性默认为false 指生成insert时不使用参数化 插值,true 则为使用参数化插值。是为了解决存在特殊字符时mysql 语法报错。
- 插值成功后返回当前主键值 ,实体类主键值会被赋值。
updateById
var person = new Person();
person.id = 13
person.name= "张三";
Person.updateById(person);
或
person.updateById();
public static int updateById(DBBaseModel<T> t, bool isParam = false)
public int updateById(bool isParam = false)
- 更新数据方法,根据标注的[TableField(“数据库字段名称”, “字段备注”)]生成数据库update 语句。 如果字段没有设置元注解 则使用字段名称作为数据库字段名称
- 注意: 使用 [TableIgnore] 标注的字段则会生成语句时忽略掉。有 [TableId] 标注的字段则会生成判定条件
- isParam 是否参数化插值
insertOrUpdate
var person = new Person();
person.name= "张三";
Person.insertOrUpdate(person);
或
person.insertOrUpdate();
public static int insertOrUpdate(DBBaseModel<T> t, bool isParam = false)
public int insertOrUpdate(bool isParam = false)
- 更新或修改数据方法,根据 标注的[TableId]字段 查询数据库是否存在此条数据,来判断调用insert 或者 updatebyId 方法,新增会附加插入的id值
- 注意: 使用 [TableIgnore] 标注的字段则会生成语句时忽略掉。有 [TableId] 标注的字段则会生成判定条件
- isParam 是否参数化插值
deleteById
var person = new Person();
person.id= "13";
Person.deleteById(person);
或
Person.deleteById("13");
或
person.deleteById();
public static int deleteById(DBBaseModel<T> t)
public static int deleteById(Object id)
public int deleteById()
- 移除数据方法,根据 标注的[TableId]字段 来移除对应数据
事务方法
TransactionMethod
Person.TransactionMethod(()=>{
// 所有使用DbBaseModel 的数据操作 都在同一个事务范围内
Person.getById("");
Person.deleteById("");
.......
},()=>{
//事务提交后执行方法
});
或
Person.TransactionMethod(()=>{
// 所有使用DbBaseModel 的数据操作 都在同一个事务范围内
Person.getById("");
Person.deleteById("");
.......
return ()=>{
//事务提交后执行方法
};
});
public static void TransactionMethod(Action action, Action afterAction = null)
public static void TransactionMethod(Func<Action> action)
- 使用TransactionMethod 的 操作都在一个事务范围,如果里面操作的方法内有执行 TransactionMethod 或者 再次调用TransactionMethod 都会融合在一个事务范围内。
- 抛出异常会回滚数据。
使用构建器
Wrapper 作为学习开发过程中的一个小工具,方便构建查询和规范Sql,避免程序中出现的一些失误。比如引号,关联关系。字符这些问题出现。
使用查询构建器
创建查询构建器
Wrapper<Person> personWrapper = new Wrapper<Person>();
或者
Wrapper<Person> personWrapper = Person.Select();
添加条件Eq
List<Person> persons= personWrapper.Eq(q=>q.code,"0270").Eq(q=>name,"张三").Execute();
- sql 类似于
select * from person where code = '0270' AND name = '张三';
模糊查询Like
List<Person> persons= personWrapper.Like(q=>name,"张").Execute();
- sql 类似于
select * from person where name like '%张%';
包含查询 AND
List<Person> persons= personWrapper.Eq(q=>sex,"男").AND(q1=>q.Like(q1=>name,"张").Like(q=>name,"王")).Execute();
- sql 类似于
select * from person where sex = '男' AND (name like '%张%' OR name like '%王%' );
包含查询 OR
List<Person> persons= personWrapper.Eq(q=>sex,"男").OR(q1=>q1.Like(q=>name,"张").Like(q=>name,"王")).Execute();
- sql 类似于
select * from person where sex = '男' OR (name like '%张%' AND name like '%王%' );
OR 拼接
最简单的用法 如果默认使用Eq 查询筛选 默认拼接的是 AND 如果用OR 拼接需要手动声明使用例如
List<Person> persons= personWrapper.Eq(q=>sex,"男").OR().Like(q=>name,"张").Execute();
- sql 类似于
select * from person where sex = '男' OR name like '%张%';