上一篇文章我们讲解了如何使用ORM今天,我们来学习在数据库中通过ORM实现增删查改!让我们来一起学习吧!
1.回顾内容
回顾一下上一篇的内容,主要有
-
jaguar_orm: ^2.2.1
依赖 - 新建实体类
User
并使用@PrimaryKey()
标识主键,@Column(length:长度)
定义字符串长度 - 新建Bean类使用
@GenBean()
标识构建脚本 - 添加脚本生成工具依赖
dev_dependencies:
build_runner:
jaguar_orm_gen:
- 运行脚本生成命令
pub run build_runner build
,自动创建实体类.porm.dart
文件 - 在实体类中添加
part 'user.jorm.dart'
重新运行脚本生成命令 - 添加
jaguar_query_postgres: ^2.2.2
依赖连接数据库 - 实例化连接数据库对象
final PgAdapter pgAdapter=new PgAdapter('数据库名',username: '用户名',password: '密码')
- 数据库建立连接
await pgAdapter.connect();
- 创建实体类对应的表
bean.createTable();
该方法如果表存在的情况下会异常
ok,上面的就是上一篇文章的主要内容,今天我们来重点讲解一下增删改查
2.添加数据
-
添加一条数据
添加一条数据,我们可以通过bean.insert(model)
方式添加
UserBean userBean=new UserBean(pgAdapter);
User newUser=new User();
newUser.id='1';
newUser.username='rhyme';
newUser.password='123456';
newUser.avatarPath='static/admin.png';
newUser.avatar='http:/localhost:8080/static/admin.png';
newUser.email='rhymelph#gmail.com';
newUser.role='0';
newUser.phoneNumber='159xxxxxxxx';
await userBean.insert(newUser);
这里需要注意,添加之前如果该数据已经存在(根据主键判断),会报异常,异常如下
正确做法,是先通过
bean.find(primaryKey)
查询该数据是否已经存在,然后再进行添加
UserBean userBean=new UserBean(pgAdapter);
if(await userBean.find('1')==null){
User newUser=new User();
newUser.id='1';
newUser.username='rhyme';
newUser.password='123456';
newUser.avatarPath='static/admin.png';
newUser.avatar='http:/localhost:8080/static/admin.png';
newUser.email='rhymelph#gmail.com';
newUser.role='0';
newUser.phoneNumber='159xxxxxxxx';
await userBean.insert(newUser);
}
-
添加多条数据(未实现)
有时候可能需要添加多条记录到数据库,我们可以使用bean.inserMany(List<Model>)
UserBean userBean=new UserBean(pgAdapter);
List<User> users=[];
for(int i in [2,3,4,5]){
User user=new User();
user.id=i.toString();
user.username='rhyme';
user.password='123456';
user.avatarPath='static/admin.png';
user.avatar='http:/localhost:8080/static/admin.png';
user.email='rhymelph#gmail.com';
user.role='0';
user.phoneNumber='159xxxxxxxx';
users.add(user);
}
await userBean.insertMany(users);
3. 删除数据
-
根据主键删除数据
根据主键删除数据我们可以使用bean.remove(primaryKey)
UserBean userBean=new UserBean(pgAdapter);
userBean.remove('1');//删除id为1的数据
-
删除表里所有的数据
这个可能需求没那么大,删除表里所有数据可以使用bean.removeAll()
UserBean userBean=new UserBean(pgAdapter);
userBean.removeAll();
-
删除多条数据
删除多条数据我们可以使用bean.removeMany(List<Model>)
,如果数据不存在也不会包异常
UserBean userBean=new UserBean(pgAdapter);
userBean.removeMany(<User>[
newUser1,
newUser2,
]);
-
根据条件删除数据
根据条件删除数据,我们可以使用的条件有
- eq 等于
- ne不等于
- gt 大于
- gtEq 大于等于
- lt 小于
- ltEq 小于等于
- between 在...之间
- 更多
使用如下:
UserBean userBean=new UserBean(pgAdapter);
await bean.removeWhere(bean.id.eq('1'));//删除id为1的数据
4. 查询数据
-
根据主键查询一条数据
如果实体类里面使用@PrimaryKey()
标识字段,就会在使用pub run build_runner build
之后多生成一个方法find(key)
UserBean bean=new UserBean(pgAdapter);
User user=await bean.find('1');//查询id为1的User
-
根据其他条件查询一条数据
如果你不想通过主键去查询,可以根据其它字段去查一条数据,如果有多条与查询字段相同的数据,会查询到比较靠前的一条,我们可以通过bean.findOne(find)
查询
UserBean bean=new UserBean(pgAdapter);
User user=await bean.findOne(bean.finder.eq('username', 'rhyme'));
我们还可以使用bean.findOneWhere(exp)
查询
UserBean bean=new UserBean(pgAdapter);
User user=await bean.findOneWhere(bean.id.eq('1'));
-
根据条件查询多条数据
根据条件查询多条数据,我们可以使用bean.findWhere(exp)
查询
UserBean bean=new UserBean( pgAdapter);
List<User> users=await bean.findWhere(bean.sex.gtEq(0));
-
查询表中所有数据
查询表中所有数据,我们可以使用bean.getAll()
查询
UserBean bean=new UserBean( pgAdapter);
List<User> users=await bean.getAll();
5.更新数据
-
更新一条数据
更新一条数据我们可以使用bean.update(model,only:Set<String>)
这里要注意的是,该更新根据主键更新,所以model
必须主键有赋值,only
里面添加的是字段名,表示只更新里面包含的字段,不添加only
默认更新该条数据的全部字段
//更新id为1的username字段
await bean.update(new User()
..id='1'
..username='rhyme_lph',
only: new Set()
..add('username'));
-
更新多条数据(未实现)
我们可以使用bean.updateMany(List<Model>)
更新多条数据
UserBean bean=new UserBean( pgAdapter);
await bean.updateMany(<User>[
new User()
..id='1'
..username='rhyme1'
..password='123'
..sex=3
..phoneNumber='1597551'
..role=3,
new User()
..id='2'
..username='rhyme1'
..password='123'
..sex=3
..phoneNumber='1597551'
..role=3,
]);
ok,上面就是今天的内容,我们明天见吧!
如果想继续学习DartVM服务器开发,请关注我,学习更多骚操作!
网友评论