轻量级.NET CORE ORM框架Insql使用教程
Insql 国人开发,是一款汲取 Mybatis 优点的.NET ORM 框架。追求简单直观,使用自由灵活等特点。
项目主页:https://rainrcn.github.io/insql
此 ORM 是以 Mybatis 的 Sql 配置方式,以 Dapper 为对象映射的基础上建立。喜欢写 SQL 的同学们肯定会喜欢的。另外因为对象映射使用 Dapper 的关系,所以性能上不用过多担心。
创建项目
模板选择Api
或Web应用程序
,如果会自己大家结构选择空
也是可以的。
在项目上鼠标右键选择管理Nuget程序包
,搜索Insql
并添加安装,Insql 包自带 SqlServer 数据库连接,如果需要 MySql 数据库,需要另外安装Insql.MySql
。
使用
打开Startup.cs
,在ConfigureServices
中加入AddInsql
public void ConfigureServices(IServiceCollection services)
{
services.AddInsql();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
Insql 就已经可以开始用了。
在项目下创建Domain
目录,并创建UserDbContext.cs
UserDbContext.insql.xml
UserPo.cs
RolePo.cs
文件
UserDbContext.insql.xml
要右键属性选择嵌入式资源
写代码
1. 创建数据库模型类 UserPo.cs
RolePo.cs
public class UserPo
{
public string UserId { get; set; }
public string UserName { get; set; }
public DateTime CreateTime { get; set; }
}
public class RolePo
{
public string RoleCode { get; set; }
public string RoleName { get; set; }
public int RoleOrder { get; set; }
}
2. 创建UseDbContext.insql.xml
SQL 配置
<insql type="InsqlExample.Domain.Context.UserDbContext,InsqlExample" >
<!--定义UserPo类型数据库字段到对象属性映射-->
<map type="InsqlExample.Domain.Model.UserPo,InsqlExample">
<key name="user_id" to="UserId" />
<column name="user_name" to="UserName" />
<column name="create_time" to="CreateTime" />
</map>
<map type="InsqlExample.Domain.Model.RolePo,InsqlExample">
<key name="role_code" to="RoleCode" />
<column name="role_name" to="RoleName" />
<column name="role_order" to="RoleOrder" />
</map>
<select id="GetUser">
select * from user_info where user_id = @userId
</select>
<insert id="InsertUser">
insert into user_info (user_id,user_name,create_time) value (@UserId,@UserName,@CreateTime)
</insert>
<update id="UpdateUser">
update user_info
<set>
<if test="UserName != null">
user_name = @UserName,
</if>
</set>
where user_id = @UserId
</update>
<delete id="DeleteUser">
delete from user_info where user_id = @userId
</delete>
<select id="GetRoleList">
select * from role_info order by role_order
</select>
</insql>
select
,insert
,update
,delete
分别代表增删改查,可以看到在update
中有特殊 xml 元素,可以进项目文档查看详细说明,有 Mybatis 经验的同学自然就理解了
3. 创建UserDbContext
数据上下文
public class UserDbContext : DbContext
{
public UserDbContext(DbContextOptions<UserDbContext> options) : base(options)
{
}
public UserPo GetUser(string userId)
{
//"GetUser"对应 select上的id,
//第二个查询参数支持 PlainObject和 IDictionary<string,object>两种类型
return this.Query<UserPo>("GetUser", new { userId }).SingleOrDefault();
}
public void InsertUser(UserPo user)
{
this.Execute(nameof(InsertUser), user);
}
public void UpdateUser(UserPo user)
{
this.Execute(nameof(UpdateUser), user);
}
public void DeleteUser(string userId)
{
this.Execute(nameof(DeleteUser), new { userId });
}
public IEnumerable<RolePo> GetRoleList()
{
return this.Query<RolePo>("GetRoleList");
}
}
别忘了在Startup.cs
中注册 UserDbContext。 命名空间 using Insql;一下
public void ConfigureServices(IServiceCollection services)
{
services.AddInsql();
services.AddInsqlDbContext<UserDbContext>(options =>
{
//这里代表这个上下文使用这个SqlServer数据库
options.UseSqlServer("这里是连接字符串");
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
增删改查这就 OK 了。然后我们可以在 Controller 或者 Service 中直接注入 UserDbContext 来用。
4. 在ValuesController.cs
中使用UserDbContext
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
private readonly UserDbContext dbContext;
public ValuesController(UserDbContext dbContext)
{
this.dbContext = dbContext;
}
[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{
//查询用户
var user1 = this.dbContext.GetUser("tome");
//增加用户
this.dbContext.InsertUser(new UserPo
{
UserId = Guid.NewGuid().ToString(),
UserName = "tom",
CreateTime = DateTime.Now
});
//查询角色列表
var roleList = this.dbContext.GetRoleList();
//....其他的不演示了
//还可以这样用,通过dbContext直接调用sql,和在DbContext里面写方法一样的
var userJerry = this.dbContext.Query<UserPo>("GetUser", new { userId = "jerry" });
return new string[] { "value1", "value2" };
}
}
行这就完事了。
可以去看看项目文档,支持功能还挺多的。代码生成器也有。
轻量级.NET CORE ORM框架Insql使用教程的更多相关文章
- OsharpNS轻量级.net core快速开发框架简明入门教程-从零开始启动Osharp
OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. O ...
- OsharpNS轻量级.net core快速开发框架简明入门教程-Osharp.Redis使用
OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. O ...
- OsharpNS轻量级.net core快速开发框架简明入门教程-代码生成器的使用
OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. O ...
- OsharpNS轻量级.net core快速开发框架简明入门教程-基于Osharp实现自己的业务功能
OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. O ...
- OsharpNS轻量级.net core快速开发框架简明入门教程-Osharp.Hangfire使用
OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. O ...
- OsharpNS轻量级.net core快速开发框架简明入门教程-Osharp.Permissions使用
OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. O ...
- OsharpNS轻量级.net core快速开发框架简明入门教程-切换数据库(从SqlServer改为MySql)
OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. O ...
- OsharpNS轻量级.net core快速开发框架简明入门教程-多上下文配置(多个数据库的使用)
OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. O ...
- PetaPoco - 轻量级高性能的ORM框架(支持.NET Core)
我们都知道ORM全称叫做Object Relationship Mapper,也就是可以用object来map我们的db. 而且市面上的orm框架有很多,有重量级的Entity Framework,有 ...
随机推荐
- mysql 的 select into 带来的错误数据问题
在写存储过程的时候,会有一个被忽视的问题: 比如 select user_name into @user_name from user where id = 1; 会出现 其实没有 id =1 这条数 ...
- 利用python监测linux上的服务(简单实现服务宕掉自动发送邮件)
python 这里用到了四个python 模块 : import time (时间模块) import re (正则模块) import socket (监测端口模块)import yagmail ( ...
- 2019.02.11 bzoj1568: [JSOI2008]Blue Mary开公司(线段树)
传送门 题意简述:维护整体加一条线段,求单点极值. 思路: 直接上李超线段树维护即可. 代码: #include<bits/stdc++.h> #define ri register in ...
- leetcode(java)
86 class Solution { public ListNode partition(ListNode head, int x) { ListNode lowheader=new ListNod ...
- python基本数据类型之集合
python基本数据类型之集合 集合是一种容器,用来存放不同元素. 集合有3大特点: 集合的元素必须是不可变类型(字符串.数字.元组): 集合中的元素不能重复: 集合是无序的. 在集合中直接存入lis ...
- lambda 匿名函数
# 普通python函数 def func(a,b,c): return a+b+c print func(1,2,3) # 返回值为6 # lambda匿名函数 f = lambda a,b,c:a ...
- Unity3D中的生命周期函数
生命周期函数:需要继承 MonoBehaviour 类才能使用.生命周期函数全部都是由系统定义好的,系统会自动调用,且调用顺序和我们在代码里面的书写顺序无关. 常用的生命周期函数: Awake():唤 ...
- elasticsearch搜索引擎环境的搭建
elasticsearch 搜索引擎 解决了什么问题:在我们数据量很大时,我们使用模糊查询会使索引列的索引消失,这样使用elasticsearch来提高查询效率. 存在什么问题:有时我们查询的词,el ...
- android资源文件
代码与资源分离原则:便于维护与修改shape:定义图形 selector:按照不同的情况加载不同的color或drawable layer-list:从下往上图形层叠加载 资源文件有:/res/dra ...
- 卷积在图像处理中的应用(转自https://medium.com/@irhumshafkat/intuitively-understanding-convolutions-for-deep-learning-1f6f42faee1)
直观理解深度学习的卷积 探索使他们工作的强大视觉层次 近年来强大且多功能的深度学习框架的出现使得可以将卷积层应用到深度学习模型中,这是一项非常简单的任务,通常可以在一行代码中实现. 然而,理解卷积 ...