JPA笔记

JPA

Spring-Data JPA

概念

由spring提供的简化JPA开发的框架

作用

可以极大的简化JPA的写法,可以在几乎不用写实现的情况下,实现对数据库的访问和操作。
除了CURD外,还包括分页、排序等常用功能。

核心jar包

  • spring-data-commons 1.13.0.RELEASE
  • spring-data-jpa 1.11.0.RELEASE
  • hibernate-entitymanager 5.2.6.Final
  • hibernate-jpa-2.1-api 1.0.0.Final

核心接口

  1. Repository:最顶层的接口,是一个空的接口,目的是为了统一所有Repository的类型,且能让组件扫描的时候自动识别。
  2. CrudRepository:是Repository的子接口,提供CRUD的功能
  3. PaginAndSortingRepository:是CrudRepository的子接口,添加分页和排序的功能
  4. JpaRepository:是PagingAndSortingRepository的子接口,增加了一些实用的功能,比如:批量操作等。
  5. JpaSpecificationExecutor:用来做负责查询的接口
  6. Specification:是Spring Data JPA提供的一个查询规范,要做复杂的查询,只需围绕这个规范来设置查询条件即可

maven开发环境配置

<!--依赖Spring 4.3.6之core、context、aop、beans、tx、orm和spring data commons-->

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-jpa</artifactId>
    <version>1.11.0.RELEASE</version>
</dependency>
<!--hibernate 实现JPA的框架-->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>5.2.5.Final</version>
</dependency>
<!-- 数据源与MySQL驱动 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.41</version>
		</dependency>

		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>1.0.28</version>
		</dependency>
 <!-- Spring测试框架 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>4.3.6.RELEASE</version>
		</dependency>

spring-jpa配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:jpa="http://www.springframework.org/schema/data/jpa"
	xmlns:repository="http://www.springframework.org/schema/data/repository"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
         http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
         http://www.springframework.org/schema/aop  http://www.springframework.org/schema/aop/spring-aop.xsd
         http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
         http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
         http://www.springframework.org/schema/data/repository http://www.springframework.org/schema/data/repository/spring-repository.xsd">
	
	<context:property-placeholder location="classpath:jdbc.properties"/>
	
	<!-- 配置自动扫描的包 -->
	<context:component-scan base-package="com.qfxa.service"/>
	<context:component-scan base-package="com.qfxa.dao"/>
	
	<!-- 数据源 -->
	<bean  id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
		<property name="driverClassName" value="${jdbc.driver}"></property>
		<property name="url" value="${jdbc.url}"></property>
		<property name="username" value="${jdbc.username}"></property>
		<property name="password" value="${jdbc.password}"></property>
	</bean>
	
	<!-- jpa实现框架 -->
	<bean id="hibernateJpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
		<property name="databasePlatform" value="org.hibernate.dialect.MySQL5Dialect"/>
		<property name="showSql" value="true"/>
	</bean>
	
	<!-- spring-data-jpa配置 本地容器实体管理工厂对象,并指定POJO类 -->
	<bean id="emf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
		<property name="dataSource" ref="dataSource"></property>
		<property name="packagesToScan" value="com.qfxa.po"/>
		<property name="jpaVendorAdapter" ref="hibernateJpaVendorAdapter"/>
		<property name="jpaProperties">
			<props>
				<prop key="hibernate.format_sql">false</prop>
			</props>
		</property>
	</bean>
	
	<bean id="jpaTx" class="org.springframework.orm.jpa.JpaTransactionManager">
		<property name="entityManagerFactory" ref="emf"/>
	</bean>
	
	<!-- 设置自动注解事务驱动 -->
	<tx:annotation-driven proxy-target-class="false" transaction-manager="jpaTx"/>
	
	<!-- 启动仓库扫描 -->
	<jpa:repositories base-package="com.qfxa.dao"
		 entity-manager-factory-ref="emf"
		 transaction-manager-ref="jpaTx"/>
</beans>

JPA简介

JPA(java persistence api)是sun提出的一个对象持久化规范,各JavaEE应用服务器自主选择具体实现,
JPA的设计者是hibernate框架的作者,因此Hibernate作为Jboss服务器中JPA的默认实现,
Oracle的Weblogic使用EclipseLink(TopLink)作为默认的JPA实现,
IBM的Websphere和Sun的Glassfish默认使用OpenJPA(Apache)作为其默认的JPA实现。

JPA的底层实现是一些流行的开源ORM(对象关系映射)框架,
因此JPA其实也就是java实体对象和关系型数据库建立起映射关系,
通过面向对象编程的思想操作关系型数据库的规范。

JPA的优势

  1. 标准化
  2. 对容器及特性的支持
  3. 简单易用,集成方便
  4. 可媲美JDBC的查询能力
  5. 支持面向对象的高级特性

实体bean的开发

  1. 在实体bean上添加”@Entity”注解,标识该bean为实体bean。

  2. 实体bean必须序列化。

  3. 使用”@Table(name=数据库表名)”注解,标识该实体bean映射到关系型数据库中的表名,如果不指定则JPA实现会自动生成默认的表名称。

  4. 必须有一个使用”@Id”注解标识的主键 如指定自增主键的写法为:

    @Id

    @Column(name=”列名”)

    @GeneratedValue(Strategy=GenerationType.Auto)

    private int id;

    注意:@Id和@GeneratedValue两个注解必须同时使用,标识了注解之后,要主键的生成策略。

  5. Bean的其他属性使用”@Column(name=列名)”注解,指定该属性映射到数据库表中的列名,如果不指定在JPA实现会自动生成默认的列名。

  6. 实体Bean必须严格遵循JavaBean的规范,提供无参的默认构造方法,属性提供set和get方法。

  7. 最好重写hashcode()和equals()方法,实体bean的唯一标识是主键,因此,使用实体bean的主键来比较。

JPA查询方法规则

  • findAll()查询所有
  • findByXXX(Object xxx) 根据属性名等值查询
  • findByXXXAndYYY(Object xxx,Object yyy) 同时满足两个属性名与属性相同的查询
  • findByXXXOrYYY(Object xxx,Object yyy) 只要满足两个属性名与属性相同的任一条查询

Spring的单元测试

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:spring-jpa.xml")
public class TestUser {
	@Autowired
	UserService userService;
	
	
	public void add() {
		User u = new User();
		u.setNickname("didi");
		u.setUsername("disen888");
		u.setPassword("123");
		u.setPhone("1234444444");
		u.setSex("女");
		u.setCreateTime(new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
		
		userService.add(u);
		
		System.out.println("添加成功 : "+u.getId());
	}
	
	public void query() {
		List<User> list = userService.getList();
		for(User u:list) {
			System.out.println(u.getNickname()+","+u.getPhone()+","+u.getCreateTime());
			
			if(u.getNickname().equals("disen-Di")) {
				u.setSex("女");
				u.setPhone("029-88765312");
				userService.update(u);
			}
		}
	}
	
}

JPA与Spring-Boot的整合

第一步建立项目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OihJfJTg-1665405612717)(C:\Users\橘子\AppData\Roaming\Typora\typora-user-images\1665401555479.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rfrffukr-1665405612718)(C:\Users\橘子\AppData\Roaming\Typora\typora-user-images\1665401636530.png)]

第二步添加依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.qyb</groupId>
    <artifactId>day67JPA-SpringBoot</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>day67JPA-SpringBoot</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.8</version>
        </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>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

第三步配置yml文件

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    url: jdbc:mysql://localhost:3306/mi?useSSL=false&serverTimezone=UTC&characterEncoding=UTF-8
    username: root
    password: 123
  jpa:
    database: mysql
    show-sql: true
    hibernate:
      ddl-auto: validate
    properties:
      hibernate:
        format_sql: true

第四步写pojo dao service

pojo
@Entity
@Data
public class Dept {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String dep_name;
    private String addr;

}

dao
public interface IDeptDao extends JpaRepository<Dept,Integer> {
}
service
public interface IDeptService {
    List<Dept> getAllDept();
}

serviceimpl
@Service
public class IDeptServiceImpl implements IDeptService {
    @Autowired
    private IDeptDao idd;
    @Override
    public List<Dept> getAllDept() {
        return idd.findAll();
    }
}

第五步controller层的编写
@RestController
@RequestMapping("dept")
public class DeptController {
    @Autowired
    private IDeptService ids;
    @GetMapping("all")
    public List<Dept> getAllDept(){
        return ids.getAllDept();
    }
}

第六步执行后在前端查看

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PBoLN9hh-1665405612719)(C:\Users\橘子\AppData\Roaming\Typora\typora-user-images\1665405429443.png)]

测试类的写法如下
@RunWith(SpringRunner.class)
@SpringBootTest
public class TestDeptService {
    @Autowired
    private IDeptService ids;
    @Test
    public void TestDeptGetAll(){
        List<Dept> allDept = ids.getAllDept();
        for (Dept dept : allDept) {
            System.out.println(dept); 
        }
    }
}

JPA

Spring-Data JPA

概念

由spring提供的简化JPA开发的框架

作用

可以极大的简化JPA的写法,可以在几乎不用写实现的情况下,实现对数据库的访问和操作。
除了CURD外,还包括分页、排序等常用功能。

核心jar包

  • spring-data-commons 1.13.0.RELEASE
  • spring-data-jpa 1.11.0.RELEASE
  • hibernate-entitymanager 5.2.6.Final
  • hibernate-jpa-2.1-api 1.0.0.Final

核心接口

  1. Repository:最顶层的接口,是一个空的接口,目的是为了统一所有Repository的类型,且能让组件扫描的时候自动识别。
  2. CrudRepository:是Repository的子接口,提供CRUD的功能
  3. PaginAndSortingRepository:是CrudRepository的子接口,添加分页和排序的功能
  4. JpaRepository:是PagingAndSortingRepository的子接口,增加了一些实用的功能,比如:批量操作等。
  5. JpaSpecificationExecutor:用来做负责查询的接口
  6. Specification:是Spring Data JPA提供的一个查询规范,要做复杂的查询,只需围绕这个规范来设置查询条件即可

maven开发环境配置

<!--依赖Spring 4.3.6之core、context、aop、beans、tx、orm和spring data commons-->

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-jpa</artifactId>
    <version>1.11.0.RELEASE</version>
</dependency>
<!--hibernate 实现JPA的框架-->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>5.2.5.Final</version>
</dependency>
<!-- 数据源与MySQL驱动 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.41</version>
		</dependency>

		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>1.0.28</version>
		</dependency>
 <!-- Spring测试框架 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>4.3.6.RELEASE</version>
		</dependency>

spring-jpa配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:jpa="http://www.springframework.org/schema/data/jpa"
	xmlns:repository="http://www.springframework.org/schema/data/repository"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
         http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
         http://www.springframework.org/schema/aop  http://www.springframework.org/schema/aop/spring-aop.xsd
         http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
         http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
         http://www.springframework.org/schema/data/repository http://www.springframework.org/schema/data/repository/spring-repository.xsd">
	
	<context:property-placeholder location="classpath:jdbc.properties"/>
	
	<!-- 配置自动扫描的包 -->
	<context:component-scan base-package="com.qfxa.service"/>
	<context:component-scan base-package="com.qfxa.dao"/>
	
	<!-- 数据源 -->
	<bean  id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
		<property name="driverClassName" value="${jdbc.driver}"></property>
		<property name="url" value="${jdbc.url}"></property>
		<property name="username" value="${jdbc.username}"></property>
		<property name="password" value="${jdbc.password}"></property>
	</bean>
	
	<!-- jpa实现框架 -->
	<bean id="hibernateJpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
		<property name="databasePlatform" value="org.hibernate.dialect.MySQL5Dialect"/>
		<property name="showSql" value="true"/>
	</bean>
	
	<!-- spring-data-jpa配置 本地容器实体管理工厂对象,并指定POJO类 -->
	<bean id="emf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
		<property name="dataSource" ref="dataSource"></property>
		<property name="packagesToScan" value="com.qfxa.po"/>
		<property name="jpaVendorAdapter" ref="hibernateJpaVendorAdapter"/>
		<property name="jpaProperties">
			<props>
				<prop key="hibernate.format_sql">false</prop>
			</props>
		</property>
	</bean>
	
	<bean id="jpaTx" class="org.springframework.orm.jpa.JpaTransactionManager">
		<property name="entityManagerFactory" ref="emf"/>
	</bean>
	
	<!-- 设置自动注解事务驱动 -->
	<tx:annotation-driven proxy-target-class="false" transaction-manager="jpaTx"/>
	
	<!-- 启动仓库扫描 -->
	<jpa:repositories base-package="com.qfxa.dao"
		 entity-manager-factory-ref="emf"
		 transaction-manager-ref="jpaTx"/>
</beans>

JPA简介

JPA(java persistence api)是sun提出的一个对象持久化规范,各JavaEE应用服务器自主选择具体实现,
JPA的设计者是hibernate框架的作者,因此Hibernate作为Jboss服务器中JPA的默认实现,
Oracle的Weblogic使用EclipseLink(TopLink)作为默认的JPA实现,
IBM的Websphere和Sun的Glassfish默认使用OpenJPA(Apache)作为其默认的JPA实现。

JPA的底层实现是一些流行的开源ORM(对象关系映射)框架,
因此JPA其实也就是java实体对象和关系型数据库建立起映射关系,
通过面向对象编程的思想操作关系型数据库的规范。

JPA的优势

  1. 标准化
  2. 对容器及特性的支持
  3. 简单易用,集成方便
  4. 可媲美JDBC的查询能力
  5. 支持面向对象的高级特性

实体bean的开发

  1. 在实体bean上添加”@Entity”注解,标识该bean为实体bean。

  2. 实体bean必须序列化。

  3. 使用”@Table(name=数据库表名)”注解,标识该实体bean映射到关系型数据库中的表名,如果不指定则JPA实现会自动生成默认的表名称。

  4. 必须有一个使用”@Id”注解标识的主键 如指定自增主键的写法为:

    @Id

    @Column(name=”列名”)

    @GeneratedValue(Strategy=GenerationType.Auto)

    private int id;

    注意:@Id和@GeneratedValue两个注解必须同时使用,标识了注解之后,要主键的生成策略。

  5. Bean的其他属性使用”@Column(name=列名)”注解,指定该属性映射到数据库表中的列名,如果不指定在JPA实现会自动生成默认的列名。

  6. 实体Bean必须严格遵循JavaBean的规范,提供无参的默认构造方法,属性提供set和get方法。

  7. 最好重写hashcode()和equals()方法,实体bean的唯一标识是主键,因此,使用实体bean的主键来比较。

JPA查询方法规则

  • findAll()查询所有
  • findByXXX(Object xxx) 根据属性名等值查询
  • findByXXXAndYYY(Object xxx,Object yyy) 同时满足两个属性名与属性相同的查询
  • findByXXXOrYYY(Object xxx,Object yyy) 只要满足两个属性名与属性相同的任一条查询

Spring的单元测试

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:spring-jpa.xml")
public class TestUser {
	@Autowired
	UserService userService;
	
	
	public void add() {
		User u = new User();
		u.setNickname("didi");
		u.setUsername("disen888");
		u.setPassword("123");
		u.setPhone("1234444444");
		u.setSex("女");
		u.setCreateTime(new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
		
		userService.add(u);
		
		System.out.println("添加成功 : "+u.getId());
	}
	
	public void query() {
		List<User> list = userService.getList();
		for(User u:list) {
			System.out.println(u.getNickname()+","+u.getPhone()+","+u.getCreateTime());
			
			if(u.getNickname().equals("disen-Di")) {
				u.setSex("女");
				u.setPhone("029-88765312");
				userService.update(u);
			}
		}
	}
	
}

JPA与Spring-Boot的整合

第一步建立项目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EfUXDEzb-1665405613879)(C:\Users\橘子\AppData\Roaming\Typora\typora-user-images\1665401555479.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gwrUMOfu-1665405613879)(C:\Users\橘子\AppData\Roaming\Typora\typora-user-images\1665401636530.png)]

第二步添加依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.qyb</groupId>
    <artifactId>day67JPA-SpringBoot</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>day67JPA-SpringBoot</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.8</version>
        </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>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

第三步配置yml文件

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    url: jdbc:mysql://localhost:3306/mi?useSSL=false&serverTimezone=UTC&characterEncoding=UTF-8
    username: root
    password: 123
  jpa:
    database: mysql
    show-sql: true
    hibernate:
      ddl-auto: validate
    properties:
      hibernate:
        format_sql: true

第四步写pojo dao service

pojo
@Entity
@Data
public class Dept {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String dep_name;
    private String addr;

}

dao
public interface IDeptDao extends JpaRepository<Dept,Integer> {
}
service
public interface IDeptService {
    List<Dept> getAllDept();
}

serviceimpl
@Service
public class IDeptServiceImpl implements IDeptService {
    @Autowired
    private IDeptDao idd;
    @Override
    public List<Dept> getAllDept() {
        return idd.findAll();
    }
}

第五步controller层的编写
@RestController
@RequestMapping("dept")
public class DeptController {
    @Autowired
    private IDeptService ids;
    @GetMapping("all")
    public List<Dept> getAllDept(){
        return ids.getAllDept();
    }
}

第六步执行后在前端查看

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KKQNlig2-1665405613880)(C:\Users\橘子\AppData\Roaming\Typora\typora-user-images\1665405429443.png)]

测试类的写法如下
@RunWith(SpringRunner.class)
@SpringBootTest
public class TestDeptService {
    @Autowired
    private IDeptService ids;
    @Test
    public void TestDeptGetAll(){
        List<Dept> allDept = ids.getAllDept();
        for (Dept dept : allDept) {
            System.out.println(dept); 
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值