Spring boot整合jpa(一),根据表生成实体

好吧,虽说是jpa和mybatis各占半壁江山~而且也知道各有利弊~~但是!单凭jpa现在已经入驻spring家族一点,就让我更加喜欢使用和放心使用~~

所以一般项目中没有明确需求还是使用jpa多一点的。以前曾传说hibernate相比于mybatis比较重而且不灵活,但是我觉得自从data-jpa出生以后,spring已经把大多数的底层封装好了。你不得不承认的是,单从使用角度来讲,jpa远比mybatis配置少而且使用方便。

首先如果第一次接触jpa我建议大家在spring官网了解它。讲真,这么多使用的框架中,我最喜欢的就是spring系列的官方文档(也可能是我一开始接触的就是spring所以比较熟悉。反正我是觉得spring的文档简单明了)。

废话就说到这吧,继续说正题。spring boot简单整合jpa。

1,创建一个spring boot项目,导入jpa依赖和数据库依赖:

<!-- jpa依赖 -->

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-data-jpa</artifactId>

</dependency>

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<scope>runtime</scope>

</dependency>

因为我用的是mysql所以导入的是mysql的依赖。大家可以根据实际情况导入。

然后在配置文件中配置数据库连接配置,这里用yml或者properties都可以。因为我只是做个demo,所以直接使用boot自带的properties了,如果你习惯使用yml也ok的。

spring.datasource.url = jdbc:mysql://101.132.119.151:3306/ourtowns?characterEncoding=UTF-8

spring.datasource.username = root

spring.datasource.password = root

spring.datasource.driverClassName = com.mysql.jdbc.Driver

#这两句为了前端传过来的时间格式统一并且去除时区差别

spring.jackson.date-format=yyyy-MM-dd HH:mm:ss

spring.jackson.time-zone=GMT+8

server.port=8099

#jpa配置  不加这个设置会因表名与实体名大小写不同而找不到表

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

#这句是为了控制台显示sql语句。调试的时候很有用呦~

spring.jpa.show-sql=true

#spring.jpa.properties.hibernate.format_sql=true

这个是我的配置文件。

除了数据库的四行设置还定义一个jpa的不区分大小写。然后控制台显示sql语句。

需要注意的两点:

1,驱动问题。 

mysql5.7版本以前都是com.mysql.jdbc.Driver

 5.7版本以后是com.mysql.cj.jdbc.Driver(这个版本我没具体试过,但是我很确定8.xx版本的肯定是新的这个。)

2,jpa有个很屌的功能就是可以根据实体生成表。我亲身经历:第一次启动项目,把表导成实体了。第二次启动项目就是因为没配置大小写所以jpa一看实体有的表里没有,结果刷刷刷几秒钟~~把我几十个实体对象大小写明确的又导进数据库里了~~啧啧,一段挺有意思的印象深刻的经历。

其实正常来讲这么配置以后spring boot+jpa的框架就搭完了。接下来虽然领域模型推崇根据实体生成表,但是我们大多数还是传统做法,表生成实体。关于这个生成实体,手敲有点恶心人。还好的是有插件可以自动生成。因为我是用eclipse开发。所以这里讲一下eclipse如何根据表生成实体:

第一步,右键项目->properties

第二步:找到Project facets并且点进Convert to faceted form

第三步:到了这个页面点击JPA。需要注意一个问题,这个jpa对jdk版本有要求。不达到会弹出警告

第四步:勾选jpa以后会让你further congiguration available(进一步配置可用的。。我没看到过全文~~)

第五步:上个步骤点进来就是是这个页面。如果你是第一次配置,直接加连接就好。点击 Add connection.。

对了 ,这里的配置说一下。在最下面的两个选项中,第一个discover是每次启动都自动扫描覆盖实体。然后我再说下我的用法吧。我一般都是demo项目使用这个插件从表导成实体,然后再复制粘贴到自己的项目里。然后表中再有改动就手动更改实体了~~

第六步:在此可以选择你想要连接的数据库,并且创建连接。因为我demo是用mysql做的,毕竟主流。没啥太大的坑。

不过在这我要声明一下。如果是用sql server数据库。选择驱动的时候,我反正18年用的时候14.16版本驱动都不能用。剩下这一年没用过sqlserver了所以不知道现在怎么样了。还有因为我mysql的连接已经有了,为了表现效果所以截图用sql server来演示。


第七步:选择好驱动版本以后到jar list这块就需要相应的jar包了~。每个驱动版本所需要的是不一样的。不过在上面有提示。你完全可以按照jar的名字去百度上下载。应该都挺好找的,大把的资源~~。划重点是每个版本的驱动需要的jar可能不一样!千万别经验主义!

然后现在你看到的是一个例子,你需要做的是先clear在把你自己准备好的jar包add进来。然后账号密码库名url之类的按照你自己的配置完就点击ok吧。

第八步:点击ok后会跳到下面这个页面。我建议大家都测试一下连接在使用~~万一马虎拼错了什么呢?测试ok了再点finish


第九步:又回到了第五步的页面。把connection换成你刚刚配置好的那个,点击ok就好了~


刚刚是配置连接,接下来就要从表生成实体了。

1,右键项目。两种方法都可以,如下图:


2,上面两个位置的entities from tables都会进入到这个页面。确定连接是对的。如果你设置了每次都要申请连接就点击图上框起来的按钮。

(我建议大家这么配置,如果不是每次都要连接那么可能你数据库做出更改但是这里的表不变。如果进到这个页面直接显示数据库和表证明你没这么配置。)

3,选择你想导入的表。下一步。(右侧第一个按钮是全选)

4,这个页面可以设置表(实体)的关联关系。但是我一般都是代码关联。这里都是默认选项

5,这个页面可以设置实体的一些属性。第一个key的这个是主键方式。我一般都是选择none然后自己维护主键。

package是选择你生成实体的位置。一般也都有自己的包结构~~~~(其实如果配置好了在这直接finish就行了)

6,有些页面没看过会觉得遗憾~~虽然上个页面就可以ok了但是还是要看看最后这个。其实还是实体的设置。就酱~~finish后~~实体就自动生成啦~~

将一些jpa直接生成实体的小坑(针对mysql数据库):

tinyint类型会转换成byte型。

decimal类型转换成BigDecimal型。

long类型会转化成string类型。

还有一个奇奇怪怪的被转化类型我忘记叫什么了~~

暂时我遇到的就这么几个。其实也不算坑 ,就是如果不知道可能犯一些经验主义错误~~然后其实手动改这个实体的属性就好了~问题不大~~建议大家生成实体的时候大略检查一下~~我再声明一下我的使用方法。我是demo项目里生成实体然后复制粘贴到实际开发的项目中~~这样可以省了好多不必要的麻烦~~比如说用了插件以后实体改动会报错~~虽然不影响运行但是我这种强迫症受不了反正~~

哎,本来是想连生成实体带简单应用的~~结果可能是我太墨迹,生成实体就截图编辑上传解释的弄了n久~~所以jpa的简单使用明天再写吧~~如果看了还有不懂的或者出错的可以私聊或者留言~我看到了会尽量帮忙看看~~

喏,手打不易,大家动动小手分享转发点赞评论啥的~~~~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容