SpringData JPA 搭建 xml的 配置方式

 

1.导入版本管理依赖 到父项目里

<dependencyManagement><dependencies><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-bom</artifactId><version>2021.1.10</version><scope>import</scope><type>pom</type></dependency></dependencies>
</dependencyManagement>

2.导入spring-data-jpa 依赖 在子模块

  <dependencies><!--    Junit    --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><!--   hibernate --><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-entitymanager</artifactId><version>5.4.32.Final</version></dependency><!--        mysql  --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency><!--        jpa  --><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-jpa</artifactId></dependency><!--     连接池   --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.8</version></dependency><!--     spring -  test    --><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.3.10</version><scope>test</scope></dependency></dependencies>

3.创建实体类

package com.kuang.pojo;import javax.persistence.*;@Entity//作为 hibernate实体类
@Table(name = "tb_customer")//映射的表名
public class Customer {/*** @Id: 声明主键的配置* @GeneratedValue: 配置主键的生成策略*        strategy :*            1. GenerationType.IDENTITY :自增 mysql*               底层数据库必须支持自动增长 (底层数据库支持的自动增长方式,对id自增)*            2. GenerationType.SEQUENCE : 序列 ,oracle*               底层书库必须支持序列*            3. GenerationType.TABLE : jpa 提供的一种机制, 通过一张数据库表的形式帮助我们完成主键的配置*            4. GenerationType.AUTO : 由程序自动的帮助我们选择主键生成策略*   @Column(name = "cust_id") 配置属性和字段的映射关系*       name: 数据库表中字段的名称*/@Id@GeneratedValue(strategy = GenerationType.IDENTITY)@Column(name = "cust_id")private Long custId;//客户的主键@Column(name = "cust_name")private String custName;//客户的名称@Column(name = "cust_address")private String custAddress;public Long getCustId() {return custId;}public void setCustId(Long custId) {this.custId = custId;}public String getCustName() {return custName;}public void setCustName(String custName) {this.custName = custName;}public String getCustAddress() {return custAddress;}public void setCustAddress(String custAddress) {this.custAddress = custAddress;}@Overridepublic String toString() {return "Customer{" +"custId=" + custId +", custName='" + custName + '\'' +", custAddress='" + custAddress + '\'' +'}';}
}

4.创建spring配置文件

<?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/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/data/jpahttps://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.kuang.repositories"entity-manager-factory-ref="entityManagerFactory"transaction-manager-ref="transactionManager"/><!-- 配置 bean  EntityManagerFactory    --><bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"><property name="jpaVendorAdapter"><!--         Hibernate 实现   --><bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"><!--            是否自动的表的生成  true 相当于之前的 update  false 相当于 none  --><property name="generateDdl" value="true"/><!--             是否显示sql   --><property name="showSql" value="true"/></bean></property><!--        扫描实体类的包  来决定哪些实体类做 ORM映射  --><property name="packagesToScan" value="com.kuang.pojo"></property>
<!--    数据源   druid --><property name="dataSource" ref="dataSource"/></bean><!--    数据源--><bean class="com.alibaba.druid.pool.DruidDataSource" id="dataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/springdata_jpa?useUnicode=true&amp;useSSL=false&amp;characterEncoding=UTF-8"/><property name="username" value="root"/><property name="password" value="2001"/></bean><!--    声明式事务  --><bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager"><property name="entityManagerFactory" ref="entityManagerFactory"/></bean>
<!-- 启动注解方式的声明式事务--><tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>
</beans>

5.创建Repository接口

package com.kuang.repositories;import com.kuang.pojo.Customer;
import org.springframework.data.repository.CrudRepository;public interface CustomerRepository extends CrudRepository<Customer,Long> {}

6.测试通过主键查询

package com.kuang.test;import com.kuang.pojo.Customer;
import com.kuang.repositories.CustomerRepository;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import java.util.Optional;@ContextConfiguration("/spring.xml")
@RunWith(SpringJUnit4ClassRunner.class)
public class SpringDataJpaTest {@Autowiredprivate CustomerRepository customerRepository;@Testpublic void select() {Optional<Customer> byId = customerRepository.findById(1L);Customer customer = byId.get();System.out.println(customer);}
}

package com.kuang.test;import com.kuang.pojo.Customer;
import com.kuang.repositories.CustomerRepository;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import java.util.Optional;@ContextConfiguration("/spring.xml")
@RunWith(SpringJUnit4ClassRunner.class)
public class SpringDataJpaTest {@Autowiredprivate CustomerRepository customerRepository;@Testpublic void select() {Optional<Customer> byId = customerRepository.findById(1L);Customer customer = byId.get();System.out.println(customer);}@Testpublic void insert() {Customer customer = new Customer();customer.setCustAddress("南环路");customer.setCustName("豪哥");Customer save = customerRepository.save(customer);save.setCustAddress("刘备");System.out.println(customer);}@Testpublic void update() {Customer customer = new Customer();customer.setCustId(1L);customer.setCustAddress("栖霞路");customer.setCustName("张飞");Customer save = customerRepository.save(customer);}@Testpublic void remove() {Customer customer = new Customer();customer.setCustId(1L);customerRepository.delete(customer);}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/266587.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

fastdds共享内存实现原理

fastdds 共享内存分两个部分&#xff0c;一部分用于保存数据&#xff0c;一部分用于通信。 fastrtps_“UUID”:共享内存包括又两部分数据&#xff0c;BufferNode和segment_size, 用配置文件port_queue_capacity_指定BufferNode的数量&#xff0c;segment_size用于保存实际传输的…

互联网寒冬,抱团取暖!软件测试十大必问面试题(附答案和解析)

01 介绍之前负责的项目 参考答案&#xff1a;先大概描述一下这个项目是做什么的&#xff08;主要功能&#xff09;&#xff0c;包括哪些模块&#xff0c;是什么架构的&#xff08;B/S、C/S、移动端&#xff1f;&#xff09;&#xff0c;你在其中负责哪些模块的测试。期间经历了…

moviepy基本参数用法大全

阅读本文档的前置说明&#xff1a; 本文档用于讲解Python的moviepy库的自带函数的用法&#xff0c;主要目的是讲一下每个函数的每个参数的含义&#xff0c;无需一开始就全部掌握&#xff0c;粗略看一下就行&#xff0c;可以在后面自己开发过程&#xff0c;遇到不会用的函数再回…

开关量防抖滤波器(梯形图和SCL源代码)

模拟量防抖超限报警功能块请查看下面文章链接: https://rxxw-control.blog.csdn.net/article/details/133969425https://rxxw-control.blog.csdn.net/article/details/133969425 1、开关量防抖滤波器 2、防抖滤波 3、梯形图代码

避碰规则_避碰与信号

第一章 总则 第二章 航行和避让 第一节 行动通则 第二节 机动船相遇&#xff0c;存在碰撞危险时的避让行动 第三节 机动船、人力船、帆船、排筏相遇&#xff0c;存在碰撞危险时的避让行动 第四节 船舶在能见度不良时的行动及其他 第三章 号灯和号型 1

【C++11】lambda表达式及包装器

一.lambda表达式 1.可调用对象 可调用对象即可以像函数一样被调用的对象&#xff0c;有以下三种&#xff1a; 函数(指针)仿函数对象lambda表达式 tips&#xff1a;调用函数时&#xff0c;既可以用函数名&#xff0c;也可以用函数地址&#xff0c;因为函数名和函数地址是一回事…

xtts和ogg不选择?

不选择ogg的理由&#xff1a; 1.需要在源端创建用户赋权&#xff0c;启用数据库最小日志&#xff0c;附加日志等操作--对生产影响较大 2.外键约束过多&#xff0c;割接启用可能很慢https://www.modb.pro/db/201126--割接停机时间影响 3.初始化配置expdp导出可能快照过旧&#x…

Python3+requests接口自动化session操作方法

在进行接口自动化测试时&#xff0c;有好多接口都基于登陆接口的响应值来关联进行操作的&#xff0c;在次之前试了很多方法&#xff0c;都没有成功&#xff0c;其实很简单用session来做。 1、在登陆接口创建一个全局session 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 # -*- co…

关于个人职业选择

职业选择&#xff0c;一直是个老生常谈的话题。这并不是一个容易做的决定。 让我们来看看AI怎么说。 首先是方向性的回答&#xff1a; 然后是一些具体的回答 我个人比较倾向于深耕网络安全。这是一个很有趣也是一个持续发展着的领域。 不知道关于这个事情你怎么看&#xff0…

代码随想录刷题题Day10

刷题的第十天&#xff0c;希望自己能够不断坚持下去&#xff0c;迎来蜕变。&#x1f600;&#x1f600;&#x1f600; 刷题语言&#xff1a;C / Python Day10 任务 ● 239. 滑动窗口最大值 ● 347.前 K 个高频元素 ● 总结 1 滑动窗口最大值 思路&#xff1a; 滑动窗口最大值是…

LangChain(0.0.340)官方文档八:Retrieval——Document transformers

LangChain官网、LangChain官方文档 、langchain Github、langchain API文档、llm-universe 文章目录 一、Text splitters1.1 快速开始&#xff08;RecursiveCharacterTextSplitter&#xff09;1.2 MarkdownHeaderTextSplitter1.2.1 按结构拆分md文件1.2.2 继续分割 Markdown gr…

2、Redis变慢原因排查(下)

感觉Redis变慢了&#xff0c;这些可能的原因你查了没 &#xff1f;(下) Redis变慢排查的上一篇【感觉Redis变慢了&#xff0c;这些可能的原因你查了没 &#xff1f;(上)】&#xff0c;我们是基于Redis命令为入口&#xff0c;比如命令使用不得当&#xff0c;bigkey问题&#xf…