SpringDataJpa学习记录----02三种配置方式

Spring Data Jpa的配置方式

一、添加依赖:

  1. 在父maven项目中设置spring data统一版本管理依赖: 因为不同的spring data子项目发布时间版本不一样,自
    己维护会很麻烦, 这样不同的spring data子项目能保证是统一版本。
   <dependencyManagement>
     <dependencies>
       <dependency>
         <groupId>org.springframework.data</groupId>
         <artifactId>spring-data-bom</artifactId>
         <version>2021.1.0</version>
         <scope>import</scope>
         <type>pom</type>
       </dependency>
     </dependencies>
   </dependencyManagement>
  1. 在子项目中添加:
   <dependencies>
           <dependency>
               <groupId>org.springframework.data</groupId>
               <artifactId>spring-data-jpa</artifactId>
           </dependency>
   
           <!--hibernate对jpa的支持包-->
           <dependency>
               <groupId>org.hibernate</groupId>
               <artifactId>hibernate-entitymanager</artifactId>
               <version>5.4.32.Final</version>
           </dependency>
   
           <!--Mysql and MariaDB -->
           <dependency>
               <groupId>mysql</groupId>
               <artifactId>mysql-connector-java</artifactId>
               <version>5.1.35</version>
           </dependency>
   
           <!--连接池-->
           <dependency>
               <groupId>com.alibaba</groupId>
               <artifactId>druid</artifactId>
               <version>1.2.22</version>
           </dependency>
   
           <!--junit4-->
           <dependency>
               <groupId>junit</groupId>
               <artifactId>junit</artifactId>
               <version>4.13.2</version>
               <scope>test</scope>
           </dependency>
   
           <!--spring test-->
           <dependency>
               <groupId>org.springframework</groupId>
               <artifactId>spring-test</artifactId>
               <version>5.3.12</version>
           </dependency>
       </dependencies>

(一)xml配置文件方式

  1. spring.xml
   <?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:jpa="http://www.springframework.org/schema/data/jpa"
          xmlns:tx="http://www.springframework.org/schema/tx"
          xsi:schemaLocation="http://www.springframework.org/schema/beans
       https://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/data/jpa
       https://www.springframework.org/schema/data/jpa/spring-jpa.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx.xsd">
   
       <!--用于整合jpa  @EnableJpaRepositories -->
       <jpa:repositories base-package="com.TT.repositories"
                         entity-manager-factory-ref="entityManagerFactory"
                         transaction-manager-ref="transactionManager"
       />
   
       <!--EntityManagerFactory-->
       <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
           <property name="jpaVendorAdapter">
               <!--Hibernate实现-->
               <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                   <!--生成数据库表-->
                   <property name="generateDdl" value="true"></property>
                   <!--在日志显示sql语句-->
                   <property name="showSql" value="true"></property>
               </bean>
           </property>
           <!--设置实体类的包-->
           <property name="packagesToScan" value="com.TT.pojo"></property>
           <property name="dataSource" ref="dataSource" ></property>
       </bean>
   
       <!--数据源-->
       <bean class="com.alibaba.druid.pool.DruidDataSource" id="dataSource">
           <property name="username" value="root"/>
           <property name="password" value="root"/>
           <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
           <property name="url" value="jdbc:mysql://localhost:3306/xxx?characterEncoding=UTF-8"/>
       </bean>
   
       <!--声明式事务-->
       <bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager">
           <property name="entityManagerFactory" ref="entityManagerFactory"></property>
       </bean>
   
       <!--启动注解方式的声明式事务-->
       <tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>
   
   </beans>
  1. pojo类
   @Entity     // 作为hibernate 实体类
   @Table(name = "tb_customer")       // 映射的表名
   public class Customer {
       // 声明为主键
       @Id
       // 自增
       @GeneratedValue(strategy = GenerationType.IDENTITY)
       // 字段名映射
       @Column(name = "id")
       private Long custId;
   
       @Column(name = "cust_name")
       private String custName;
   
       @Column(name="cust_address")
       private String custAddress;
       
       get、set方法
   }
  1. 测试
   @ContextConfiguration("/spring.xml")
   @RunWith(SpringJUnit4ClassRunner.class)
   public class SpringdataJpaTest {
       // jdk动态代理
       @Autowired
       CustomerRepository repository;
   
       @Test
       public void testR(){
           Optional<Customer> byId = repository.findById(1L);
           System.out.println(byId.get());
       }
   }

(二)javaConfig配置方式

  1. javaConfig配置类
   @Configuration          // 标记当前类为配置类 = xml配置文件
   @EnableJpaRepositories(basePackages = "com.TT.repositories")  // 启动jpa    <jpa:repositories
   @EnableTransactionManagement    // 开启事务
   public class SpringDataJPAConfig {
   
       /*
       *  <!--数据源-->
       <bean class="com.alibaba.druid.pool.DruidDataSource" name="dataSource">
           <property name="username" value="root"/>
           <property name="password" value="root"/>
           <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
           <property name="url" value="jdbc:mysql://localhost:3306/xxx?characterEncoding=UTF-8"/>
       </bean>
       * */
       @Bean
       public DataSource dataSource() {
   
           DruidDataSource dataSource = new DruidDataSource();
           dataSource.setUsername("root");
           dataSource.setPassword("root");
           dataSource.setDriverClassName("com.mysql.jdbc.Driver");
           dataSource.setUrl("jdbc:mysql://localhost:3306/xxx?characterEncoding=UTF-8");
   
           return dataSource;
   
       }
   
       /*
       *  <!--EntityManagerFactory-->
       <bean name="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
           <property name="jpaVendorAdapter">
               <!--Hibernate实现-->
               <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                   <!--生成数据库表-->
                   <property name="generateDdl" value="true"></property>
                   <property name="showSql" value="true"></property>
               </bean>
           </property>
           <!--设置实体类的包-->
           <property name="packagesToScan" value="com.TT.pojo"></property>
           <property name="dataSource" ref="dataSource" ></property>
       </bean>
       * */
       @Bean
       public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
   
           HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
           vendorAdapter.setGenerateDdl(true);
           vendorAdapter.setShowSql(true);
   
           LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
           factory.setJpaVendorAdapter(vendorAdapter);
           factory.setPackagesToScan("com.TT.pojo");
           factory.setDataSource(dataSource());
           return factory;
       }
   
       /*
       * <bean class="org.springframework.orm.jpa.JpaTransactionManager" name="transactionManager">
           <property name="entityManagerFactory" ref="entityManagerFactory"></property>
       </bean>
       * */
       @Bean
       public PlatformTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
           
           JpaTransactionManager txManager = new JpaTransactionManager();
           txManager.setEntityManagerFactory(entityManagerFactory);
           return txManager;
       }
   }
  1. pojo类如(一)相同
  2. 测试
   // 注意与(一)不同
   @ContextConfiguration(classes = SpringDataJPAConfig.class)
   @RunWith(SpringJUnit4ClassRunner.class)
   public class SpringdataJpaTest {
   
       @Autowired
       CustomerRepository repository;
   
       @Test
       public void testR() {
           Optional<Customer> byId = repository.findById(1L);
           System.out.println(byId.get());
       }
   }

二、Springboot配置方式

  1. 依赖
   <parent>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-parent</artifactId>
       <version>2.6.0</version>
       <relativePath/>
   </parent>
   
   <dependencies>
       <!--data-jpa的场景启动器-->
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-data-jpa</artifactId
       </dependency>
               
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-web</artifactId>
       </dependency>
               
       <dependency>
           <groupId>mysql</groupId>
           <artifactId>mysql-connector-java</artifactId>
           <scope>runtime</scope>
       </dependency>
               
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-test</artifactId>
           <scope>test</scope>
       </dependency>
   </dependencies>
  1. application.properties配置文件
   # 数据库表的生成策略
   spring.jpa.hibernate.ddl-auto=update
   # 数据源
   spring.datasource.url=jdbc:mysql://localhost:3306/xxx?serverTimezone=UTC
   spring.datasource.username=root
   spring.datasource.password=root
   spring.datasource.driver-class-name=com.mysql.jdbc.Driver
   # 是否显示sql在控制台
   spring.jpa.show-sql= true 
   spring.jpa.properties.hibernate.format_sql=true

​ 其他可配置项:

在这里插入图片描述

  1. 测试
   // pojo
   @Entity
   @Table(name = "tb_customer")  
   public class Customer {
       ……
   }
   
   // Repository
   @Component
   public interface CustomerRepository extends PagingAndSortingRepository<Customer,Long>{
   }
   
   // Service
   public interface CustomerService {
       Iterable<Customer> getAll();
   }
   
   // ServiceImpl
   @Service
   public class CustomerServiceImpl implements  CustomerService{
       @Autowired
       CustomerRepository repository;
   
       @Override
       public Iterable<Customer> getAll() {
           return repository.findAll();
       }
   }
   
   // Controller
   @RestController
   public class CustomerController {
       @Autowired
       CustomerService customerService;
   
       @RequestMapping("/customer/all")
       public Iterable<Customer> getAll(){
           return customerService.getAll();
       }
   }
  • 24
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TT_aee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值