id列以为作为主键,也可以使用联合主键,即多列的值作为一个主键,从而确保了记录的唯一性,即为联合主键; Hibernate的映射很重要哦,如果是一般的映射,很容易掌握和使用,但是如果是集合映射呢,...这里简单使用一下集合映射; 1:第一步,作为使用别人框架的中国人,我们只能先引入别人的包咯,千万别忘记了哦 2:第二步,就是配置hibernate.cfg.xml了,这里的配置之前已经说过了,分三大部分...> 37 38 39 40 3:第三步,创建实体类,我依次使用了set,list,map集合来完成映射,这里一下全都写到了实体类里面了...,如实体类名.hbm.xml (1)set集合属性的映射:重点消化 name指定要映射的set集合的属性 table集合属性要映射的表 ...,(因为存在正确映射) 116 //当使用集合数据的时候,才向数据库发送执行sql的语句(又叫做懒加载) 117 System.out.println(user.getAddressList
NHibernate 代码映射实体类 关于代码映射 NHibernate 3.2 自带了代码映射机制, 作为 xml 映射之外的一种映射方式, 由于推出的时间比较晚, 所以资料相对比较少, 而且与社区版的...下面就通过一个实例来说明怎么使用 NHibernate 自带的代码映射。 实体关系 要映射的类关系图如下: ?...; 标识映射 使用 Id 函数映射标识, NHibernate 提供了内置的工具类来简化代码: Id( m => m.Id, map => { map.Column("id...使用 Property 函数映射属性, NHibernate 提供了内置的工具类来简化代码: Property( m => m.Name, map => { map.Column...总结 与 xml 映射以及其它第三方映射相比, 使用 NHibernate 代码映射有下面几个优点: 不需要使用 xml 文件即可完成, 可以充分利用 IDE 智能提示, 重构, 以及编译时检查; 与
item.paramLimit},#{item.apiID},#{item.paramNotNull}) 默认 collection="list" 不需要在接口中...@Param,而且这里 “list” 四个字母和接口中的命名不一样没事的,因为会自动根据类型映射;数组 “array” 同理可得。
由于在项目中使用了NHibernate来作为ORMapping构建数据访问层,那么就必须要配置Object和DataTable的映射。...最早的项目中,我们使用了最传统的XML配置文件的方式编写映射关系,但是这样太麻烦,每次修改class和表时都要去修改对应的XML文件,而且还容易出错,一定有疏忽遗漏的地方,还不容易找出错误,所以在第二个项目中...,我们使用了Fluent NHibernate的Mapping方式代替XML配置。...使用Fluent NHibernate的最大好处是降低了出错的机会,因为Fluent Nhibernate的配置是使用C#来编写,可以智能感知,而且还能编译,不像原始的XML配置,写错了都不知道。...NHibernate中即可。
这篇讲解 集合映射之List映射 1.通常对于集合,在hibernate中的处理都是使用set来完成。但是hibernate也提供了对于其他几种集合的映射。...在这里实现List的映射,List是有序的集合,所以需要在表中有一列数据用来表示顺序。 2.集合映射一般存在于一对多中,使用案例是 category 和 book ?...return books; } public void setBooks(List books) { this.books = books; } } 4.映射文件...-- 一对多的关联映射 --> <!...脚本 //第二个参数 是否将脚本导出到数据库中执行 se.create(true, true); } /** * 初始化表数据 * 使用一对多的方式来保存数据
一、List集合映射 1、Grade类 2、Student类 3、Grade.hbm.xml 4、Student.hbm.xml 5、HibernateTest...6、数据库 二、Map集合映射 1、Grade类 2、Student类 3、Grade.hbm.xml 4、Student.hbm.xml 5、
NHibernate 多对多映射的数据更新 最近在用 NHibernate 做多对多更新时突然发现 NHibernate 更新的策略很差, 对多对多关系的更新居然是先全部删除再插入全部数据, 感觉非常奇怪...Tip: Use set for many-to-many associations 发现了解决方案, 将多对多的映射的 bag 改为用 set , 问题终于得到了解决, 改过后的映射如下: Set(...NHibernate has no way of distinguishing between duplicate rows....不只是多对多, 如果你的集合需要更新, NHibernate 推荐的是: 19.5.2....sess.Flush(); 由此可见, bag 在多对多映射更新时性能较差, 如果不需要更新,则可以放心使用, 在需要更新时则 set 是更好的选择。
集合 Set Set是一种新的数据结构,类似于数组,但是不能添加重复的元素,基于Set集合的这个特性,我们可以使用Set集合进行客户统计和词汇统计等,集合中常用的方法如下: public interface... 现在先让我们使用基于二分搜索数实现的集合与基于链表实现的集合,都对《傲慢与偏见》这本书进行词数统计,让我们对比一下运行所需要花费的时间,测试如下: /** * 该集合对指定文件进行添加操作所需要花费的时间...你也可以使用我们上面基于链表实现的集合,当你使用基于我们自己实现的集合,提交代码到leetcode上时,你需要把我们自己实现的集合作为私有类一起提交到leetcode上,不然会报错,当然你也可以使用Java...Map接口中常用的操作如下: /** * 定义Map接口,由于Map是用来存储数据对的数据结构,所以定义时需要两个泛型 * @param 键的类型使用泛型代替 * @param 值的类型使用泛型代替...,由于集合种元素也是不允许重复的,和映射种键的唯一性是一样的,所以我们完全可以基于集合,来实现映射,当然也可以基于映射的键,来实现集合。
使用代码配置 NHibernate 多数情况下 NHibernate 使用配置文件进行配置, 但是我们也可以使用代码进行配置, 步骤如下: 1、 创建一个 Configuration using Nhibernate.cfg...") .SetProperty("connection.driver_class", "NHibernate.Driver.SqlClientDriver") .SetProperty("dialect...", "NHibernate.Dialect.MsSql2005Dialect") .SetProperty("proxyfactory.factory_class", "NHibernate.Bytecode.DefaultProxyFactoryFactory...", connectionString); 2、 添加映射 using NHibernate.Mapping.ByCode; var mapper = new ModelMapper(); mapper.Class...> cat.Description, map => { map.Column("Description"); map.Length(200); }); }); 3、 添加映射至
在入门系列的最后,让我们来看看基于hash表的两种常见的数据结构,集合和映射。在Scala里的集合和映射,这两种数据结构都有可变和不可变的两种版本,区别仅仅在于类的继承关系。...集合 先从集合说起吧,集合的意义和数学上的集合论的集合是一样的,里面的值不存在重复,有着集合的交并集的操作。...,使用的是frozenset。...) Python set0 = {1,2,3,4,4} set0.add(5) set0 Out[19]: {1, 2, 3, 4, 5} 这里的set0实际上是重新赋值了,而不是原地添加,所以我们会使用...->作为分隔符,而Python使用了:(八卦下:这个符号通过Python,影响了js,进而成为了json的分隔符),Scala的默认版本是不可变的映射,而不是可变的映射,这也是Scala设计者对于函数式的不可变的推崇的体现吧
由于集合是一个相对上层的数据结构,所以在实现集合时需要定义一个接口,抽象出集合的操作。这样底层无论使用什么数据结构实现,对于上层来说都是无感知的,这也是面向接口编程的好处。...接口定义如下: package set; /** * 集合接口 * * @author 01 * @date 2021-01-18 **/ public interface Set {...使用其他数据结构,例如链表也能实现集合,同为线性结构的动态数组也可以。...所以我们需要定义一个Map接口作为上层抽像: package map; /** * 映射接口 * * @author 01 * @date 2021-01-18 **/ public interface...使用链表来实现映射,与实现普通的链表差别不大,唯一不同的就是链表中的节点不再是简单地存储单个元素,而是需要有两个成员变量分别存储key和value。
集合:元素汇聚在一起,就构成了一个集合。 假设有集合A和集合B。...我们发现,这个和函数的概念非常相似,集合A相当于定义域,映射相当于f。但是集合的概念更加宽泛,正如前面所有,集合A可以是一些名字什么的,但是函数的定义域必须是数字。...---- 定义好了映射的概念之后,根据映射的特点,我们可以对映射继续分类: 单射:对于一个映射,如果给定集合A中的两个不同的元素,经过映射后,得到了B中的两个元素,如果这两个元素不相同,就称这个映射是单射...满射:对于一个映射,如果集合B中的每一个元素都会被A中的某个元素映射到,那么就称这个映射是满射。 注:上面的例子是满射,因为B中是A中元素的父亲,所以给定一个父亲,会被A中某个儿女映射到。...双射:对于一个映射,如果既是单射,又是满射,则称这个映射是双射。 注:上面的例子不是双射。 ---- 总结: 映射使得集合A不多余,即每一个都会被映射到B中去,但是B可能有多余,且不限个数。
1、编写mapper接口 public interface EmployeeMapper { public Employee getEmpById(Integer id); } 2、编写sql映射文件...id} 3、查询过程: 根据xml全局配置文件创建一个SqlSessionFactory对象,其中包含数据源一些运行环境信息,全局配置文件还注册了对应的sql映射文件...使用SqlSessionFactory获取了SqlSession对象使用它来执行增删改查,一个SqlSession 代表和数据库的一次会话,用完关闭 通过SqlSession获取接口的实现类,会为接口自动的创建一个代理对象...,代理对象去执行增删改查 调用接口的方法(接口的方法会映射的具体的sql)得到查询结果 public class MyBatisTest { @Test public void Test...你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句 try { // 3.
上一讲我们通过一些故事讲到了集合的概念和来历,对其意义有了一个基本的认识: 魔术里的集合、映射和关系(一)——集合是个啥? 今天,我们来说说,基本集合到底怎么用,有什么用?...集合的根本定义是某全集到bool集的映射,但发现这个定义竟然使用了概念自身,而有时候要表达的就是全集,或者压根就没考虑全集是什么。...而实际使用的时候,集合的常用表示方法有如下几种: 1. 列举法 例如:{0, 1, 2} 把你想表达的集合的符号编码用逗号互相隔开,用“{}”包起来,用来表示由这些符号所代表的的元素组成的集合。...我们通过集合的定义:全集到bool集的映射,来理解一下这些性质为什么成立。...这样看起来,我们通过学习构建起了任何对象到{0, 1}集合的映射以及多分类的类型映射。一般第一层以bool集作为象空间的这种特殊映射,会先划分出定义域。
dict4 < dict5 结果 True 例子 dict5 = {'abc':456} dict6 = {'aef':456} print dict5 < dict6 结果 True 解释: 映射类型操作符...pass else: print 'login incorrect' return print 'welcome back', name 集合类型和给集合赋值...in 更新集合 add、update、remove、-= 删除集合中的成员 del 集合类型操作符 成员关系 in, not in 等价或不等价 == ,!...= , >= , <= ,子集<、< 联合(|) 等价于OR 交集& 差补/相对补集(-) 对称差分(^) 两个集合(s和t)的对称差分是指另外一个集合C,该集合中的元素,只能是属于集合s或者集合t的成员...,不能同时属于两个集合。
在6.1中我们实现了底层基于二叉搜索树的集合,本节就底层如何基于链表实现进行学习,注意:此处的链表是之前自己封装的. 1、集合set相关功能 image.png 1.1 add()的不同 用于链表本身没有去重的效果...,因此我们在做基于链表的集合时,需要对add()方法做一下特殊处理,如下增加一个判断即可。...list.contains(e)) { list.addFirst(e); } } 2.集合实现 2.1 Set接口定义 /** * 集合的接口 */...getSize();//获取大小 boolean isEmpty();//是否为空 boolean contains(E e);//是否包含元素 } 3.2 基于链表实现集合
我们大多是从课本上知道了他们的定义,从习题上知道了他们的使用,然后就再也没有然后了。...总体:而非个体,这样我们描述的时候就自然使用的是这个全体的性质,而不是某一个具体的对象,英语里的集合名词就取这个意思。 注意,这个总体和个体的区别是很大的,集合不简单是个体的叠加,它还会产生新的性质。...集合来历猜想 延续很早在《加加减减的奥秘——从数学到魔术的思考(一)》一文中的首长数枣子的故事,当他能区分枣子和其他对象的特征以后,自然就形成了枣子的集合,以及它打到的一筐枣子的子集,以及加减法只不过是集合上的性质和运算...像老师,政府官员等,天然不需要太多的知识创造,但却要求把人类这点规矩使用和发挥到极致。要最感同身受地把知识最活灵活现地传给下一代,要在人与人的权衡中最好的使规则发挥效用。...下一讲我们说说集合的表示,性质,运算,以及由此形成的除了单对象构成的集合以外的更高级别的集合,看看这个以bool集作为象空间的特殊函数到底还能建模我们哪些更高级的思维。 老规矩,学会数学,看会魔术。
需要注意的若返回值是List集合,在mapper.xml文件中返回值的类型是集合里面的类的类型。
void main(String[] args) { EnumMapTest.main(args); } } /* * jdk1.5才有EnumMap 与枚举类型键一起使用的专用...枚举映射中所有键都必须来自单个枚举类型,该枚举类型在创建映射时显式或隐式地指定。枚举映射在内部表示为数组。此表示形式非常紧凑且高效。 ...不允许使用 null 键。试图插入 null 键将抛出 NullPointerException。但是,试图测试是否出现 null 键或移除 null 键将不会抛出异常。允许使用 null 值。 ...如果多个线程同时访问一个枚举映射,并且至少有一个线程修改该映射,则此枚举映射在外部应该是同步的。 这一般通过对自然封装该枚举映射的某个对象进行同步来完成。...如果不存在这样的对象,则应该使用 Collections.synchronizedMap(java.util.Map) 方法来“包装”该枚举。
---- 下面通过一张List、map、set图,让大家回想起如何使用这些类 ? 列表List 列表,该接口的用户可以精确控制列表中每个元素的插入位置。...与集合不同,列表通常允许重复元素。 Java中的list是怎么实现的? ? 我们看看List的实现类 ? ?...映射Map 将键映射到值的数据结构。Map不能包含重复的键; 每个键最多可以映射一个值。 Java中的Map是怎么实现的? ? 我们通过查看Map的实现类,熟悉一下Map ? ?...集合Set 不包含重复元素的集合。更明确的说法是,集合不包含相同元素e1和e2,使得e1.equals(E2)为真,并且至多一个null元素。 Java中的Set是怎么实现的? ?...我们看一下Set接口的实现类 ? ?
领取专属 10元无门槛券
手把手带您无忧上云