关于orm:开源-Net-ORM-访问-Firebird-数据库

前言Firebird 是一个跨平台的关系数据库系统,目前可能运行在 Windows、linux 和各种 Unix 操作系统上,提供了大部分 SQL-99 规范的性能。它既能作为多用户环境下的数据库服务器运行,也提供嵌入式数据库的实现。 Firebird 脱胎于 Borland 公司的开源版数据库 Interbase6.0,是一个齐全非商业化的产品,用 C 和 C++ 开发。因为与 interbase 的血缘关系,大部分 interbase 的开发工具能够间接利用到 Firebird 开发中。Firebird 应用 Mozilla Public License v.1.1 许可证发行。 FreeSql 反对 Firebird 嵌入式数据库,与 Sqlite 一样属于本地数据库,并且可靠性强于 sqlite,数据库文件不过 10兆 大小。 1、装置环境数据库环境:Firebird (嵌入式版本) 下载地址:https://firebirdsql.org/en/se....NET版本:.net6.0 下载地址:https://dotnet.microsoft.com/...开发机器 :windows 10 2、创立我的项目咱们以 console 类型我的项目试验 插入、删除、更新、查问 等性能,创立控制台我的项目,应用命令: dotnet new console dotnet add package FreeSql.Provider.Firebird dotnet add package FreeSql.Repository 3、创立实体模型using System;using FreeSql.DataAnnotations;[Table(Name = "USER_FIREBIRD")]public class User{ [Column(IsIdentity = true)] public long Id { get; set; } public string UserName { get; set; } public string PassWord { get; set; } public DateTime CreateTime { get; set; }}4、初始化 ORMstatic IFreeSql fsql = new FreeSql.FreeSqlBuilder() .UseConnectionString(FreeSql.DataType.Firebird, @"database=localhost:D:\fbdata\EXAMPLES.fdb;user=sysdba;password=123456;max pool size=3") .UseMonitorCommand(cmd => Trace.WriteLine($"线程:{cmd.CommandText}\r\n")) .UseAutoSyncStructure(true) //主动创立、迁徙实体表构造 .UseNameConvert(NameConvertType.ToUpper) .Build();5、插入数据var repo = fsql.GetRepository<User>();var user = new User { UserName = "gaussdb1", PassWord = "123" };repo.Insert(user); ...

July 7, 2022 · 1 min · jiezi

关于orm:EBean-ORM-框架介绍3实体草稿功能

前文《EBean ORM 框架介绍-2.字段加密、更新日志和历史记录》 介绍了不少个性注解,本文将介绍实体草稿性能 草稿性能次要用于一些须要进行流程审批或反复批改后的重要内容公布,先打草稿确认没有问题后再行公布的场景。 此实现计划较以往齐全自主实现最大的区别在于草稿与正式版数据结构互相独立,程序逻辑却为一体 一、设置草稿@Draftable@Builder@Data@Entity@ToString(callSuper = true)@AllArgsConstructor@NoArgsConstructor@Table(name = "customer")public class Customer extends BaseModel { public static final CustomerFinder find = new CustomerFinder(); private String name; @DraftOnly Timestamp whenPublish; @DraftDirty Boolean draft; @DraftReset String author; @OneToMany(cascade = {CascadeType.ALL}) List<Group> groupList;}@DraftableElement@Entity@Table(name = "c_group")public class Group extends BaseModel { private String name;}1. 草稿注解在主实体上设置@Draftable注解,标记为实体领有草稿性能;在其子实体头上@DraftableElement注解,标记随主实体同步保护草稿状态。 @DraftableElement反对@OneToMany和@ManyToMany关系设置 2. @DraftOnly此注解示意仅在草稿中存在,正式版数据结构中没有此字段。可用于流程审批记录,草稿批改记录等场景 3. DraftDirty此注解能够放在一个布尔属性上,仅在草稿中存在。当草稿被保留时,其主动设置为true;当草稿被公布时,其主动设置为false。此注解可用于数据是否被公布 4. DraftReset此注解属性值在草稿公布之后,草稿中的值将主动设置为NULL,正式版本的值不变 二、草稿实现1. 新建@Testpublic void create() { List<Group> list = new ArrayList<>(); list.add(Group.builder().name("abc").build()); list.add(Group.builder().name("def").build()); Customer customer = Customer.builder() .name("abc") .author("hypier") .groupList(list) .whenPublish(new Timestamp(System.currentTimeMillis())) .build(); customer.save();}主实体和子实体同时保留时,将为两个数据表创立草稿数据库表 ...

June 24, 2021 · 1 min · jiezi

关于orm:对象识别之重写对象equals和hashCode方法

对数据库而言,其辨认一条记录唯一性的形式是依据主键值,如果手上有两条记录,它们领有同样的主键值,则它们在数据库中代表同一个字段的记录。   对Java而言,要辨认两个对象是否为同一个对象有两种形式      (1)内存地址辨认(“= =”号辨认);      (2)依据equals()、hashCode()中的定义 (默认Object类中定义的equals(Object o)办法也是按内存地址来比拟的)            源码如下:                 public boolean equals(Object obj){                               return  (this==obj);                       } 先探讨第一种Java的辨认形式在Hibernate中该留神的中央,在Hibernate中,如果是在同一个session中依据雷同查问所失去的雷同记录,则它们会领有雷同的Java辨认 //对象辨认 public void testObjectIndentifySession(){ Configuration cfg=null; SessionFactory sf=null; Session session=null; Transaction ts=null; try { sf=HibernateUtil.getSessionFactory(); //sessionFactory的单态模式 session=sf.getCurrentSession();//保障每个读写线程有惟一的session实例 ts=session.beginTransaction(); User u1=session.get(User.class, 2); User u2=session.get(User.class, 2); System.out.println(u1==u2); ts.commit(); } catch (HibernateException e) { // TODO Auto-generated catch block e.printStackTrace(); if(ts!=null){ ts.rollback(); } }finally{ //session.close(); //sf.close(); } }后果: ...

June 14, 2021 · 2 min · jiezi

关于orm:SpringBoot-DB-系列Jooq-初体验

【SpringBoot DB 系列】Jooq 初体验java 环境中,说到数据库的操作,咱们通常会想到的是 mybatis 或者 hibernate,明天给大家介绍一个国内可能用得不太多的操作形式 JOOQ,一款基于 Java 拜访关系型数据库的工具包,轻量,简略,并且足够灵便的 ORM 框架 本文将各位小伙伴演示一下 jooq 集成 springboot 的姿态 <!-- more --> I. 我的项目搭建咱们这里借助 h2dabase 来搭建演示我的项目,因而有趣味的小伙伴在文末能够间接获取我的项目地址启动即可体验,不须要额定的装置和配置 mysql 了 本文采纳SpringBoot 2.2.1.RELEASE + maven 3.5.3 + IDEA进行开发 1. pom 依赖上面给出外围的依赖配置 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jooq</artifactId></dependency><dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId></dependency>2. 配置接下来设置一下数据库相干的配置信息,在资源目录resources下,新建配置文件application.properties #Database Configurationspring.datasource.url=jdbc:h2:~/h2-jooq-dbspring.datasource.username=testspring.datasource.password=spring.datasource.driverClassName=org.h2.Driver3. 数据库初始化jooq 有一个特点,是须要咱们本人来生成表构造对象,所以咱们先初始化一下 h2dabase 的数据结构,详情能够参考博文 [【DB 系列 h2databse 集成示例 demo】]() 表构造定义文件schema-h2.sql, 请留神表构造与 mysql 的表创立姿态不太一样哦 DROP TABLE IF EXISTS poet;CREATE TABLE poet ( `id` int NOT NULL, `name` varchar(20) NOT NULL default '', CONSTRAINT pk_t_poet PRIMARY KEY (ID));数据初始化data-h2.sql ...

September 16, 2020 · 2 min · jiezi

关于orm:NET-CORE-数据库事务进化总结

事务是数据库系统中的重要概念,本文解说作者从业 CRUD 十余载的事务多种应用形式总结。 以下所有内容都是针对单机事务而言,不波及分布式事务相干的货色!对于事务原理的解说不针对具体的某个数据库实现,所以某些中央可能和你的实践经验不符。意识事务为什么须要数据库事务? 转账是生存中常见的操作,比方从A账户转账100元到B账号。站在用户角度而言,这是一个逻辑上的繁多操作,然而在数据库系统中,至多会分成两个步骤来实现: 1.将A账户的金额缩小100元 2.将B账户的金额减少100元。 在这个过程中可能会呈现以下问题: 1.转账操作的第一步执行胜利,A账户上的钱缩小了100元,然而第二步执行失败或者未执行便产生零碎解体,导致B账户并没有相应减少100元。 2.转账操作刚实现就产生零碎解体,零碎重启复原时失落了解体前的转账记录。 3.同时又另一个用户转账给B账户,因为同时对B账户进行操作,导致B账户金额出现异常。 为了便于解决这些问题,须要引入数据库事务的概念。 以上内容援用自:https://www.cnblogs.com/takum...意识 ADO.NETADO.NET是.NET框架中的重要组件,次要用于实现C#应用程序拜访数据库。 ADO.NET的组成: System.Data.Common → 各种数据拜访类的基类和接口System.Data.SqlClient → 对Sql Server进行操作的数据拜访类 a) SqlConnection → 数据库连接器b) SqlCommand → 数据库命名对象d) SqlDataReader → 数据读取器f) SqlParameter → 为存储过程定义参数g) SqlTransaction → 数据库事物 事务1:ADO.NET最原始的事务应用形式,毛病: 代码又臭又长逻辑难管制,一不小心就忘了提交或回滚,随即而来的是数据库锁得不到开释、或者连接池不够用跨办法传递 Tran 对象太麻烦举荐:★☆☆☆☆ SqlConnection conn = new SqlConnection(connString);SqlCommand cmd = new SqlCommand();cmd.Connection = conn;try{ conn.Open(); cmd.Transaction = conn.BeginTransaction();//开启事务 int result = 0; foreach (string sql in sqlList) { cmd.CommandText = sql; result += cmd.ExecuteNonQuery(); } cmd.Transaction.Commit();//提交事务 return result;}catch (Exception ex){ //写入日志... if (cmd.Transaction != null) cmd.Transaction.Rollback();//回滚事务 throw new Exception("调用事务更新办法时出现异常:" + ex.Message);}finally{ if (cmd.Transaction != null) cmd.Transaction = null;//革除事务 conn.Close();}事务2:SqlHelper原始 ADO.NET 事务代码又臭又长,是时候封装一个 SqlHelper 来操作 ADO.NET 了。比方: ...

August 24, 2020 · 3 min · jiezi