搭建常规SSHM项目(Spring,Mybatis,Hibernate),阶段3:建立个输出HelloWorld的项目功能,实体类注解与Mapper简化

首先,按照之前配置的包结构,先建立好功能包框架:

搭建常规SSHM项目(Spring,Mybatis,Hibernate),阶段3:建立个输出HelloWorld的项目功能,实体类注解与Mapper简化_第1张图片

这里直接按照一个功能一个大包,按层分包的方式;

先再ctrl里建立个视图数据控制类:

搭建常规SSHM项目(Spring,Mybatis,Hibernate),阶段3:建立个输出HelloWorld的项目功能,实体类注解与Mapper简化_第2张图片

把项目直接拖拽到tomcat里启动一下试试:

搭建常规SSHM项目(Spring,Mybatis,Hibernate),阶段3:建立个输出HelloWorld的项目功能,实体类注解与Mapper简化_第3张图片

搭建常规SSHM项目(Spring,Mybatis,Hibernate),阶段3:建立个输出HelloWorld的项目功能,实体类注解与Mapper简化_第4张图片

这里用的@RestController直接输出Json字符串(不止是字符串,包括实体类,集合等等都会转成json字符串)

其他的,跟一般的springmvc没有任何区别,网上有着大量的springmvc教程和解析,这里就只是检验项目启动是否成功,不做深入;

然后是实体类,这里我们做一个用户注册和登录进行说明;

首先需要整理思路,一个用户作为一个数据实体,有用户名(name),密码(pwd),数据库里保存需要每个用户有一个ID(id);

所以实体类就是:

搭建常规SSHM项目(Spring,Mybatis,Hibernate),阶段3:建立个输出HelloWorld的项目功能,实体类注解与Mapper简化_第5张图片

是的,这里就是完整的实体类!

说明一下:横线注释上面三个注解是lombok提供用来简化实体类的专门注解,它会在代码编译时加入getter和setter,空参构造,全参构造,重写的toString等等与以前定义实体类相关的代码,我们只需要写好有什么属性参数就好下面俩注解,是告诉Hibernate这个实体类对应的表是什么;属性参数上的注解,就是告诉hibernate这个在表中是哪列,这个列是什么属性,比如ID列不可为空,不可更改,可以插入,长度是64,类型根据属性的定义类型自动转成数据库定义类型,所以一般情况下不需要特殊说明(如果需要特殊定义列属性,可以在里面添加columnDefinition=""参数,字符串写上列定义就可以了)

用过hibernate的程序员都知道hibernate会按照实体类与表的差异,根据之前hibernate配置对表进行一定的更改(前提是hibernate.hbm2ddl.auto设置的是可更改值),之所以推荐update,是因为实测中,更改了实体类默认会在表中开辟新列,而不是改原有列(可能是非空列删不了吧....)

注解写好,这样就不用费力关心数据库那边,没有的表就自动生成,不对的列就自动修改,省心....

这里还需要注意一下,尽量保证属性名和列名保持一致(这里说的一致是忽略大小写,刨除特殊符号后字母顺序一致),这样mybatis执行select的结果可以直接封装为实体类,不用再写属性-列对应关系了,而且使用hibernate自动生成的列一般也不会出现类型转换问题(过长的varchar,blob,clob除外,我就遇到过这种坑...hibernate定义4096长的String会被转blob,然后mybatis想都没想的就按String读,然后报错-__-...mybatis的内心都懵逼了)

然后做个用户注册的Controller,service

没啥好说的:

搭建常规SSHM项目(Spring,Mybatis,Hibernate),阶段3:建立个输出HelloWorld的项目功能,实体类注解与Mapper简化_第6张图片

启动一下,发现hibernate报错,表名无效

-__-

换个名,叫TESTUSER好了

搭建常规SSHM项目(Spring,Mybatis,Hibernate),阶段3:建立个输出HelloWorld的项目功能,实体类注解与Mapper简化_第7张图片

(做个讲解类文章还这么打脸>__<)

然后service里做好保存用户的操作:

搭建常规SSHM项目(Spring,Mybatis,Hibernate),阶段3:建立个输出HelloWorld的项目功能,实体类注解与Mapper简化_第8张图片

把参数给到实体类里,保存实体类:

搭建常规SSHM项目(Spring,Mybatis,Hibernate),阶段3:建立个输出HelloWorld的项目功能,实体类注解与Mapper简化_第9张图片

这里用的是HibernateTemplate直接保存执行保存,方便省事;
搭建常规SSHM项目(Spring,Mybatis,Hibernate),阶段3:建立个输出HelloWorld的项目功能,实体类注解与Mapper简化_第10张图片

我就不写页面了,直接写Get参数了,这样注册的用户就可以保存到数据库了

接着是读取用户,这里直接就做了读取库中所有用户的列表:

ctrl层:

搭建常规SSHM项目(Spring,Mybatis,Hibernate),阶段3:建立个输出HelloWorld的项目功能,实体类注解与Mapper简化_第11张图片

svc:

搭建常规SSHM项目(Spring,Mybatis,Hibernate),阶段3:建立个输出HelloWorld的项目功能,实体类注解与Mapper简化_第12张图片

创建了一个mapper,并用这个mapper查找

mapper:

搭建常规SSHM项目(Spring,Mybatis,Hibernate),阶段3:建立个输出HelloWorld的项目功能,实体类注解与Mapper简化_第13张图片

这样mybatis就会执行这个mapper里getUsers()方法,虽然没有实现类;根据方法上的注解,执行SQL语句,根据方法返回值,自动封装返回值

这个是mybatis推荐的写法,因为Spring在做去XML化,mybatis和hibernate也相应的推出了很多注解;如果想动态SQL语言的话,可以使用@SelectProvider/@UpdateProvider/@InsertProvider,可以实现动态SQL;

到这里,项目框架大体完成,只需要按照一定的包结构把搭建功能就可以了

你可能感兴趣的:(Spring研究)