(二)模仿学习-DAO数据的模仿
我们从网上下载一份代码学习,模拟如果在实际工作中,我们入职的时候会首先拿到一个不复杂但是技术比较老的项目,因为作为新人很难去直接参与大而且新的项目进行开发。
- 我们从网上搜一份代码,先下载下来,代码如下:
![](https://img.xiumi.us/xmi/ua/rSJP/i/48d5cec8831d3b0e16696651e72e6db7-sz_9452.png)
代码的地址:
https://url56.ctfile.com/f/34653256-665303764-679728?p=7567 (访问密码: 7567)
- 将数据库导入到我们本地
![](https://img.xiumi.us/xmi/ua/rSJP/i/e6040ec27749668aff1e9aaa17d6958a-sz_25090.png)
- 将项目导入到本地环境中
- 首先我们将项目拷贝到我们的工作开发环境中
![](https://img.xiumi.us/xmi/ua/rSJP/i/acd1274122813cc2eac8c1fc2e439bc4-sz_35952.png)
- 在IDE中导入(Eclipse、MyEclipse、IDEA都可以)
![](https://img.xiumi.us/xmi/ua/rSJP/i/54c11b8fb35b3156f7d7dfe175f23b45-sz_67191.png)
然后
![](https://img.xiumi.us/xmi/ua/rSJP/i/e5edffe0424998d63072872f0fac077f-sz_43879.png)
继续
![](https://img.xiumi.us/xmi/ua/rSJP/i/69149c379f82482d62eb7089a47c2db2-sz_85519.png)
项目出现在导航栏
![](https://img.xiumi.us/xmi/ua/rSJP/i/d8ac1f9bf46fbfef8e200b792a3277a6-sz_30381.png)
- 改动数据库连接的地址
因为所有的项目一定会有数据库的地址配置,不管是用的那种框架。所以我们需要找到对应的文件进行更改。修改下面的数据库密码和账户为自己的数据库地址。
![](https://img.xiumi.us/xmi/ua/rSJP/i/4bce52483f38d05dfa021944b0f49100-sz_203333.png)
- 一般此时我们只要下载的项目没问题,就可以运行了,我们使用Tomcat作为应用服务器,但下载的这个项目需要做一下转换,将项目转换一下,转换的位置如下:
![](https://img.xiumi.us/xmi/ua/rSJP/i/f4325c6e076cd78e4c3bb7a52d9d901d-sz_129234.png)
转换项目
![](https://img.xiumi.us/xmi/ua/rSJP/i/5276c4a66d09d0c4a885abaed64c8913-sz_77008.png)
转换完进行勾选
![](https://img.xiumi.us/xmi/ua/rSJP/i/c04f5f943fa67f3bc98edb9f0aee42d3-sz_121533.png)
接下来更改一个目录
![](https://img.xiumi.us/xmi/ua/rSJP/i/add97e061d22275dbbd553fb8dc772a9-sz_221181.png)
目录更改如下
![](https://img.xiumi.us/xmi/ua/rSJP/i/d232042c4a8328f2e90284f023dc8656-sz_98159.png)
添加到Tomcat应用服务器中
![](https://img.xiumi.us/xmi/ua/rSJP/i/f051b96eb7a336bef7372a3c694f273f-sz_23411.png)
然后我们可以运行代码了,项目没有报错
![](https://img.xiumi.us/xmi/ua/rSJP/i/e275970ac026409a91c28cda61ba5363-sz_289132.png)
我们在浏览器中进行访问就可以得到对应的项目
![](https://img.xiumi.us/xmi/ua/rSJP/i/7be642bd1f07bef42c29923e85584f18-sz_237573.png)
点击登录后如果出现连接不上,更换系统中的MySQL的连接包就可以。
![](https://img.xiumi.us/xmi/ua/rSJP/i/c03e022ff0fc08dce40ed834a1c82741-sz_38921.png)
- 创建数据库
![](https://img.xiumi.us/xmi/ua/rSJP/i/68a99b64082c5e1e298d2af25fd9bd9a-sz_129993.png)
CREATE TABLE `t_zztl` (
`pid` INT(11) NOT NULL AUTO_INCREMENT,
`xdata` VARCHAR(100) DEFAULT NULL,
`ydata` VARCHAR(100) DEFAULT NULL,
PRIMARY KEY (`pid`)
) ENGINE=INNODB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8
- 创建实体类
- 模仿包里的文件,编写我们自己的实体类
![](https://img.xiumi.us/xmi/ua/rSJP/i/ae124aa6dfeb245309a48c4bad32ed2e-sz_82303.png)
创建实体类,名字模仿包里的文件,比如数据表交t_topic,会有两个文件分别叫TTopic.java和TTopic.hbm.xml这两个文件,我们也创建这两个文件。
![](https://img.xiumi.us/xmi/ua/rSJP/i/6984e68a57e7a5e334d0f08164f6f211-sz_60611.png)
- 模仿这两个文件完成里面的内容
先模仿第一个java文件
序列化和字段
![](https://img.xiumi.us/xmi/ua/rSJP/i/2cf411e63fb00c3a8695952b3ad83b6f-sz_108483.png)
这是这个实体对应的数据表创建语句,可以和上面的字段进行对应。,我们字段的类型和t_topic类似的有pid和author(所以我上面创建语句是按照这个项目里的形式创建的不是乱创建的,就是为了和它的字段匹配)
![](https://img.xiumi.us/xmi/ua/rSJP/i/0547aea6cd47536ce0217c7014a8f5b2-sz_131743.png)
我们只有3个字段,所以字段会比较少,其中get/set字段自动生成。
![](https://img.xiumi.us/xmi/ua/rSJP/i/482403299f227863e6d39ac4c1732e41-sz_128387.png)
多余的字段可以选择不写,但是t_topic中的字段也是少于TTopic.java中的字段?是因为只要包含数据库中的字段,可以在TTopic.java中写更多的属性是影响的。
TTopic.java里面有构造函数,我们也生成两个构造函数
![](https://img.xiumi.us/xmi/ua/rSJP/i/8ace84c3a34f49d24a349ca0d0a269ee-sz_81046.png)
自动生成一下,也可以自己写
![](https://img.xiumi.us/xmi/ua/rSJP/i/b23a793a008c072b66f59483f05fa08d-sz_80900.png)
后面没有了模仿的了,我们来看TTopic.hbm.xml。因为hbm.xml是hibernate的配置文件,所以要按照这个命名,如果你知道就直接写就可以了。
![](https://img.xiumi.us/xmi/ua/rSJP/i/4a1f683f3f0ebc721fad7c32e15e3a04-sz_320012.png)
按照上图里的内容,我们做下面的更改
![](https://img.xiumi.us/xmi/ua/rSJP/i/09d43c438169bdaf3700b727d50a64da-sz_121851.png)
2、我们继续模仿DAO
![](https://img.xiumi.us/xmi/ua/rSJP/i/ff068ae2ecedbf345490481fdb0710fe-sz_58192.png)
先看我们的模仿文件TTopicDAO,先读这个文件。
![](https://img.xiumi.us/xmi/ua/rSJP/i/e34b3584330b0c19e4fb9ddc298e745f-sz_144532.png)
根据这个文件的内容,我们需要写下面的部分
![](https://img.xiumi.us/xmi/ua/rSJP/i/65c01e0ab5ef717fe9d3df7009e27737-sz_103242.png)
extends HibernateDaoSupport表示继承Hibernate的框架支持
private static final Log log = LogFactory.getLog(TTopicDAO.class);是表示日志的
![](https://img.xiumi.us/xmi/ua/rSJP/i/7fcfcc3ed62b2f95ec23dfc1cf652771-sz_52857.png)
然后就是字段属性
我们已经知道t_topic是有这样的字段
![](https://img.xiumi.us/xmi/ua/rSJP/i/d5ab09eb841ab5289c11705a6fb86598-sz_143329.png)
所以这些字段和数据库是有关系的
![](https://img.xiumi.us/xmi/ua/rSJP/i/095d222dc6b32615e955784d00fab7ba-sz_79431.png)
那么我们取字段也是按照数据表中的字段保留
![](https://img.xiumi.us/xmi/ua/rSJP/i/f507e284ebe13f8e330e24f4d63fc666-sz_59796.png)
继续模仿,下面这个在注释里写了什么都不做,但是我么可以通过名字和修饰符判断出来是要进行初始化的。
![](https://img.xiumi.us/xmi/ua/rSJP/i/5c33cbe28d02303f160d0a5380a15287-sz_111356.png)
接下来这个方法从名字是看是要用来保存的,其中log.debug和log.error类似于system.out.println()使用来显示日志信息的,可以选择不要。只要更改实体就可以了。
![](https://img.xiumi.us/xmi/ua/rSJP/i/54207adc575886a2c482d09425bbe3dd-sz_102554.png)
更改后看一下
![](https://img.xiumi.us/xmi/ua/rSJP/i/f43dc9e58394801160eae1352f0f000b-sz_168838.png)
下面这个类似,表示的是删除
![](https://img.xiumi.us/xmi/ua/rSJP/i/efbb8d7f8cbe27cfa27338b5d70021cc-sz_75254.png)
下面这个表示通过编号查询,所以有一个参数是id编号
![](https://img.xiumi.us/xmi/ua/rSJP/i/45b19bf09bcfc98f00c0fea78f3b73e1-sz_52474.png)
我们把这两个复制过来进行改动
![](https://img.xiumi.us/xmi/ua/rSJP/i/1c7394872e1fe427f9eefd3faecf1027-sz_119946.png)
其中findById中一些内容注意
![](https://img.xiumi.us/xmi/ua/rSJP/i/c8e280f623eefaa892f04d28a1f8f693-sz_68215.png)
然后是下面的方法,这个可以理解为查询多个,多属性查询
![](https://img.xiumi.us/xmi/ua/rSJP/i/270435933bc125547ba3dae0c5439183-sz_61160.png)
这是更改后的,这个的用途可以理解为有多个字段查询的时候不需要单独一个个的写,比如通过xdata和ydata两个查询,就可以这个方法。
![](https://img.xiumi.us/xmi/ua/rSJP/i/1945dc85aeab1f18b1fcd3b5e8fb6da5-sz_92312.png)
接下来的函数
![](https://img.xiumi.us/xmi/ua/rSJP/i/176814a729285dd21996ebc53dbdfa38-sz_102504.png)
这个函数通过名字我们就能知道这是通过属性或者字段去查询的,是单个属性字段。指定属性名和属性值的方式。
![](https://img.xiumi.us/xmi/ua/rSJP/i/7de26fcaeb885515dcc951f345b590a9-sz_82001.png)
继续往后的函数
![](https://img.xiumi.us/xmi/ua/rSJP/i/810ebfd2b93587305c79e82f3a8411db-sz_150085.png)
这个是通过某一个具体的属性完成的,我们只有三个属性,所以只需要写三个就可以了。但本质上是通过上面的属性名函数去查询的。
![](https://img.xiumi.us/xmi/ua/rSJP/i/a99d3cd4aeb996aade2246503dbe8f10-sz_106062.png)
最后一个是查询所有的
![](https://img.xiumi.us/xmi/ua/rSJP/i/c6dd19f2be2d51711659eb04dd759324-sz_52151.png)
这个是查询所有数据的,如果数据量不大可以使用,数据量大的话就不要使用了
接下来这几个函数涉及到
![](https://img.xiumi.us/xmi/ua/rSJP/i/82123b42f3edc4e95f4db665d6138dc6-sz_87992.png)
Hibernate的一些专业术语,我们如果对这个不感兴趣或者以后工作用不到,就模仿的写就可以了。这几个概念是持久状态,托管状态,瞬时状态。
![](https://img.xiumi.us/xmi/ua/rSJP/i/f0260f849d0438e5e0a1c3c38313afda-sz_136115.png)
我们直接模仿了
![](https://img.xiumi.us/xmi/ua/rSJP/i/cf81ce8e1d534476ffd77259f806fcf9-sz_187727.png)
还有一个
![](https://img.xiumi.us/xmi/ua/rSJP/i/696803b6389c32eeb174959d86e56b57-sz_31697.png)
这个可以理解为,获取实例对象。
![](https://img.xiumi.us/xmi/ua/rSJP/i/5a33f864d3701062c91e5aa387b3b7d6-sz_63476.png)