实体类

实体类的动态生成(一)

时光怂恿深爱的人放手 提交于 2020-02-20 23:07:20
前言 在应用开发中,通常都会涉及各种 POJO/POCO 实体类(DO, DTO, BO, VO)的编写,有时这些实体类还需要实现 INotifyPropertyChanged 接口以支持属性变更通知,一般我们都会手写这些代码或者通过工具根据数据库表定义抑或别的什么模板、映射文件之类的来生成它们。 但是,在业务实现中往往伴随着诸如“ 如何简单且高效的获取某个实体实例有哪些属性发生过变更? ”、“ 变更后的值是什么? ”这样的问题,而大致的解决方法有: 由实体容器来跟踪实例的属性变更; 改造实体类(譬如继承特定实体基类,在基类中实现这些基础构造)。 方法(1)需要配合一整套架构设计来提供支撑,也不是专为解决上述实体类的问题而设,并且实现和使用也都不够简单高效,故此略过不表。接下来我将通过几篇文章来详细阐述这些问题的来由以及解决方案,并给出完整的代码实现以及性能比对测试。 关于源码 下面将要介绍的所有代码均位于我们的开源系列项目(地址: https://github.com/Zongsoft ),项目主要采用 LGPL 2.1授权协议 ,欢迎大家参与并使用( 请遵照授权协议 )。而本文相关的源码位于其中 Zongsoft.CoreLibrary 项目的 feature-data 分支( https://github.com/Zongsoft/Zongsoft.CoreLibrary

如何将map转换为实体类

為{幸葍}努か 提交于 2020-02-20 03:22:36
今天写项目时需要把map中的值写到对应的实体类中去,以前在遇到同样的问题时因为需要的数据只要那么几个字段,所以通过get和set的方式感觉还行不是特别麻烦,而这次需要几乎所有字段,一共有十几个,如果还是才采用这用方式实在太麻烦。查阅资料后发现了两个不错的方法 方法一 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.30</version> </dependency> JSON.parseObject(JSON.toJSONString(Map<String, ? extends Object>), Class<T> bean); 通过fastjson先将map转换成json字符串,然后再将json字符串转换成实体类。 方法二 <dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> <version>1.9.3</version> </dependency> BeanUtils.populate(Object bean, Map<String, ? extends Object> map) 这个方法会遍历map<key,

.net core MVC 通过ef core对oracle数据库逆向创建数据模型和视图

眉间皱痕 提交于 2020-02-19 17:24:50
近日刚刚开始接触学习.net core,以往在Visual Studio 的.net MVC环境下做项目有许多工具可供使用,而且使用十分方便,现在一下要转跨平台,感觉还是有些不习惯,但跨平台的魅力实在无法抵挡,所以毅然决定入坑! 之前在VS中做.net mvc项目,对数据库->数据模型->控制器->视图这段连接的实现也就是点点鼠标的事,现在在.net core上实现却一下子有点懵了,经过翻阅资料和几次尝试后(百度上全是MySQL的资料,oracle相关的超级少 T T),才感觉到.....其实也就是几个命令的事。废话不多说,开始! 1. 创建一个ASP .Net core 项目 我用的VSCode,据说很牛(确实很牛).......怎么创建ASP .Net core 项目可以参考微软官方文档 https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/first-mvc-app/start-mvc?view=aspnetcore-3.1&tabs=visual-studio-code 步骤如下: 1)打开 集成终端 (Ctrl+`)。 2) 将目录更改为 ( cd ) 包含项目的文件夹。 3)运行下面的命令: dotnet new mvc -o MvcMovie code -r MvcMovie 其中 MvcMovie是项目名称。

EF里的默认映射以及如何使用Data Annotations和Fluent API配置数据库的映射

故事扮演 提交于 2020-02-19 08:53:06
原文: EF里的默认映射以及如何使用Data Annotations和Fluent API配置数据库的映射 I.EF里的默认映射 上篇文章演示的通过定义实体类就可以自动生成数据库,并且EF自动设置了数据库的主键、外键以及表名和字段的类型等,这就是EF里的默认映射。具体分为: 数据库映射:Code First 默认会在本地的SQL Expression数据库中建立一个和DbContext的子类的全名相同的数据库,全名指的是命名空间加上类名; 表映射:Code First 默认会按照类型名复数建立数据表,比如说Destination类对应的表名就叫Destinations; 列映射:Code First 默认会按照类中的属性名建立column,它还有默认的数据类型映射习惯,int会映射为interger,string会映射为 nvarchar(max),decimal会映射为decimal(18,2); 主键映射:Code First 默认会在类的属性中需找名字为Id或类型名称+Id的int类型的属性作为主键,并且是自增字段。 摘自 这里 默认的映射一般只是简单映射,方便使用罢了。当然这些都是可以进行修改的,请往下看。 II.使用Data Annotations和Fluent API配置数据库的映射 Data Annotations翻译过来就是数据注解

Linq to Sql的困惑

最后都变了- 提交于 2020-02-19 08:30:19
(又翻出来一篇一年多以前的半成品,赶紧给补充完整放出来。) 最近终于得以试用Linq to Sql了,刚开始用,感觉还挺不错,因为一切都显得很简单。也许是我还不太熟悉,所以也有不少的困惑。别的先不说,只说一个:“有状态的”实体类。 Linq to Sql 所创建出来的实体类本身并不是有状态的,有状态的是DataContext。但是正是这个有状态的DataContext,造成了实体类也带上了“状态”。对于一般的桌面应用,或者是结合得比较紧密的Web程序,这还不是什么太大的问题。但是如果我们考虑一个分离得比较充分的N层结构,比如说通过WebService提供数据层或者应用层的服务,这就有问题了。例如有一个ModifyCustomer的WebMethod: [WebMethod] public void ModifyCustomer(Customer customer) { // } 由于Customer是反序列化得来的,并不在DataContext的监管中。因此在调用DataContext.SubmitUpdate()的时候,这些对象是无法进行更新操作的。同时DataContext并没有提供一个直接的方法,来进行Update的操作。 这个问题在英文网上还真是有一些讨论,解决的方法就是用DataContext.Attach。在这之下还有两种方案: 1、 [WebMethod]

EF Core中如何使用LEFT JOIN

梦想的初衷 提交于 2020-02-17 23:58:27
我们知道使用EF Core的Join函数可以实现SQL中的 INNER JOIN ,那么怎么实现 LEFT JOIN 呢? 答案就在 GroupJoin 、 SelectMany 和 DefaultIfEmpty 三个Linq函数的组合使用上。 下面我们举个例子,建立一个.NET Core控制台项目,来演示使用EF Core将Person表来 LEFT JOIN Products表。 Person表在EF Core中的实体类,如下: public partial class Person { public int Id { get; set; } public string Name { get; set; } public int? Age { get; set; } public DateTime? CreateTime { get; set; } public string Flag { get; set; } public string VarCharDescription { get; set; } } Products表在EF Core中的实体类,如下: public partial class Products { public int Id { get; set; } public string Product { get; set; } }

SpringBoot整合MongoDB(一)

喜夏-厌秋 提交于 2020-02-17 09:05:30
SpringBoot整合MongoDB 此文章建立在Mongodb数据库已安装完成情况下。若服务器(linux系统/redhat)没有安装MongoDB,可查看我的另一篇文章 Centos7 使用Yum源安装MongoDB4.2版本数据库(补:密码配置) 本文章仅仅为单数据源配置,多数据源配置我在下一文中会编写。 本文章使用MongoTemplate而非springdatamongodb(个人感觉使用起来更舒适) 一.准备 创建SpringBoot工程,添加吐下依赖 可在创建工程时nosql那栏选择。 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> 二.文件配置 (1)YML文件配置 个人习惯使用yml格式对Springboot工程进行配置 mongodb连接配置如下: 无密码连接 spring: data: mongodb: uri: mongodb://服务器IP:端口/数据库名 有密码连接 spring: data: mongodb: uri: mongodb://用户名:密码@服务器IP:端口/数据库名 mongodb数据库与mysql不一样 mysql 一个普通用户可以管理多个数据库

IDEA之MyBatis逆向工程

末鹿安然 提交于 2020-02-17 06:39:48
逆向工程:通过数据库中已存在数据表,反向生成java中的实体类(生成对应的ORM持久层代码) 1.创建项目 代码生成器是项目的一个工具组件。 创建不使用模板的maven项目。 引入逆向工程的依赖。 mysql-connector-java mybatis-generator-core <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.17</version> </dependency> <!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core --> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.4.0</version> </dependency> 2.配置生成规则 描述数据库中的表

改动实体类后,报错java.io.InvalidClassException: XXXDTO; local class incompatibl

时间秒杀一切 提交于 2020-02-16 13:05:36
报错日志 今天在因项目需求,在DTO实体类中加了个字段就炸了bug错误 java.io.InvalidClassException: com.lenovo.quotation.dto.QuoteSettingDTO; local class incompatible: stream classdesc serialVersionUID = -1296272934669966307, local class serialVersionUID = 1020939123400497762 解决 问题原因:因为写实体类时 implements Serializable ,但没有写 private static final long serialVersionUID 。导致本地缓存的实体类DTO与改后的DTO的随机生成的serialVersionUID不一样 两种方法解决: 1,清空项目的缓存。重新加载新的数据 2,在实体类上加上 serialVersionUID 。 来源: CSDN 作者: baiofchao 链接: https://blog.csdn.net/baiofchao/article/details/104274621

Springboot实体类转JSON报错Could not find acceptable representation & 设置访问项目根路径的默认欢迎页面

安稳与你 提交于 2020-02-16 11:41:52
=================实体类转JSON报错的解决办法=============   之前在springmvc的时候也报过这个错,原因以及springmvc中解决办法参考: https://www.cnblogs.com/qlqwjy/p/8722802.html   今天在springboot中同样遇到这个错。 错误分析:后台返回的数据格式是json的时候,格式化实体类报错,如下: @RequestMapping("doLogin") @ResponseBody public JSONResultUtil doLogin(String username, String password, HttpSession session) { if (!username.equals("admin") || !password.equals("admin")) { return JSONResultUtil.error("账号或者密码错误"); } session.setAttribute("user", new User()); return JSONResultUtil.ok(); } 错误信息: org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable