SpringBoot中使用jpa访问mysql数据库实现简单的增删改查(无模板引擎)

当前环境:JDK1.8、MAVEN 3.6.1、eclipse

1.添加当前的jpa依赖和mysql的依赖

当前的pom文件内容如下

	
		UTF-8
	

	
		org.springframework.boot
		spring-boot-starter-parent
		1.2.4.RELEASE
		
	

	
		
			org.springframework.boot
			spring-boot-starter-web
		
		
		
			org.springframework.boot
			spring-boot-starter-data-jpa
		
		
		
			mysql
			mysql-connector-java
		
		
			junit
			junit
			test
		
	

	
		
			
				org.springframework.boot
				spring-boot-maven-plugin
				
					1.8
					1.8
				
			
		
	

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进行数据的测试的,结果成功

总结

  1. 当前的pom文件添加了jpa的支持的时候需要设置一下属性,如果不设置可能会出现dataSource创建失败:
    spring.datasource.driver-class-name=驱动类的完全名称
    spring.datasource.username=数据库用户名
    spring.datasource.password=数据库的用户名对应的密码
    spring.datasource.url=访问数据库的url
  2. 使用SpringBoot的jpa来操作数据库的时候,创建的dao层一定要继承JpaReposity或者其他提供的Reposity
  3. 使用SpringBoot的注解来开启创建表或更新表的时候要开启spring.jpa.hibernate.ddl-auto=update
  4. 出现参数不能注入的时候,可能就是当前的数据转换出现问题,一般都可能是Date类型的数据转换出错,有可能是当前的DateConvert没有被实例化(就是没有加上@Component注解)
  5. 使用注解配置实体类的时候需要使用:
    @Entity标记为实体类
    @Table可以指定当前的类对应的表名
    @Id 用来指定当前字段为主键
    @GeneratedValue(strategy=GenerationType.AUTO)//用来设置当前主键的生成策略,当前为自增
    注意:如果使用了onWork这种驼峰命名的时候会自动生成为on_work这种字段
  6. 使用了jpa的时候一定要开启@EnableJpaRepositories的扫描,和@EntityScan扫描,用来创建对应的代理对象,和解析实体类注解
  7. 使用了更新或删除等操作的时候需要开启事务管理: @EnableTransactionManagement

你可能感兴趣的:(SpringBoot)