现在,我们来用SpringBoot2.0来整合jpa,为什么到现在才写这一篇博文呢,实话告诉大家,之前都整合失败了,访问一直报错,原因是JPA @column字段命名,默认驼峰转换(后面实体类会说下),非常感谢大神的指点,接下来开始整合吧。
环境
jdk1.8_73
apache-maven-3.5.3
springboot 2.0.0.RELEASE
eclipse 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/weixinser
spring.datasource.username=root
spring.datasource.password=forever
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
4、新建MyController类如下
@RestController
public class MyController {
@Autowired
private 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;
@Service
public class MyServiceImpl implements cn.forever.service.MyService {
@Autowired
private 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
@Column
private String username;//用户名
@Column
private String userId;//这个用来存放用户的userId,不要用自增键太不安全
@Column
private String password;//用户密码
@Column
private String nickname;//昵称
@Column
private String imgUrl;//用户头像
@Column
private String sex;//用户性别0女,1是男
@Column
private String age;//用户年龄
@Column
private String create_datetime;//用户创建时间
@Column
private String update_datetime;//用户修改时间
@Column
private String type;//用户类别0是管理员,1是已登录用户,2是游客
@Column
private String remark;//用户备注
@Column
private String visible;//用户是否有效
@Column
private 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
@SpringBootApplication
public 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的基础入门都学完啦,后面就要开始深入研究。感谢