个人随笔
目录
十一、数据访问-3-SpringBoot2.0整合jpa
2020-09-11 22:35:09

现在,我们来用SpringBoot2.0来整合jpa,为什么到现在才写这一篇博文呢,实话告诉大家,之前都整合失败了,访问一直报错,原因是JPA @column字段命名,默认驼峰转换(后面实体类会说下),非常感谢大神的指点,接下来开始整合吧。

环境

  1. jdk1.8_73
  2. apache-maven-3.5.3
  3. springboot 2.0.0.RELEASE
  4. eclipse Oxygen.3a Release (4.7.3a)

一、流程

页面结构如下

1、新建一个springboot2.0的项目

这里项目名称为:springboot-jdbcTemplate

2、pom.xml中添加如下依赖

我这里都是基于二、快速入门-Hello SpringBoot,来添加相应的依赖的。

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-data-jpa</artifactId>
  4. </dependency>
  5. <!-- mysql依赖 -->
  6. <dependency>
  7. <groupId>mysql</groupId>
  8. <artifactId>mysql-connector-java</artifactId>
  9. </dependency>
  10. <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
  11. <dependency>
  12. <groupId>com.google.code.gson</groupId>
  13. <artifactId>gson</artifactId>
  14. </dependency>

mysql依赖是链接数据库,gson是为了回显给页面

3、配置mysql数据库连接信息

在application.properties加入如下内容

  1. #数据库连接信息
  2. spring.datasource.url=jdbc:mysql://127.0.0.1:3306/weixinser
  3. spring.datasource.username=root
  4. spring.datasource.password=forever
  5. spring.datasource.driver-class-name=com.mysql.jdbc.Driver

4、新建MyController类如下

  1. @RestController
  2. public class MyController {
  3. @Autowired
  4. private MyService myServcie;
  5. @RequestMapping("/getUsers")
  6. public String getUsers() {
  7. String user = myServcie.getUser();
  8. return user;
  9. }
  10. }

5、建立MyService,MyServiceImpl类

a、MyService
  1. package cn.forever.service;
  2. public interface MyService {
  3. public String getUser();
  4. }
b、实现类MyServiceImpl
  1. package cn.forever.service.impl;
  2. import java.util.List;
  3. import java.util.Map;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.jdbc.core.JdbcTemplate;
  6. import org.springframework.stereotype.Service;
  7. import com.google.gson.Gson;
  8. @Service
  9. public class MyServiceImpl implements cn.forever.service.MyService {
  10. @Autowired
  11. private JdbcTemplate jdbcTemplate;
  12. public String getUser() {
  13. List<Map<String,Object>> users =jdbcTemplate.queryForList("select * from user");
  14. Gson gson = new Gson();
  15. String user = gson.toJson(users);
  16. System.out.println("users:"+user.toString());
  17. return user;
  18. }
  19. }

6、User

  1. @Entity
  2. @Table(name="user")
  3. public class User{
  4. @Id
  5. @GeneratedValue(strategy = GenerationType.IDENTITY)
  6. private Long id;//自增的ID
  7. @Column
  8. private String username;//用户名
  9. @Column
  10. private String userId;//这个用来存放用户的userId,不要用自增键太不安全
  11. @Column
  12. private String password;//用户密码
  13. @Column
  14. private String nickname;//昵称
  15. @Column
  16. private String imgUrl;//用户头像
  17. @Column
  18. private String sex;//用户性别0女,1是男
  19. @Column
  20. private String age;//用户年龄
  21. @Column
  22. private String create_datetime;//用户创建时间
  23. @Column
  24. private String update_datetime;//用户修改时间
  25. @Column
  26. private String type;//用户类别0是管理员,1是已登录用户,2是游客
  27. @Column
  28. private String remark;//用户备注
  29. @Column
  30. private String visible;//用户是否有效
  31. @Column
  32. private String value;//预留字段
  33. public Long getId() {
  34. return id;
  35. }
  36. public void setId(Long id) {
  37. this.id = id;
  38. }
  39. public String getUserId() {
  40. return userId;
  41. }
  42. public void setUserId(String userId) {
  43. this.userId = userId;
  44. }
  45. public String getUsername() {
  46. return username;
  47. }
  48. public void setUsername(String username) {
  49. this.username = username;
  50. }
  51. public String getPassword() {
  52. return password;
  53. }
  54. public void setPassword(String password) {
  55. this.password = password;
  56. }
  57. public String getNickname() {
  58. return nickname;
  59. }
  60. public void setNickname(String nickname) {
  61. this.nickname = nickname;
  62. }
  63. public String getImgUrl() {
  64. return imgUrl;
  65. }
  66. public void setImgUrl(String imgUrl) {
  67. this.imgUrl = imgUrl;
  68. }
  69. public String getSex() {
  70. return sex;
  71. }
  72. public void setSex(String sex) {
  73. this.sex = sex;
  74. }
  75. public String getAge() {
  76. return age;
  77. }
  78. public void setAge(String age) {
  79. this.age = age;
  80. }
  81. public String getCreate_datetime() {
  82. return create_datetime;
  83. }
  84. public void setCreate_datetime(String createDatetime) {
  85. create_datetime = createDatetime;
  86. }
  87. public String getUpdate_datetime() {
  88. return update_datetime;
  89. }
  90. public void setUpdate_datetime(String updateDatetime) {
  91. update_datetime = updateDatetime;
  92. }
  93. public String getType() {
  94. return type;
  95. }
  96. public void setType(String type) {
  97. this.type = type;
  98. }
  99. public String getRemark() {
  100. return remark;
  101. }
  102. public void setRemark(String remark) {
  103. this.remark = remark;
  104. }
  105. public String getValue() {
  106. return value;
  107. }
  108. public void setValue(String value) {
  109. this.value = value;
  110. }
  111. public String getVisible() {
  112. return visible;
  113. }
  114. public void setVisible(String visible) {
  115. this.visible = visible;
  116. }
  117. }

这个实体类是重点,必须要跟数据库一一对应,然而我的一直报错,原因是:PA @column字段命名,默认驼峰转换 ,把我的驼峰命名的全部变成下划线,比如imgUrl—>img_url;userid—>user_id。 然后就狂报错:

后面经过道友的指点,在配置文件加入如下配置,就解决了问题:

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

当然也可以直接加个name来对应,就不用在配置文件加啦。

  1. @Column(name="imgUrl")
  2. private String imgUrl;//用户头像

非常感谢【抱拳】

7、建立启动类App

  1. @SpringBootApplication
  2. public class App {
  3. public static void main(String[] args) {
  4. SpringApplication.run(App.class, args);
  5. }
  6. }

8、启动项目测试

run运行App,启动成功后浏览器输入
http://127.0.0.1:8080/getUsers
会返回json格式的用户信息

结语

到现在,终于SpringBoot的基础入门都学完啦,后面就要开始深入研究。感谢

 180

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2