Insql 是一个轻量级的.NET ORM类库。对象映射基于Dapper, Sql配置灵感来自于Mybatis。
功能特点:
支持 DoNet Core 2.0+ && DotNet Framework 4.6.1+
支持依赖注入系统
MyBatis sql xml 语法
多数据库支持
灵活扩展性
使用简单
添加Insql
public void ConfigureServices(IServiceCollection services) { services.AddInsql(); services.AddInsqlDbContext<UserDbContext>(options => { //options.UseSqlServer(this.Configuration.GetConnectionString("sqlserver")); options.UseSqlite(this.Configuration.GetConnectionString("sqlite")); }); }
创建 DbContext
public class UserDbContext : Insql.DbContext { public UserDbContext(Insql.DbContextOptions<UserDbContext> options) : base(options) { } public IEnumerable<UserInfo> GetUserList(string userName) { //sqlId = "GetUserList" //sqlParam is PlainObject or IDictionary<string,object> return this.Query<UserInfo>(nameof(GetUserList), new { userName, userGender = Gender.W }); } public void InsertUser(UserInfo info) { var userId = this.ExecuteScalar<int>(nameof(InsertUser),info); info.UserId = userId; } public void UpdateUserSelective(UserInfo info) { this.Execute(nameof(UpdateUserSelective), info); } } //user model public class UserInfo { public int UserId { get; set; } public string UserName { get; set; } public Gender? UserGender { get; set; } } public enum Gender { M, W }
创建 DbContext.insql.xml
创建 UserDbContext.insql.xml
文件并且修改这个文件的属性为嵌入式文件
类型 . insql type
与 UserDbContext
类型对应.
<insql type="Example.Domain.Contexts.UserDbContext,Example.Domain" > <sql id="selectUserColumns"> select user_id as UserId,user_name as UserName,user_gender as UserGender from user_info </sql> <select id="GetUserList"> <include refid="selectUserColumns" /> <where> <if test="userName != null"> <bind name="likeUserName" value="'%' + userName + '%'" /> user_name like @likeUserName </if> <if test="userGender != null and userGender != 'M' "> and user_gender = @userGender </if> </where> order by user_id </select> <insert id="InsertUser"> insert into user_info (user_name,user_gender) values (@UserName,@UserGender); select last_insert_rowid() from user_info; </insert> <update id="UpdateUserSelective"> update user_info <set> <if test="UserName != null"> user_name=@UserName, </if> <if test="UserGender != null"> user_gender=@UserGender </if> </set> where user_id = @UserId </update> </insql>
使用 DbContext
使用 UserDbContext
在Domain Service中或者Web Controller中
public class ValuesController : ControllerBase { private readonly UserDbContext userDbContext; public ValuesController(UserDbContext userDbContext) { this.userDbContext = userDbContext; } [HttpGet] public ActionResult<IEnumerable<string>> Get() { //可以这样使用事务 this.userDbContext.DoWithTransaction(() => { var userInfo = new Domain.UserInfo { UserName = "loveW", UserGender = Domain.Gender.M }; this.userDbContext.InsertUser(userInfo); this.userDbContext.UpdateUserSelective(new Domain.UserInfo { UserId = userInfo.UserId, UserName = "loveWWW", }); }); var list = this.userDbContext.GetUserList("love"); //todo return } }
OSI 的PI是业界优秀软件之一,主要用于过程数据的采集和分析。它的产生是缘于80年代中期开发了新的过程数据压缩算法。最初中在DEC的VAX机上的VMS操作系统下运行,现在已发展到可用于多种操作系统平台。它有丰富的分析工具,然而它设计的目标是处理过程数据,因而在其它制造业的应用并不太好。 WW的InSQL是世界上第一种面向工厂的高性能的实时关系型数据库。它将关系型数据库的功能、灵活性与实时数据
因为项目需要,自己写了一个根据id 批量查询的方法,做个小结,也不知道有没有问题,效率问题啥的也没有考虑,哈哈哈! 没有了解过的童鞋可以上官网看下.MyBatis-Plusbaomidou.com Mybatis-Plus(以下简称MP): 基于MyBatis 的增强版,不做改变,是国人团队苞米豆在Mybatis的基础上开发的框架,在Mybatis基础上扩展了许多功能,荣获了2018最受欢迎国产开
SQL中in的用法 IN和NOT IN IN 和NOT IN 都属于确定集合的一种; IN用来查找属性值属于指定集合的元组; NOT IN 用来查找属性值不属于指定集合的元组。 IN 例:查询计算机科学系(CS)、数学系(MA)、信息系(IS)学生的姓名和性别。 select Sname,Ssex from Student Where Sdept in('CS','MA','IS'); 有的题
SQL: "IN" Function The IN function helps reduce the need to use multiple OR conditions. 译: IN 函数有助于减少 OR 条件的复合使用。 The syntax for the IN function is: 译: IN 函数的语法: SELECT columns FROM tables WHERE col
问题描述: 在开发中,我们会遇到下面的情形,在PL/SQL程序中定义了type类型的集合,当引用的时候出现PLS-00642错误: PLS-00642: local collection types not allowed in SQL statements 举例: SQL> DECLARE 2 TYPE id IS TABLE OF NUMBER; 3
SQL: "IN" Function The IN function helps reduce the need to use multiple OR conditions. 译:IN函数有助于减少OR条件的复合使用。 The syntax for the IN function is: 译:IN函数的语法: SELECT columns FROM tables WHERE column1 in
1. Introduction to Joins 1.1 Introduction to INNER JOIN (video) 1.2 INNER JOIN PostgreSQL was mentioned in the slides but you’ll find that these joins and the material here applies to different forms
报错信息: 严重: The web application [/cc] registered the JDBC driver [oracle.jdbc.driver.OracleDriver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Dr
Syntax error in SQL statement "select user0_.user_id as col_0_0_ from [*]user user0_ where user0_.email=? limit ?"; expected "identifier"; SQL statement: select user0_.user_id as col_0_0_ from user us
SQL优化(in) in 语句 耗时:0.58s // An highlighted block SELECT V.ID, V.P_ID, V.NO, V.NAME, V.TYPE, V.DIS_LEVEL FROM V_MES_DEVICE_TREE_FFI V WHERE V.P_ID IN ( SELECT v.ID FROM V_MES_DEVICE_TREE_FFI v
问题内容: 我目前在一个网站上工作,该网站必须存在于内存可用性非常低的VM上(目前被告知要达到512mb)。不幸的是,至少在不久的将来,数据库和Web应用程序必须是同一台服务器。 现在,我已经在这里通读了一些问题,并尝试进行自己的研究,但是这里有很多选择。从本质上讲,什么是可以安装的轻巧的数据库服务器?SQL或NoSQL并不重要;它不会占用大量数据库资源,但我现在不想随我现在选择的内容而受到限制。
主要内容:使用普通函数创建 goroutine,使用匿名函数创建goroutine在编写 Socket 网络程序时,需要提前准备一个线程池为每一个 Socket 的收发包分配一个线程。开发人员需要在线程数量和 CPU 数量间建立一个对应关系,以保证每个任务能及时地被分配到 CPU 上进行处理,同时避免多个任务频繁地在线程间切换执行而损失效率。 虽然,线程池为逻辑编写者提供了线程分配的抽象机制。但是,如果面对随时随地可能发生的并发和线程处理需求,线程池就不是非常直观和方便了。能否
Jenkins Pipeline插件有一个称为“轻量级签出”的功能,其中主服务器仅从repo中提取Jenkinsfile,而不是整个repo。配置屏幕中有一个相应的复选框。我想在多分支管道中进行轻量级签出,但我在多分支配置屏幕中没有看到复选框。有什么想法如何实现这一点吗?我注意到一些关闭的问题表明此功能可用,但我无法找到任何有关如何实现它的细节。 相关资料: https://issues.jenk
问题内容: JPanel和JFrame有什么区别,以及与轻量级,重量级的关系? 问题答案: JPanel是允许将多个UI组件放在一起的容器。JFrame是使用Swing编写的窗口。 所有的Swing组件都是所谓的“轻型”组件,因为它们是用Java编写的。例如,如果您运行Swing应用程序并尝试使用UI分析工具(例如Windows中的WinSpy)对其进行分析,则只会看到一个元素:窗口(JFrame
问题内容: 题 我正在寻找Java内存对象缓存API。有什么建议吗?您过去使用过什么解决方案? 当前 现在,我只是在使用地图: 要求 我需要扩展缓存以包括以下基本功能: 最大尺寸 生存时间 但是,我不需要更复杂的功能,例如: 来自多个进程的访问(缓存服务器) 持久性(到磁盘) 意见建议 内存中缓存: Guava CacheBuilder-活动开发。请参阅此演示文稿。 LRUMap-通过API配置。
主要内容:一、简介,二、Java对象头中的Mark Word,三、偏向锁,四、轻量级锁,五、重量级锁,六、自旋锁,七、锁升级过程一、简介 在讲解这些锁概念之前,我们要明确的是这些锁不等同于Java API中的ReentratLock这种锁,这些锁是概念上的,是JDK1.6中为了对synchronized同步关键字进行优化而产生的的锁机制。这些锁的启动和关闭策略可以通过设定JVM启动参数来设置,当然在一般情况下,使用JVM默认的策略就可以了。 二、Java对象头中的Mark Word HotSpo