DbUtil

入门

代码生成器

DbUtil 代码生成器地址
image-1705215155850

使用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 '%张%';

…其他用法待更新

使用更新构建器

使用移除构建器