当前位置: 移动技术网 > IT编程>开发语言>.net > 轻量级.NET CORE ORM框架Insql使用教程

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

2019年02月28日  | 移动技术网IT编程  | 我要评论

经典座右铭,最新日志,缤纷网

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

项目主页:

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

创建项目

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

在项目上鼠标右键选择管理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.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" };
    }
}

行这就完事了。

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网