实体类

hibernate get()和load()

允我心安 提交于 2020-02-16 05:39:43
Hibernate中有两个极为相似的方法get()与load(),他们都可以通过指定的实体类与ID从数据库中读取数据,并返回对应的实例。 1. 对于 get(直接取) 方法, hibernate 会确认一下该 id 对应的数据是否存在,首先在 session 缓存中查找, 还没有就查询数据库,数据库中没有就返回 null 。 2. load 方法加载实体对象的时候,根据映射文件上类级别的 lazy 属性的配置 ( 默认为 true) ,分情况讨论: (1) 若为 true, 则首先在 Session 缓存中查找,看看该 id 对应的对象是否存在,不存在则使用延迟加载,返回实体的代理类对象 ( 该代理类为实体类的子类,由 CGLIB 动态生成 ) 。等到具体使用该对象 ( 除获取 OID 以外 ) 的时候,再查询二级缓存和数据库,若仍没发现符合条件的记录,则会抛出一个 ObjectNotFoundException 。 (2) 若为 false, 就跟 get 方法查找顺序一样,只是最终若没发现符合条件的记录,则会抛出一个 ObjectNotFoundException 。 这里 get 和 load 有两个重要区别 : load 方法可返回没有加载实体数据的代理类实例,而 get 方法永远返回有实体数据的对象。 ( 对于 load 和 get 方法返回类型:好多书中都说: “get

Hibernate load/get 区别

断了今生、忘了曾经 提交于 2020-02-16 05:36:37
Hibernate中Session.load/get方法均可以根据指定的实体类和id从数据库读取记录,并返回与之对应的实体对象。其区别在于: 1.get()方法直接返回实体类,load()方法可以返回实体的代理类实例。 2.hibernate load是采用延迟机制(当lazy属性为true时) 而get不采用。 Hibernate中Session.load/get方法均可以根据指定的实体类和id从数据库读取记录,并返回与之对应的实体对象。其区别在于: 1.get()方法直接返回 实体类 ,load()方法可以返回 实体的代理类实例 。 2.hibernate load是采用 延迟机制 (当lazy属性为true时) 而get 不采用延迟机制(get语句马上读库) 3.找不到符合条件的数据 get方法将返回null load将会报出ObjectNotFoundExcepion 4.get支持 多态查询 ,load 只有在lazy=false的情况下才支持多态查询 所谓多态查询,就是可以明确区分加载的是什么类型的对象,load采用代理机制无法支持 延迟加载:Hibernate尽量延迟向数据库发送sql,它自己有一个缓冲区,先把sql放在里面,最后一起发送,减少网络开销和数据库开销。 load方法原理: 当对象.hbm.xml配置文件元素的lazy属性设置为true时,调用load(

.NET Core WebAPI post参数传递时后端的接收方式

余生颓废 提交于 2020-02-15 20:56:40
.NET Core WebAPI post参数传递时后端的接收方式 实体类 dynamic动态类型 JObject参数 单值参数(字符串参数) A.前端Post请求代码 $.ajax({ url: "/api/student/poststudent", type: 'POST', data:JSON.stringify({ name: "张三", age: 21 }), success:function () { }, dataType: "json", contentType: "application/json" }); B.后端接收参数方式 1. 实体类 实体类是比较简单的一种传参方式,使用频率非常高。 添加实体类 public class Student { public string Name { get; set; } public int Age { get; set; } } 后台处理Post请求代码 [HttpPost("{id}")] public void PostStudent(Student student) { } 接收参数结果 2.dynamic动态类型 后台处理Post请求代码 [HttpPost("{id}")] public void PostStudent(dynamic student) { var name = student.name;/

Springboot集成mybatis-plus报com.xly.entity.ClientNot Found TableInfoCache.

流过昼夜 提交于 2020-02-15 02:21:48
使用mybatis-plus版本为 3.1.0,springboot版本为2.2.4.RELEASE 实体类继承Model 泛型为该实体类 ,泛型一定要写,我就是因为这个报错 @Data @TableName ( "t_user_expand" ) @KeySequence ( value = "t_user_expand_id_seq" ) @EqualsAndHashCode ( callSuper = false ) public class UserExpand extends Model < UserExpand > { . . . } 重写Model类的pkVal()方法,return当前类的主键 @Override protected Serializable pkVal ( ) { return id ; } 实体类需要有对应的Mapper 并且该Mapper继承BaseMapper 泛型为该实体类 public interface UserExpandMapper extends BaseMapper < UserExpand > { . . . } 来源: CSDN 作者: 喝茶啃馒头 链接: https://blog.csdn.net/guashengzan0281/article/details/104312030

asp.net mvc框架之EF的使用

☆樱花仙子☆ 提交于 2020-02-13 19:10:55
一、EF(Entity Framework)简介 1.ORM:Object Relation Mapping,用操作对象的方法来操作数据库 2.ORM工具有很多:Dapper、PetaPoco、NHibernate,其中用的最多的还是微软官方的Entity Framework 3.EF底层仍然是对ADO.Net的封装。EF支持SQLServer、MySQL、Oracle等主流数据库 4.使用EF进行数据库开发的时候有两个步骤需要创建:一个是数据库,另一个是模型类。根据这两种创建的先后顺序有EF的三种创建办法:   a).DataBase First(数据库优先):先创建数据库表,然后自动生成EDM文件,EDM文件生成模型类。   b).Model First(模型优先):先创建Edm文件,Edm文件自动生成模型类和数据库   c).Code First(代码优先):自己写模型类,然后自动生成数据库。没有Edm文件。 DataBase First简单、方便,但是当项目打了之后会非常痛苦;Code First入门门槛高,但是适合大项目。虽然有三种创建方法,一旦创建好了数据库、模型类之后,后面的用法都是一样的。业界推荐使用Code First,新版的EF中只支持Code irst,所以在以后的使用中,就按照Code First的方法创建使用EF。 其中EF像ASP.Net MVC一样

java中实体类的区别

若如初见. 提交于 2020-02-12 17:11:22
  经常会接触到 VO, DO, DTO的概念,本文从领域建模中的实体划分和项目中的实际应用情况两个角度,对这几个概念进行简析。   得出的主要结论是:在项目应用中, VO对应于页面上需要显示的数据(表单), DO对应于数据库中存储的数据(数据表), DTO对应于除二者之外需要进行传递的数据。 一、实体类   百度百科中对于实体类的定义如下:   实体类的主要职责是存储和管理系统内部的信息,它也可以有行为,甚至很复杂的行为,但这些行为必须与它所代表的实体对象密切相关。   根据以上定义,我们可以了解到,实体类有两方面内容,存储数据和执行数据本身相关的操作。这两方面内容对应到实现上,最简单的实体类是 POJO类,含有属性及属性对应的 set和 get方法,实体类常见的方法还有用于输出自身数据的 toString方法。 二、领域模型中的实体类   领域模型中的实体类分为四种类型: VO、 DTO、 DO、 PO,各种实体类用于不同业务层次间的交互,并会在层次内实现实体类之间的转化。   业务分层为:视图层( VIEW+ACTION),服务层( SERVICE),持久层( DAO)   相应各层间实体的传递如下图   项目中我们并没有严格遵循这种传递关系,但这种和业务层次的关联对我们理解各实体类的作用是有帮助的。(我们没有接触到 PO的原因,我理解为 ORM对 PO进行了封装)  

数据库之应用理论

爱⌒轻易说出口 提交于 2020-02-12 03:54:02
一、聚合函数 count:统计行数量 sum:获取单个列的合计值 avg:计算某个列的平均值 max:计算列的最大值 min:计算列的最小值 二、having和where区别   二者都是过滤条件,where运行在分组之前,因此不能执行任何聚合函数,having是运行在分组后,只能用作聚合函数的过滤。 三、为什么要保证数据库完整性   为了防止垃圾数据的产生,从而影响数据库的执行效率 四、SQL语句执行顺序 1.执行from 2.where条件过滤 3.group by 分组 4.select 投影列 5.having条件过滤 6.执行order by顺序 五、外键与外键约束   外键是指从表的某列与主表的某列存在依附关系。外键约束是指在外键关联主键上强制加上一个约束,如果违反该约束,则不允许该条数据的修改。没有外键约束不等于没有外键。   添加外键约束的语句:Alter table 从表 add constraint 外键名 foreign key(外键) reference 主表名(主键) 六、JDBC(Java Database Connection)   是java连接数据库的一套规范,该规范中定义了一系列接口,这些接口由数据库厂商根据自身数据库 的特点提供实现类,由用户根据接口调用实现类相关的方法。这样用户可以屏蔽不同数据库的差异,无论连接什么数据库都是一套API 七

三层架构

南楼画角 提交于 2020-02-12 03:42:11
三层架构: 1,持久层 2,业务层; 3,表现层 持久层: 完成数据库相关的操作,建立实体类和数据库做映射;采用DAO 模式也就是哪个类对应哪个表,哪个列对应哪个属性,而持久层的目的就是完成对象数据和关系数据的转换; 业务层: 完成处理从表现层中得到的数据和相关的业务操作。采用事物脚本模式将当前业务中所有的操作封装成一个方法,保证这些操作同事成功或同时失败,不允许部分成功或失败,这样避免引起数据混乱的操作; 表现层: 完成数据的收集和展示。采用MVC模式                 M:模型,也就是实体类,用于封装和传输数据                V:视图,也就是GUI窗体,用于数据的展示                  C:控制,也就是事件,用于控制业务流程 层与层之间用接口做逻辑,(方便替换)做关联,耦合,当其中一个层的组件需要更换不会影响其它层的组件 持久层设计原则:一个实体类一个接口,该接口放置,该实体类中所有的数据库操作,一次数据库操作一个接口方法 接口隔离原则:使用专门的接口,比用统一接口要好,不要让用户面对自用不到的方法,便于分工,便于项目的管理; 业务层设计原则: 一个实体类一个接口,一次提交一个业务方法,业务方法的参数全部来自于表现层; 来源: https://www.cnblogs.com/cj28-27/p/5469849.html

三层架构

为君一笑 提交于 2020-02-12 03:38:16
1、持久层   完成数据库的相关操作,采用DAO模式,建立实体类和数据库做映射,也就是那个表对应那个类,哪个列对应哪个属性。而持久层的目的就是就是完成对象数据和关系数据的转换。 2、业务层   完成处理从表现层中得到的数据,和相关的业务操作。采用事物脚本模式,将当前业务中所有的操作封装成一个方法,保证这些操作同时成功或同时失败,不允许出现部分成功或部分失败,这样引起数据混乱的操作。 3、表现层   完成数据的展示和数据的收集,采用MVC模式。 M:模型,也就是实体类,用于封装和传输数据。 V:视图,也就是GUI窗体,用于数据的展示。 C:控制,也就是事件,用于控制业务流程。   层于层之间采用接口耦合,这样当其中一个层的组件需要更换不会影响其他层的组件。   持久层接口的设计原则:一个实体类一个接口。该接口放置该实体类中所有的数据库操作,一次数据库操作一个接口方法。 来源: https://www.cnblogs.com/jj-0611/p/5453286.html

4.Mybatis的ResultMap

穿精又带淫゛_ 提交于 2020-02-12 01:53:55
一.ResultMap 要解决的问题:属性名和字段名不一致 1.案例: 查询为null的问题 数据库: 实体类: 结果:password='null' 2.解决方案 (1)方案一:为列名指定别名 , 别名和java实体类的属性名一致 . pwd as password 1 <!--根据ID查询用户--> 2 <select id="getUserById" parameterType="int" resultType="User"> 3 select id,name,pwd as password from mybatis.user where id=#{id} 4 </select> (2)方案二: 使用结果集映射->ResultMap (推荐使用) 添加一个resultMap标签,配置column为数据库中列名,property为实体类中属性名的对应关系,相同的可省略 将resultType改为resultMap,并将值赋为UserMap 1 <resultMap id="UserMap" type="User"> 2 <!-- column是数据库表的列名 , property是对应实体类的属性名 --> 3 <!--<id column="id" property="id"/>--> 4 <!--<result column="name" property="name"/>