Day 25 SpringBoot基础3 集成JPA

Spring IOC控制反转 管理对象

IOC( Inversion of Control)控制反转/DI依赖注入(Dependency Injection)

  • service 类上加注解 @Service
    • @Service:声明此类是一个业务处理类
  • Controller类使用的时候,通过注解@Resource
    注意:
    • @Resource注解与@Autowired注解一样,都可以用来自动装配bean。
    • @Autowired-----由spring提供,只按照byType注入
    • @Resource-----由J2EE提供,默认是按照byName自动注入

service

package com.base.service;
	....
@Service
public class UserService {
	JDBCComon jdbc=new JDBCComon();
	....

Controller

package com.base.controller;
....
@RestController
@RequestMapping("use2")//表示这个类里面所有方法的路径之前必须加use2 在类的上面配置一个拦截路径:避免拦截路径配置相同
public class UserController2 {

	@Resource
	UserService us;//会自动创new出来  不需要再写   根据类型查找  得在UserService中配置@Service
	
	@RequestMapping("all")
	public List<User> getAll(){
		//UserService us=new UserService();
		List<User> userlist=us.selectAll();
		return userlist;
	}
  • 使用Spring的ioc 控制反转,让spring容器帮我们创建对象
  • 拦截路径 http://localhost:9080/a/use2/all

集成JPA

JPA的出现主要是为了简化持久层开发以及整合ORM技术,结束Hibernate、TopLink、JDO等ORM框架各自为营的局面。JPA是在吸收现有ORM框架的基础上发展而来,易于使用,伸缩性强。

JPA包括以下3方面的技术:

  • ORM映射元数据: 支持XML和注解两种元数据的形式,元数据描述对象和表之间的映射关系

  • API: 操作实体对象来执行CRUD操作

  • 查询语言: 通过面向对象而非面向数据库的查询语言(JPQL)查询数据,避免程序的SQL语句紧密耦合

JPA是ORM规范,Hibernate、TopLink等是JPA规范的具体实现,这样的好处是开发者可以面向JPA规范进行持久层的开发,而底层的实现则是可以切换的。Spring Data Jpa则是在JPA之上添加另一层抽象(Repository层的实现),极大地简化持久层开发及ORM框架切换的成本。

(https://www.jianshu.com/p/c23c82a8fcfc)

POM 配置需要的包

<!-- 添加JPA的支持 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>

/SpringBootJPA/src/main/resources/application.properties

#设置项目的端口号
server.port=9081

#设置工程名字
server.servlet.context-path=/b

#数据库的信息  datasource 数据源
spring.datasource.url = jdbc:mysql://localhost:3306/java10?useSSL=false&serverTimezone=Asia/Shanghai
spring.datasource.username = root
spring.datasource.password = 123456
spring.datasource.driverClassName = com.mysql.cj.jdbc.Driver
#配置JPA
spring.jpa.database = MYSQL
spring.jpa.show-sql = true
spring.jpa.hibernate.ddl-auto = update

实体类 entity

什么是实体:
就是与数据库对应的表
1)有Entity注解
2)要有public 或者 protected无参构造函数
3)要有主键(唯一标识)

  • @Id设置id为主键
  • @Column(length=50) 设置主键长度
  • @GeneratedValue(strategy=GenerationType.IDENTITY) 生成的策略:主键自增
package com.ll.entity;

import java.sql.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class OrderMaster {
	
	@Id//表示主键
	@Column(length=50)
	private String id;
	
	private String name;
	private double total;//总价
	private String address;
	private Date createTime;
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public double getTotal() {
		return total;
	}
	public void setTotal(double total) {
		this.total = total;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public Date getCreateTime() {
		return createTime;
	}
	public void setCreateTime(Date createTime) {
		this.createTime = createTime;
	}
	
}

Repository—crudRepository

信息库的概念:
  • 库原意指的是仓库,即数据仓库的意思.Repository居于业务层和数据层之间,将两者隔离开来,在它的内部封装了数据查询和存储的逻辑。这样设计的好处有两个:

    • 降低层级之间的耦合:更换,升级ORM引擎(休眠)并不会影响业务逻辑
    • 提高测试效率:如果在测试时能用模拟数据对象代替实际的数据库操作,运行速度会快很多
资源库和DAO的区别
  • DAO:是传统MVC中模型的关键角色,全称是数据访问对象.DAO直接负责数据库的存取工作—相对于数据库而言(DAO仍然停留在数据操作的层面上)
  • Repository:库蕴含着真正的面向对象的概念,即一个数据仓库角色,负责所有对象的持久化管理.—相对于对象
库介绍

Spring Data JPA中,有三种存储库接口方便开发者直接操作数据仓库。
它们之间的关系如下:( - >为继承关系)

JpaRepository - > PagingAndSortingRepository - > CrudRepository

CrudRepository
  • 提供基本的CRUD操作其中保存方法对应两种操作:数据存在主键时,执行更新操作,不存在主键时执行插入操作。

  • sava /savaAll / findById / existsById / findAll / findAllById / count / deleteById / delete / deleteAll

  • spirng jap-------save =saveOrUpdate 查找id如果查找到了就会去修改;没有找到就会添加

PagingAndSortingRepository
  • 增加了分页和排序的方法。
    • public interface PagingAndSortingRepository<T, ID> extends CrudRepository<T, ID> {
      Iterable findAll(Sort var1);
      Page findAll(Pageable var1);}
JpaRepository
  • JpaRepository则进一步在PagingAndSorting基础上,扩展了部分功能:

    • 查询列表 / 批量删除 / 强制同步 /Example查询
      (https://segmentfault.com/a/1190000012346333#articleHeader4)
      (https://blog.csdn.net/qq_34075488/article/details/85123707)
package com.ll.repository;

import org.springframework.data.repository.CrudRepository;

import com.ll.entity.OrderMaster;

public interface OrderMasterRepository extends CrudRepository<OrderMaster,String> {

}

Service

package com.ll.service;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.ll.entity.OrderMaster;
import com.ll.repository.OrderMasterRepository;

@Service
public class OrderService {
	@Resource
	OrderMasterRepository masterRepository;
	
	public OrderMaster addmaster(OrderMaster master) {
		
		return masterRepository.save(master);
	}
}

controller

ackage com.ll.controller;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.ll.entity.OrderMaster;
import com.ll.service.OrderService;
import com.ll.util.KeyUtil;

@RestController
@RequestMapping("ordermaster")
public class OrderController {
	@Resource
	OrderService orderService;
	
	@RequestMapping("add")
	public OrderMaster save(HttpServletRequest request) {
		OrderMaster master=new OrderMaster();
		String address=request.getParameter("address");
		String name=request.getParameter("name");
		master.setId(KeyUtil.genUniqueKey());
		master.setAddress(address);
		master.setName(name);
		return orderService.addmaster(master);
	}
}
  • 测试地址:http://localhost:9081/b/ordermaster/add?address=ddd&name=jacky
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/fggsgnhz/article/details/98749057
今日推荐