00:00
这个hello word的这个程序的话呢,我们就写好了啊,我们现在我们详细的来解释一下我们这个hello word第一个啊,准备harmlet环境,我们需要导入两组价包,第一个就是harm这个价包,这包在哪啊,Open source4.2.4lib。Required,全部吧,哎,这个下边呢,全部的包都有,这是harmlet所需要的包,还需要导入一个什么呀?买色的数据库驱动吗?需要导入一个这个包啊,两种加包好了。开发的步骤。第一步我们需要来编写一个harlet配置文件,这里边放的是什么呀?是不是Hart一些底层信息啊,比方说连数据库的信息啊,是不是显示circle啊,是不是生成数据表啊,哎,这样的一些信息。第二步我们编写了一个持久化类,就是我们那个news。第三步我们创建了对象关系映式文件,哪个文件呢?LBM那个吧。第四步啊,通过哈的API来编写了访问数据库的代码,我们实际上我们执行了一个保存操作。
01:26
一个一个看一下,第一个Java这个持久化类有什么要求,第一个要求必须提供一个无参的构造器,能有什么用啊。反射吧,OK,看一看它具体有什么用,我们找到这个,大家看我这块我是不是保存呢,现在的话呢,我想获取一下六六度等于section点。
02:03
就点plus注意一看。我数据表里边的话呢,刚才新插入了一条记录,ID是一五,打开ID是一吧,OK,我要嗯,给他获取出来,而且要打印一下。红血兔子的方法。保存好这个方法的话呢,我重新执行一下。怎么还是银色音兔呢啊,没保存。这种。
03:02
这是不是一个select是不是打出来了,哎,这就是一个,嗯,获取的操作select吗?那很明显,这个时候harm在底层帮我创建这个实例的时候,用的是不是反射呀,反射吧,实际上你从我们这个全类名这块你也能看到是吧,凡是给全类名的基本上都是反射。是这样吗?哎,凡是给全类名的基本上都是反射,所以说第一个要求必须提供一个无参的构造器,第二个要求我们需要提供一个标识属性,就是那个OID。这个的话呢,没什么说的啊,嗯,正常情况下必须提供下一个啊,为类的持久化字段提供访问方法,那这个属性的话呢,是通过get set来定义的,所以说需要提供get跟set,我们需要定义一个非final的类,因为final那个类啊,不能够给它生成代理,我们有的时候的话呢,我们需要使用那个叫延迟加载。
04:12
我得到的是一个代理对象,只有是一个非final类才可以,那我如果需要把这个对象保证到集合里边的话,可能还需要来重写E口子跟哈西扣,那我正常的一个张阿B是可以满足这些需求的。持久化类,我们这个账号这个持久化类有一个好处是什么呢?它不需要继承任何父类和实现任何接口啊,这样可以保证这个代码不被污染,所以说har har是一个低侵入式的框架,就是没有没有侵入,你这个就是这么光杆的一个什么呀,一个照压壁,你不需要实现任何接口,继承任何类,这是非常好的。
05:02
下面我们来看这个对象关系映射文件,实际上指的是谁呢?指的是这个文件。搞错了,这个我们也可以大致的来看一下啊,叫对象关系映射文件,对象类属性关系数据表字段,好了,这不是一个类,类名这一块指定的那个数据表的表明属性名指定。列明啊,指定了数据库的,呃,指定了这个组件的生成方式。来。指定组件的生成方式,我们这块这个native是什么意思呢?使用数据库底层生成方式,比方说我们这个是circle,它就自动的使用那个征好底下这个property跟column,这个比较简单了哈,我们就不再一个一个解释了。
06:25
属性名类型column name,这是不是列名啊?OK harm采用XL格式的文件来指定对象关系之间的映射。运行时,Harm将根据这个文件来生成各种SQL语句,因为它指定了哪一个类和哪一个表对类的属性和哪一个。哪一个列哪一个字段对,那扩展名是HBM.xxml,下边就是这个harmlet的映射文件,这个映射文件的话呢,默认这个名叫harmt.C mg.XML吧,啊就是这个文件,这里边的话呢,我们可以指定一些基本的配置信息。
07:16
过来看,比方说指定连接数据库属性的啊,什么username password general class ul,我们还可以指定harmont使用的这个数据库方言,我们现在这个是my circle DB,你要是or口的话,这个方言肯定是不一样的,那harmlet将根据这个方言来生成一些针对于这个数据库特定的SQL语句,比方说分页的number,或者是limit。搜circle口运行的时候呢,是不是来控制来打出circlel语句format circle是否对circle进行格式化?什么叫格式化呀?你看我这语句是不是不是打在一行啊,这就叫格式化,把这个语句,我把这个我改一下,大家看一下来,我改成false。
08:10
再瞧是不是就在一行了,那很明显是处的话,是不是更有利于我们去阅读啊。啊,H bm to d dl指定运行时生成数据表的策略,我们现在的话呢,暂时你先知道哈,取update还有他几值,我们详细一指定程序需映射的,注意的是这个呃,目录结构径,而不是那个包明是斜杠而不是点下一个就是通过这个哈API来访问数据库了,那这这个代码的话呢,我们刚刚才写过哈,下面我们来详细解释一下里边的每一个API代表神么意思。
09:08
嗯,来第一个configuration叫什么呀?叫配置吧,啊,这个就是去加载那个harmme c fg这个XL文件了啊,这里边包含两部分内容,第一个harmle运行的底层信息,像什么ul啊,用户名啊,JDBC驱动啊,数据库方言啊,数据库连接池啊啊等等等等,嗯,我们这里边还没有连接池啊,回头我们,嗯,在后边的话,我会讲到这里边我还可以使用数据库连接池。好了,还有一部分内容就是持久化类跟数据表的映射关系,这是一个HBM.xl文件,把这个怎么样,是不是包含进来的呀?使用的哪个节点啊?Mapping吧,Mapping resources,把这个包含进来。
10:00
嗯。啊,创建configuration的方式,我们可以直接去new一个configuration,你要是就这样写的话呢,它关联这个harm,那个配置文件是harm properties,我们也可以看一下哈。打开找到hamlet4.2。Project ETC,大家看到这块是不是有一个harmon properties啊,哎,我这个映射文件的话呢,我这个harm配置文件呢,我也可以用这样的格式来指定,但是我们现在的话呢,嗯,推荐使用的是X苗的格式,所以说我们通常情况下不用这样的方案,那我们可以XL文件的话呢,使用这样的方式,那使用这样的方式我是不是就是关联到默认的那个harm cfg X xml啊,刚才看过那个源码了吧,在这呢。嗯。
11:02
哦,就是关联。这路径下的这个harmon c fg.XL,如果这个文件名要是其他名的话,你还可以使用其他的重载的方法,比方说conig里边可以有一个file啊,包括有一个string啊都可以,那我们推荐的主流的方式的话呢,是这个方式,嗯,这里边的话呢,我们需要知道这个confiration configuration是干什么的,第二还需要知道如何来创建这个对象。第二个session factory叫什么呀?叫的工厂类,这是针对单个数据库映射经过编译后的内存,内存镜像,这个家伙呀,是线程安全的。那这个对象一经被创建以后的话呢,被赋予的信息就不会被修改了。
12:00
这是生成session的工厂,构建这个比较耗资源,一般情况下我们在一个项目里边只有一个session factory实力,那我们在HARMON4里边的话呢,我们有一个service resistry啊,所有基于harmon的配置或者是服务都必须统一向这个resist注册以后的话呢才有效,所以说这harm那四里边所说这个3FACTORY跟三比的话呢,就费点事。就是我们需要分为这样的三个步骤,创建configuration,创建service,然后再来创建session factory,就像我们这块这个步骤一样。嗯,第一步第二步第三步OK。再下一个session接口,我们看到这块的话呢,我们画了一个图,大家看一下我最底下这个是什么呀?客户端应用吧,然后往上对的就是接DBC,这个档上对的是谁呀?叫connection连接十吧,哎,这个上面对的是session factory,再往上这个对的是connection吧,这个对的是session啊从一定意义上讲,他们之间会有这样的一个对应关系,然后这个session怎么去操作的,这个嗯,具体的这个嗯,数据库呢,它实际上也是通过connection,它只不过对connection进行了包装啊,这是我们整个的一个对应关系,Session是。
13:35
应用程序跟数据库之间交互操作的一个单线程对象,它是harmlet运作的中心。harmlet对持久化对象的所有操作都必须在session下。来进行,那我们后边我们会讲到这个对象的这个,呃,生命周期有一种状态叫持久化状态,就是跟三身关联的时候,它才能是一个持久化状态,这个时候哈才能够感知到我这个对象属性的变化。
14:10
这个对象的生命周期很短,里边有一个一级缓存啊,后边这些细节的话呢,我们后边我们还会继续来学习啊,大家只需要知道是吧?这个对象非常重要,它相当于阶BC里边的connection,但它实际上的话对connection有一个包装的效果,好了,这样往下来session。Session里边有一些常用的方法,比方说,呃,取得持续化对象的方法,Get loads,保存save update save update delete。Begin transaction啊,管理session的,比方说is open flash clear等等等等,我们在下节课会详细来讲session里边的大部分的核心方法。
15:01
下一个transaction事物,事物本身不用说了,是吧?它代表了一个原子操作,它具有数据库事物的概念,这就是transaction,那任何操作都必须在事物下进行。特别是修改的操作要添加呀,删除啊,这个修改呀,必须有事物,你没有事物的话呢,操作不了,那我读的时候是不是也要有事物呢?哎,我们推荐也把这个事物加上好了,这里面有方法,Commit was committed,检查这个事物是否提交我回来我们看一下哈。我把这个呢给它涂掉,我把这个呢打开,注意我把这个事物拿掉,大家看这个时候我是不是要执行一个保存操作呀,没开事物吧,那是个什么效果,走他也执行了一个颜色,看看数据表。
16:11
第二条是我刚才擦的吧。刚才我们不是有一个误操作吗。在看来,一条记录再走一遍。啊,看上去这块打了一个in色,看看进没进来是没进来呀,你没开事物吗?我把事物开开。打开了再看。数据表是不O了呀,你咋是五啊,刚才我是不是始终尝试这插入啊,我每次尝试都会使这个ID值加一是吧,我们在这个讲序列的时候,二序列的时候,我们讲过在什么情况下可能会出现那个裂缝,大家听过吧,就是这个ID它不是连续的,这无所谓是吧?嗯。
17:08
现在我们来说一下哈密两个配置项吧,第一个auto,这个取值呢,可以取值为create update create job跟valid一个一个看一下,通常情况下使用update,我们详细来解释一下其他几个哈,第一个create,用create的话呢,我每次都会形成,呃,每次都会生成新的数据表。即便是第二次跟第一次一模一样的话,它也会生成新的数据表,所以说它会导致什么呀,它会导致你在前一次保存这个数据,在第二次它就没了,我用一下大家看一看,我找到我的harmlet配置文件,把这个改为。
18:07
把这个关掉了啊,大家注意这里面的话呢,目前有两条记录好,我走一个。再过来看刷新是不就一条了,因为它重新生成数据表,就是每次运行都生成一个新的数据表,这就叫create,下一个create job,这个更绝是吧?创建之后我就删,只要有这个satfacty close的话,这个表就会自动删除了,看一下create一次性的是吧,我用完之后的话我就删除。看看。啊,这个的话呢,正长直行,你看是不是删了呀,这个时候已经没了没了吧F5。
19:01
没有数据表好了,最常用的呢是update就更新,那如果啊,我新的一次运行,我发现这个数据表跟以前一模一样的话,OK,我不动,如果发现这个数据表结构不同了,嗯,那我就进行更新,但这个更新呢,它不会删除已有的行和列,已有的它不会动。我们来试一下这个update,把这个改为update。保存保一个。看一下我们的数据表。大家看ID title author跟date没问题,我现在呢,把这个表结构修改一下。啊,比方说这个开头,这个列名,我改为use。Title。来执行。诶,我们看这个circle的话,你就可以看出来是吧,这个时候这个列名已经变成了news抬头。
20:05
刷新一下,确实是多出了这样一列吧,啊,多出这一列,但是先前的这个title跟以前这个记录呢,并没有被删除。这就是。Update。最后呢,来看一下这个。检验。那。这个取值呢,它将起到这样的一个作用,就是如果呃,我当前HBMXL所对应那个数据表跟现在已有的数据表要是不一样的话,它会抛一个异常。但是他并不会实际上去修改那个表。回来我把这个呢改为。Validate。保一个。
21:01
目前这个没有任何问题,因为这个表结构是一样的,我让这个表结构不一样。比方说啊,我这块加一个二吧。不一样了,表结构不一样。效果。这个时候呢,他会抛一个异常,他说在这个数据表里边没有这一列。但他不会对那个表做出任何的改变。好了,以上的话呢,就是我们h bm to d dl.auto这样的四个取值,其中最常用的是这个update。那这里边说的这个第二个配置项呢,是format circle,这个我们在前面已经说过了。
我来说两句