SpringBoot项目搭建,基于JPA持久层框架实现增删改查

环境说明:Windows10,STS,MySql,JPA持久层框架


本人建议尝试去使用IntelliJ IDEA,你会发现是个神器,如果网上找不到可用注册码,请留言,会回复的哦。

废话不多说,直接上图,中间会穿插说一些会遇到的问题及解决办法,各位看官稍稍有点耐心看完哈。

1.新建项目

SpringBoot项目搭建,基于JPA持久层框架实现增删改查_第1张图片

注意下图红色框框内,Packaging 选择Jar

SpringBoot项目搭建,基于JPA持久层框架实现增删改查_第2张图片

注意注意:Lombok是属于第三方插件,需要安装才可以使用,如果嫌弃麻烦,就不要引用此依赖,我也是用于使用注解方便。

如果想使用请点击这里,有详细的讲解。

SpringBoot项目搭建,基于JPA持久层框架实现增删改查_第3张图片

然后Finish.项目结构

SpringBoot项目搭建,基于JPA持久层框架实现增删改查_第4张图片

查看POM文件,刚刚选择的三个依赖,点击项目 选择Maven--Update Maven

SpringBoot项目搭建,基于JPA持久层框架实现增删改查_第5张图片

到此,项目创建完毕。


2.数据库,Mysql,首先生成这个表,

DROP TABLE IF EXISTS `sys_order`;
CREATE TABLE `sys_order` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `order_id` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '订单编号',
  `order_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '订单名称',
  `order_price` decimal(10,2) DEFAULT NULL COMMENT '订单价格',
  `order_type` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '订单类型',
  `order_status` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '订单状态',
  `order_number` int(11) DEFAULT NULL COMMENT '订单数量',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

3.开始配置数据库连接

我喜欢把配置文件类型改成.yml,你也可以不变动,但是写法不同哦,在此建议尽量用.yml形式,养成好习惯

SpringBoot项目搭建,基于JPA持久层框架实现增删改查_第6张图片

#------------------------配置项目启动端口,默认8080-----------------------------
server:
  port: 8090
  
#------------------------MySql配置-----------------------------
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/aspuser?characterEncoding=utf8&serverTimezone=GMT%2B8
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver

#------------------------JPA配置-----------------------------     
  jpa:
    generate-ddl: false
    database: MYSQL
    hibernate:
      ddl-auto: none
    show-sql: true
  data:
    jpa:
      repositories:
        enabled: true

项目结构层次

SpringBoot项目搭建,基于JPA持久层框架实现增删改查_第7张图片


代码区:

1.Model.java

package com.portal.model;

import java.io.Serializable;
import java.math.BigDecimal;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;


/**
 * 
 * @author lizhixian
 * 这里 @Data、@Builder、@NoArgsConstructor、@AllArgsConstructor  是: lombok的注解,与JPA无
 * 关, 引入lombok主要是为了快速开发
 * 注: 若使用了@Builder注解、建议一定要使用 @NoArgsConstructor、@AllArgsConstructor注解,因
 *     为@Builder注解是建造者模式,如果只使用了@Builder,而不使用@NoArgsConstructor
 *     、@AllArgsConstructor注解的话,可能他会导致fastjson、jpa等出现异常
 *
 * 这里 @Entity  的作用是: 表明这是一个JPA实体
 * 这里 @Table  的作用是:  指明这个JPA实体 对应 那一张表 name等于你自己数据库中的表名
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "sys_order")
public class SysOrderModel implements Serializable{
	
	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Integer id;
	/**
	 * 订单编号
	 */
	private String order_id;
	/**
	 * 订单名称
	 */
	private String order_name;
	/**
	 * 订单价格
	 */
	private BigDecimal order_price;
	/**
	 * 订单类型
	 */
	private String order_type;
	/**
	 * 订单状态
	 */
	private String order_status;
	/**
	 * 订单数量
	 */
	private Integer order_number;
	

}

2.DAO.java

package com.portal.dao;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import com.portal.model.SysOrderModel;

//JpaRepository
//<实体类名称,主键类型>
@Repository
public interface SysOrderDao extends JpaRepository{

}

3.Service.java

package com.portal.service;

import java.util.List;

import com.portal.model.SysOrderModel;

public interface SysOrderService {
	
	/**
	 * 插入/更新 Jpa方法中,保存和修改使用同一个方法,通过id,封装方法会判断是否有主键值,有即为        
     * 修改操作
	 * @param sModel
	 */
	 SysOrderModel insert(SysOrderModel sModel);
	/**
	 * 查询全部
	 */
	List select();
	/**
	 * 根据id查询
	 * @param id
	 */
	SysOrderModel selectById(Integer id);

	/**
	 * 删除
	 * @param id
	 */
	void delete(Integer id);
	

}

4.ServiceImpl.java

package com.portal.service.impl;

import java.util.List;

import javax.transaction.Transactional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.portal.dao.SysOrderDao;
import com.portal.model.SysOrderModel;
import com.portal.service.SysOrderService;

@Service
public class SysOrderServiceImpl implements SysOrderService{

	@Autowired
  	private SysOrderDao _SysOrderDao;
	
	/**
	 * 保存/修改
	 */
	@Override
	@Transactional
	public SysOrderModel insert(SysOrderModel sModel) {
		return	_SysOrderDao.save(sModel);
	}

	/**
	 * 查询全部
	 */
	@Override
	@Transactional
	public List select() {
		return _SysOrderDao.findAll();
		
	}

	/**
	 * 根据id查询
	 */
	@Override
	@Transactional
	public SysOrderModel selectById(Integer id) {
		return _SysOrderDao.findOne(id);
		
	}

	/**
	 * 删除
	 */
	@Override
	@Transactional
	public void delete(Integer id) {
		_SysOrderDao.delete(id);
	}

}

5.Test.java

package com.portal;

import java.math.BigDecimal;
import java.util.List;
import java.util.UUID;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import com.portal.model.SysOrderModel;
import com.portal.service.SysOrderService;

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootOrderTestApplicationTests {

	@Autowired
	private SysOrderService sysService;
	
	/**
	 * 保存
	 */
	@Test
	public void insert() {
		
		SysOrderModel sModel = new SysOrderModel();
		sModel.setOrder_id(UUID.randomUUID().toString());
		sModel.setOrder_name("奥利奥");
		sModel.setOrder_number(10000);
		BigDecimal bigDecimal = new BigDecimal("14.99");
		sModel.setOrder_price(bigDecimal);
		sModel.setOrder_status("销售中");
		sModel.setOrder_type("食品类");
		sysService.insert(sModel);
	}
	/**
	 * 查询全部
	 */
	@Test
	public void select()
	{
		List list = sysService.select();
		list.forEach(System.out::println);
	}
	/**
	 * 根据id查询
	 */
	@Test
	public void selectById()
	{
		System.out.println(sysService.selectById(1));
	}
	/**
	 * 删除
	 */
	@Test
	public void delete()
	{
		sysService.delete(2);
	}
	/**
	 * 修改
	 */
	@Test
	public void update()
	{
		SysOrderModel sModel = new SysOrderModel();
		sModel.setId(3);
		sModel.setOrder_id(UUID.randomUUID().toString());
		sModel.setOrder_name("不要奥利奥");
		sModel.setOrder_number(10000);
		BigDecimal bigDecimal = new BigDecimal("9.99");
		sModel.setOrder_price(bigDecimal);
		sModel.setOrder_status("已售罄");
		sModel.setOrder_type("食品类");
		sysService.insert(sModel);
	}
	
}

相关Sql语句,在配置文件配置红色框框内,控制台会打印出来,可供参考调试

SpringBoot项目搭建,基于JPA持久层框架实现增删改查_第8张图片


以上方法亲测有效,如果问题可下方回复,

不当之处,请多指教。

 

 

你可能感兴趣的:(SpringBoot)