现在,我们来用SpringBoot2.0来整合jpa,为什么到现在才写这一篇博文呢,实话告诉大家,之前都整合失败了,访问一直报错,原因是JPA @column字段命名,默认驼峰转换(后面实体类会说下),非常感谢大神的指点,接下来开始整合吧。
环境
jdk1.8_73apache-maven-3.5.3springboot 2.0.0.RELEASEeclipse Oxygen.3a Release (4.7.3a)
一、流程
页面结构如下
1、新建一个springboot2.0的项目
这里项目名称为:springboot-jdbcTemplate
2、pom.xml中添加如下依赖
我这里都是基于二、快速入门-Hello SpringBoot,来添加相应的依赖的。
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!-- mysql依赖 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!-- https://mvnrepository.com/artifact/com.google.code.gson/gson --><dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId></dependency>
mysql依赖是链接数据库,gson是为了回显给页面
3、配置mysql数据库连接信息
在application.properties加入如下内容
#数据库连接信息spring.datasource.url=jdbc:mysql://127.0.0.1:3306/weixinserspring.datasource.username=rootspring.datasource.password=foreverspring.datasource.driver-class-name=com.mysql.jdbc.Driver
4、新建MyController类如下
@RestControllerpublic class MyController {@Autowiredprivate MyService myServcie;@RequestMapping("/getUsers")public String getUsers() {String user = myServcie.getUser();return user;}}
5、建立MyService,MyServiceImpl类
a、MyService
package cn.forever.service;public interface MyService {public String getUser();}
b、实现类MyServiceImpl
package cn.forever.service.impl;import java.util.List;import java.util.Map;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.stereotype.Service;import com.google.gson.Gson;@Servicepublic class MyServiceImpl implements cn.forever.service.MyService {@Autowiredprivate JdbcTemplate jdbcTemplate;public String getUser() {List<Map<String,Object>> users =jdbcTemplate.queryForList("select * from user");Gson gson = new Gson();String user = gson.toJson(users);System.out.println("users:"+user.toString());return user;}}
6、User
@Entity@Table(name="user")public class User{@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;//自增的ID@Columnprivate String username;//用户名@Columnprivate String userId;//这个用来存放用户的userId,不要用自增键太不安全@Columnprivate String password;//用户密码@Columnprivate String nickname;//昵称@Columnprivate String imgUrl;//用户头像@Columnprivate String sex;//用户性别0女,1是男@Columnprivate String age;//用户年龄@Columnprivate String create_datetime;//用户创建时间@Columnprivate String update_datetime;//用户修改时间@Columnprivate String type;//用户类别0是管理员,1是已登录用户,2是游客@Columnprivate String remark;//用户备注@Columnprivate String visible;//用户是否有效@Columnprivate String value;//预留字段public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getUserId() {return userId;}public void setUserId(String userId) {this.userId = userId;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getNickname() {return nickname;}public void setNickname(String nickname) {this.nickname = nickname;}public String getImgUrl() {return imgUrl;}public void setImgUrl(String imgUrl) {this.imgUrl = imgUrl;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}public String getCreate_datetime() {return create_datetime;}public void setCreate_datetime(String createDatetime) {create_datetime = createDatetime;}public String getUpdate_datetime() {return update_datetime;}public void setUpdate_datetime(String updateDatetime) {update_datetime = updateDatetime;}public String getType() {return type;}public void setType(String type) {this.type = type;}public String getRemark() {return remark;}public void setRemark(String remark) {this.remark = remark;}public String getValue() {return value;}public void setValue(String value) {this.value = value;}public String getVisible() {return visible;}public void setVisible(String visible) {this.visible = visible;}}
这个实体类是重点,必须要跟数据库一一对应,然而我的一直报错,原因是:PA @column字段命名,默认驼峰转换 ,把我的驼峰命名的全部变成下划线,比如imgUrl—>img_url;userid—>user_id。 然后就狂报错:
后面经过道友的指点,在配置文件加入如下配置,就解决了问题:
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
当然也可以直接加个name来对应,就不用在配置文件加啦。
@Column(name="imgUrl")private String imgUrl;//用户头像
非常感谢【抱拳】
7、建立启动类App
@SpringBootApplicationpublic class App {public static void main(String[] args) {SpringApplication.run(App.class, args);}}
8、启动项目测试
run运行App,启动成功后浏览器输入http://127.0.0.1:8080/getUsers
会返回json格式的用户信息
结语
到现在,终于SpringBoot的基础入门都学完啦,后面就要开始深入研究。感谢
