欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

轻量级.NET CORE ORM框架Insql使用教程

程序员文章站 2022-08-10 11:28:37
Insql 国人开发,是一款汲取 Mybatis 优点的.NET ORM 框架。追求简单直观,使用*灵活等特点。 项目主页: "https://rainrcn.github.io/insql" 此 ORM 是以 Mybatis 的 Sql 配置方式,以 Dapper 为对象映射的基础上建立。喜欢写 ......

insql 国人开发,是一款汲取 mybatis 优点的.net orm 框架。追求简单直观,使用*灵活等特点。

项目主页:

此 orm 是以 mybatis 的 sql 配置方式,以 dapper 为对象映射的基础上建立。喜欢写 sql 的同学们肯定会喜欢的。另外因为对象映射使用 dapper 的关系,所以性能上不用过多担心。

创建项目

轻量级.NET CORE ORM框架Insql使用教程

模板选择apiweb应用程序,如果会自己大家结构选择也是可以的。

在项目上鼠标右键选择管理nuget程序包,搜索insql并添加安装,insql 包自带 sqlserver 数据库连接,如果需要 mysql 数据库,需要另外安装insql.mysql

轻量级.NET CORE ORM框架Insql使用教程

使用

打开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 文件

轻量级.NET CORE ORM框架Insql使用教程

userdbcontext.insql.xml 要右键属性选择嵌入式资源

轻量级.NET CORE ORM框架Insql使用教程

写代码

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.xmlsql 配置

<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" };
    }
}

行这就完事了。

可以去看看项目文档,支持功能还挺多的。代码生成器也有。