当前环境:JDK1.8、MAVEN 3.6.1、eclipse
1.添加当前的jpa依赖和mysql的依赖
当前的
pom
文件内容如下
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.4.RELEASE</version>
<relativePath />
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 如果添加了springBoot中添加了jpa的依賴,就需要在application.properties中设置数据源 -->
<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>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
2.配置appllication.properties中的数据源和jpa的配置
当前
application.properties
文件内容如下:
#配置启动的端口
server.port=9090
server.context-path=/springboot-mysql
#数据源的配置
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.url=jdbc:mysql://localhost:3306/test
#jpa的配置
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
3.创建实体类,并使用jpa的注解
下面是创建的
User类
的内容:
/**
* @description 数据库--实体类user
* @author hy
* @date 2019-08-09
*/
@Entity
@Table(name="user")
public class User {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
//配置主键id,和主键生成策略
private Integer id;
private String name;
private Date birth;
@Column(name="on_work")//注意这列如果使用onWork在数据库中会自动变成on_work列
private Boolean onWork;
.....省略getter和setter方法,以及toString方法
}
4.创建dao层
下面是创建
UserReposity
接口的内容
/**
* @description 创建自定义的UserReposity继承jpaReposity,并添加@Repository注解,的时候会自动创建UserReposity的代理对象来操作并简化数据库操作
* @author hy
* @date 2019-08-09
*/
@Repository
public interface UserReposity extends JpaRepository<User, Integer>{
}
5.创建日期类型的转换器
@Component//一定要加上这个,才会被注册和被调用
public class DateConvert implements Converter<String, Date> {
public DateConvert() {
System.out.println("DateConvert被实例化!");
}
private final List<SimpleDateFormat> formats = new ArrayList<SimpleDateFormat>();
{
formats.add(new SimpleDateFormat("yyyy-MM-dd"));
}
@Override
public Date convert(String source) {
Date date = null;
synchronized (formats) {
for (SimpleDateFormat format : formats) {
try {
date = format.parse(source);
if (date != null) {
break;
}
} catch (Exception e) {
continue;
}
}
}
return date;
}
}
6.创建简单的controller层
/**
* @description 简答的userController用来测试数据的增删改查
* @author hy
* @date 2019-08-09
*/
@RestController
public class UserController {
@Autowired
UserReposity userReposity;
/**
* @description 根据id查询用户的信息
* @param id 需要查询的用户的id编号
* @return 查询后的用户信息
*/
@RequestMapping("/findUserById/{id}")
public String findUserById(@PathVariable Integer id) {
User findUser = userReposity.findOne(id);
return findUser.toString();
}
/**
* @description 查询用户的信息列表
* @return 用户的信息列表
*/
@RequestMapping("/findUserList")
public String findUserList() {
List<User> findAll = userReposity.findAll();
return findAll.toString();
}
/**
* @description 删除用户数据信息
* @param id 删除用户信息的编号
* @return 删除成功或者失败的信息
*/
@RequestMapping("/deleteUserById/{id}")
public String deleteUserById(@PathVariable Integer id) {
userReposity.delete(id);
return "【删除编号为】"+id+" 成功!";
}
/**
* @description 更新用户信息
* @param user 修改后的用户信息
* @return 更新成功或者失败的提示信息
*/
@RequestMapping("/updateUserById")
public String updateUserById(User user) {
User checkUser = userReposity.getOne(user.getId());
if(checkUser==null) {
return "【更新编号为】"+user.getId()+" 失败!原因:当前id的用户不存在!";
}
checkUser.setName(user.getName());
checkUser.setBirth(user.getBirth());
checkUser.setOnWork(user.getOnWork());
userReposity.save(checkUser);
return "【更新编号为】"+user.getId()+" 成功!";
}
/**
* @description 添加用户信息
* @param user 用户实例
* @return 添加成功或错误的字符串
*/
@RequestMapping("/addUser")
public String addUser( User user) {
userReposity.save(user);
return "【添加编号为】"+user.getId()+" 成功!";
}
}
7.创建入口类Application
/**
* @description 使用SpringBoot中提供的jpa简单的操作mysql数据库
* @author hy
* @date 2019-08-09
*/
@SpringBootApplication
@RestController
@EnableJpaRepositories(basePackages="com.springboot.mysql.demo.dao")//启用jpaRepisitory的扫描,自动创建代理对象
@EnableTransactionManagement(proxyTargetClass=true)//启用事物管理
@EntityScan(basePackages= {"com.springboot.mysql.demo.entity"})//使用jpa的实体类扫描。用于解析当期实体类中的注解,以及对象之间的关系并创建表
public class Application {
@Autowired
DataSource dataSource;
@RequestMapping("/hi")
public String hi() {
return "Hello World!";
}
/**
* @description 测试数据源是否配置正确
* @return
* @throws SQLException
*/
@RequestMapping("/dataSource")
public String dataSource() throws SQLException {
return dataSource.getConnection().toString();
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
数据使用
Postman
进行数据的测试的,结果成功
总结
- 当前的pom文件添加了jpa的支持的时候需要设置一下属性,如果不设置可能会出现dataSource创建失败:
spring.datasource.driver-class-name=驱动类的完全名称
spring.datasource.username=数据库用户名
spring.datasource.password=数据库的用户名对应的密码
spring.datasource.url=访问数据库的url
- 使用SpringBoot的jpa来操作数据库的时候,创建的
dao层一定要继承JpaReposity或者其他提供的Reposity
- 使用SpringBoot的注解来开启创建表或更新表的时候要开启
spring.jpa.hibernate.ddl-auto=update
- 出现参数不能注入的时候,可能就是当前的数据转换出现问题,一般都可能是Date类型的数据转换出错,有可能是当前的
DateConvert没有被实例化(就是没有加上@Component注解)
- 使用注解配置实体类的时候需要使用:
@Entity标记为实体类
@Table可以指定当前的类对应的表名
@Id 用来指定当前字段为主键
@GeneratedValue(strategy=GenerationType.AUTO)//用来设置当前主键的生成策略,当前为自增
注意:如果使用了onWork这种驼峰命名的时候会自动生成为on_work这种字段 - 使用了jpa的时候一定要开启
@EnableJpaRepositories
的扫描,和@EntityScan
扫描,用来创建对应的代理对象,和解析实体类注解 - 使用了更新或删除等操作的时候需要开启事务管理:
@EnableTransactionManagement