springdata学习笔记-01-helloworld-(暂时不全223)

第一天

orm思想和hibernate以及jpa的概述和jpd的基本操作

传统jdbc操作

  1. 获取链接
  2. 创建statement对象
  3. 可以对占位符赋值
  4. 发送查询
  • 操作繁琐
  • 占位符赋值麻烦
  1. orm思想

    • 主要目的:操作实体类就相当于操作数据库表
    • 建立两个映射关系
      • 实体类和表的映射关系
      • 实体类中属性和表中字段的映射关系
    • 不再重点关注sql语句
    • 实现了ORM思想的框架mybatis,htibernate
  2. hibernate框架介绍

    • hibernate是一个开源的对象关系映射框架
    • 它对jdbc进行了非常轻量级的对象封装
    • 它将pojo与数据库表建立映射关系,是一个全自动的orm框架
  3. jpa规范

    • jpa规范,实现jpa规范,内部是由接口和抽象类组成
  4. jpa的基本操作

    1. 搭建环境的过程

      • 创建maven工程导入坐标

      • 需要配置jpa的核心配置文件

        • 配置到类路径下的一个叫做META-INF的文件夹下

        • 命名:persistence.xml

          <?xml version="1.0" encoding="UTF-8"?>
          <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0"><!--需要配置persistence-unit节点持久化单元:name:持久化单元名称transaction-type:事务管理的方式JTA:分布式事务管理RESOURCE_LOCAL:本地事务管理--><persistence-unit name="myJpa" transaction-type="RESOURCE_LOCAL"><!--jpa的实现方式 --><provider>org.hibernate.jpa.HibernatePersistenceProvider</provider><!--可选配置:配置jpa实现方的配置信息--><properties><!-- 数据库信息用户名,javax.persistence.jdbc.user密码,  javax.persistence.jdbc.password驱动,  javax.persistence.jdbc.driver数据库地址   javax.persistence.jdbc.url--><property name="javax.persistence.jdbc.user" value="root"/><property name="javax.persistence.jdbc.password" value="123456"/><property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/><property name="javax.persistence.jdbc.url" value="jdbc:mysql:///jpa"/><!--配置jpa实现方(hibernate)的配置信息显示sql           :   false|true自动创建数据库表    :  hibernate.hbm2ddl.autocreate      : 程序运行时创建数据库表(如果有表,先删除表再创建)update      :程序运行时创建表(如果有表,不会创建表)none        :不会创建表--><property name="hibernate.show_sql" value="true" /><property name="hibernate.hbm2ddl.auto" value="update" /></properties></persistence-unit>
          </persistence>
      • 编写客户的实体类

        package cn.itcast.domain;import javax.persistence.*;/*** 客户的实体类*      配置映射关系***   1.实体类和表的映射关系*      @Entity:声明实体类*      @Table : 配置实体类和表的映射关系*          name : 配置数据库表的名称*   2.实体类中属性和表中字段的映射关系***/
        @Entity
        @Table(name = "cst_customer")
        public class Customer {/*** @Id:声明主键的配置* @GeneratedValue:配置主键的生成策略*      strategy*          GenerationType.IDENTITY :自增,mysql*                 * 底层数据库必须支持自动增长(底层数据库支持的自动增长方式,对id自增)*          GenerationType.SEQUENCE : 序列,oracle*                  * 底层数据库必须支持序列*          GenerationType.TABLE : jpa提供的一种机制,通过一张数据库表的形式帮助我们完成主键自增*          GenerationType.AUTO : 由程序自动的帮助我们选择主键生成策略* @Column:配置属性和字段的映射关系*      name:数据库表中字段的名称*/@Id@GeneratedValue(strategy = GenerationType.IDENTITY)@Column(name = "cust_id")private Long custId; //客户的主键@Column(name = "cust_name")private String custName;//客户名称@Column(name="cust_source")private String custSource;//客户来源@Column(name="cust_level")private String custLevel;//客户级别@Column(name="cust_industry")private String custIndustry;//客户所属行业@Column(name="cust_phone")private String custPhone;//客户的联系方式@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 getCustSource() {return custSource;}public void setCustSource(String custSource) {this.custSource = custSource;}public String getCustLevel() {return custLevel;}public void setCustLevel(String custLevel) {this.custLevel = custLevel;}public String getCustIndustry() {return custIndustry;}public void setCustIndustry(String custIndustry) {this.custIndustry = custIndustry;}public String getCustPhone() {return custPhone;}public void setCustPhone(String custPhone) {this.custPhone = custPhone;}public String getCustAddress() {return custAddress;}public void setCustAddress(String custAddress) {this.custAddress = custAddress;}@Overridepublic String toString() {return "Customer{" +"custId=" + custId +", custName='" + custName + '\'' +", custSource='" + custSource + '\'' +", custLevel='" + custLevel + '\'' +", custIndustry='" + custIndustry + '\'' +", custPhone='" + custPhone + '\'' +", custAddress='" + custAddress + '\'' +'}';}
        }
      • 配置实体类和表,类中属性和表中字段的映射关系

      • 保存客户到数据库中

    2. 完成基本的增删改查操作

      • 单元测试

        package cn.itcast.test;import cn.itcast.domain.Customer;
        import cn.itcast.utils.JpaUtils;
        import org.junit.Test;import javax.persistence.EntityManager;
        import javax.persistence.EntityManagerFactory;
        import javax.persistence.EntityTransaction;
        import javax.persistence.Persistence;public class JpaTest {/*** 测试jpa的保存*      案例:保存一个客户到数据库中*  Jpa的操作步骤*     1.加载配置文件创建工厂(实体管理器工厂)对象*     2.通过实体管理器工厂获取实体管理器*     3.获取事务对象,开启事务*     4.完成增删改查操作*     5.提交事务(回滚事务)*     6.释放资源*/@Testpublic void testSave() {
        //        //1.加载配置文件创建工厂(实体管理器工厂)对象
        //        EntityManagerFactory factory = Persistence.createEntityManagerFactory("myJpa");
        //        //2.通过实体管理器工厂获取实体管理器
        //        EntityManager em = factory.createEntityManager();EntityManager em = JpaUtils.getEntityManager();//3.获取事务对象,开启事务EntityTransaction tx = em.getTransaction(); //获取事务对象tx.begin();//开启事务//4.完成增删改查操作:保存一个客户到数据库中Customer customer = new Customer();customer.setCustName("传智播客");customer.setCustIndustry("教育");//保存,em.persist(customer); //保存操作//5.提交事务tx.commit();//6.释放资源em.close();//       factory.close();}/*** 根据id查询客户*  使用find方法查询:*      1.查询的对象就是当前客户对象本身*      2.在调用find方法的时候,就会发送sql语句查询数据库**  立即加载***/@Testpublic  void testFind() {//1.通过工具类获取entityManagerEntityManager entityManager = JpaUtils.getEntityManager();//2.开启事务EntityTransaction tx = entityManager.getTransaction();tx.begin();//3.增删改查 -- 根据id查询客户/*** find : 根据id查询数据*      class:查询数据的结果需要包装的实体类类型的字节码*      id:查询的主键的取值*/Customer customer = entityManager.find(Customer.class, 1l);// System.out.print(customer);//4.提交事务tx.commit();//5.释放资源entityManager.close();}/*** 根据id查询客户*      getReference方法*          1.获取的对象是一个动态代理对象*          2.调用getReference方法不会立即发送sql语句查询数据库*              * 当调用查询结果对象的时候,才会发送查询的sql语句:什么时候用,什么时候发送sql语句查询数据库** 延迟加载(懒加载)*      * 得到的是一个动态代理对象*      * 什么时候用,什么使用才会查询*/@Testpublic  void testReference() {//1.通过工具类获取entityManagerEntityManager entityManager = JpaUtils.getEntityManager();//2.开启事务EntityTransaction tx = entityManager.getTransaction();tx.begin();//3.增删改查 -- 根据id查询客户/*** getReference : 根据id查询数据*      class:查询数据的结果需要包装的实体类类型的字节码*      id:查询的主键的取值*/Customer customer = entityManager.getReference(Customer.class, 1l);System.out.print(customer);//4.提交事务tx.commit();//5.释放资源entityManager.close();}/*** 删除客户的案例**/@Testpublic  void testRemove() {//1.通过工具类获取entityManagerEntityManager entityManager = JpaUtils.getEntityManager();//2.开启事务EntityTransaction tx = entityManager.getTransaction();tx.begin();//3.增删改查 -- 删除客户//i 根据id查询客户Customer customer = entityManager.find(Customer.class,1l);//ii 调用remove方法完成删除操作entityManager.remove(customer);//4.提交事务tx.commit();//5.释放资源entityManager.close();}/*** 更新客户的操作*      merge(Object)*/@Testpublic  void testUpdate() {//1.通过工具类获取entityManagerEntityManager entityManager = JpaUtils.getEntityManager();//2.开启事务EntityTransaction tx = entityManager.getTransaction();tx.begin();//3.增删改查 -- 更新操作//i 查询客户Customer customer = entityManager.find(Customer.class,1l);//ii 更新客户customer.setCustIndustry("it教育");entityManager.merge(customer);//4.提交事务tx.commit();//5.释放资源entityManager.close();}}

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

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

相关文章

nginx学习笔记-01nginx入门,环境搭建,常见命令

nginx学习笔记-01nginx入门&#xff0c;环境搭建&#xff0c;常见命令 文章目录nginx学习笔记-01nginx入门&#xff0c;环境搭建&#xff0c;常见命令1.nginx的基本概念2.nginx的安装&#xff0c;常用命令和配置文件3.nginx配置实例1.nginx的基本概念 nginx是什么&#xff0c;做…

MIT博士用概率编程让AI和人类一样看三维|NeurIPS 2021

来源&#xff1a;机器学习研究组订阅人与AI之间最大的区别就是对常识的利用&#xff01;无论各种AI模型在各大排行榜以何种性能超越了人类&#xff0c;它们在常识的利用上仍然远远不及人类&#xff0c;而这也正是目前AI研究中需要面临的一个巨大的挑战。对于自然语言处理的研究…

Unity Shader 2D水流效果

水流的模拟主要运用了顶点变换和纹理动画的结合&#xff1b; 顶点变换中&#xff0c;利用正弦函数模拟河流的大致形态&#xff0c;例如波长&#xff0c;振幅等。 纹理动画中&#xff0c;将纹理坐标朝某一方向持续滚动以形成流动的效果。 脚本如下&#xff1a; 1 Shader "M…

2022年智能家居十大预测新鲜出炉:全屋智能驶入快车道?健身镜成新宠……

来源&#xff1a;物联网智库 2021年接近尾声&#xff0c;这一年&#xff0c;新冠病毒仍旧没有离开地球&#xff0c;而在疫情常态化、工作与生活回归正轨之余&#xff0c;人们对于网络与虚拟世界的依赖度也陡然骤增。这一转变无疑将极大拉动消费端的数字化产业发展&#xff0c;除…

数据结构与算法——动态规划

文章目录1.内容概述2.爬楼梯2.1 题目描述2.算法思想2.3 代码实现3.打家劫舍3.1 题目描述3.2 算法思路3.3 代码实现4.最大子序和4.1 题目描述4.2 算法思路4.3 代码思路5. 零钱兑换5.1 题目描述5.2 算法思路5.3 代码实现6.三角形最小路径和6.1 题目描述6.2 算法思路6.3 代码实现7…

vue学习笔记-01-前端的发展历史(从后端到前端,再到前后端分离,再到全栈)

vue学习笔记-01-前端的发展历史&#xff08;从后端到前端&#xff0c;再到前后端分离&#xff0c;再到全栈&#xff09; 这篇文章是博主在看vue-前端发展简史的时候做的笔记&#xff0c;以供后续学习复习 文章目录vue学习笔记-01-前端的发展历史&#xff08;从后端到前端&#…

黑客帝国「缸中之脑」有眉目了?培养皿中百万人脑细胞学会打乒乓球,仅用了5分钟...

来源&#xff1a;机器之心编辑&#xff1a;张倩、杜伟既然生物神经元如此高效&#xff0c;为什么不拿来用呢&#xff1f;最新版本的《黑客帝国》还有两天才会上映&#xff0c;但最近的一些科技进展总让我们觉得&#xff0c;导演描述的世界似乎离我们越来越近了。其中一个进展来…

《Science》基因组比对的革命性技术

来源&#xff1a;生物通加州大学圣克鲁斯基因组研究所(UC Santa Cruz Genomics Institute)的研究人员推出了一种名为“长颈鹿”(Giraffe)的新工具&#xff0c;可以有效地将新的基因组序列绘制到代表多种不同人类基因组序列的“泛基因组”(pangenome)上。使用泛基因组学方法而不…

vue学习笔记-02-前端的发展历史浅谈mmvm设计理念

vue学习笔记-02-前端的发展历史浅谈mmvm设计理念 文章目录1. MVVM模式的实现者2.第一个vue程序3.什么是mvvm&#xff1f;4.为什么要用mvvm&#xff1f;5.mvvm的组成部分7.MVVM 模式的实现者8.为什么要使用 Vue.js1. MVVM模式的实现者 Model:模型层&#xff0c;在这里表示JavaSc…

linux——select、poll、epoll

文章目录1.多路I/O转接服务器2.select3.select代码4.poll5.epoll5.1 基础API5.3 epoll代码5.4 边沿触发和水平触发5.4.1 水平出发LT5.4.2 边缘触发5.4.3 服务器的边缘触发和水平触发5.4 边缘触发但是能一次读完6.epoll反应堆模型6.1 反应堆模型6.2 epoll反应堆代码7.心跳包8.线…

年终盘点:2021年中国科技的重大突破

来源&#xff1a;科技日报2021年已经步入尾声&#xff0c;过去的一年是科技界屡创新高、收获满仓的一年。这一年&#xff0c;恰逢中国共产党百年华诞&#xff0c;我国科技界更是取得多项重要突破。量子计算获得重大进展&#xff0c;使我国成为唯一在两个物理体系中实现量子计算…

vue学习笔记-03-浅谈组件-概念,入门,如何用props给组件传值?

vue学习笔记-03-浅谈组件-概念&#xff0c;入门&#xff0c;如何用props给组件传值&#xff1f; 文章目录vue学习笔记-03-浅谈组件-概念&#xff0c;入门&#xff0c;如何用props给组件传值&#xff1f;什么是组件&#xff1f;为什么要使用组件&#xff1f;如何使用组件呢&…

盘点:2021年度物理学十大突破|《物理世界》

来源&#xff1a;物理世界作者&#xff1a;哈米什约翰斯顿&#xff08;Hamish Johnston&#xff09;译者&#xff1a;王晓涛、乔琦2021年12月14日&#xff0c;《物理世界》&#xff08;Physics World&#xff09;编辑从其网站发表的近600项研究进展中评选出了年度物理学领域十大…

Python实现二叉树的遍历

二叉树是有限个元素的集合&#xff0c;该集合或者为空、或者有一个称为根节点&#xff08;root&#xff09;的元素及两个互不相交的、分别被称为左子树和右子树的二叉树组成。 二叉树的每个结点至多只有二棵子树(不存在度大于2的结点)&#xff0c;二叉树的子树有左右之分&#…

操作系统学习笔记-02-1.2-什么是操作系统

1.2什么是操作系统 没有一个完整&#xff0c;精确&#xff0c;公认的定义从功能和特点上来介绍操作系统 用户角度上&#xff0c;操作系统是一个控制软件管理应用程序为应用程序提供服务杀死应用程序 资源管理管理外设&#xff0c;分配资源 操作系统架构层次 硬件之上应用程序之…

大脑活动与认知: 热力学与信息论的联系

来源&#xff1a;集智俱乐部作者&#xff1a;Guillem Collell、Jordi Fauquet译者:张澳审校&#xff1a;刘培源编辑&#xff1a;邓一雪导语信息和能量之间的关系已经在物理学、化学和生物学中得到了广泛的研究。然而&#xff0c;这种联系并没有在神经科学领域形式化。2015年&am…

离散数学学习笔记-01-随机试验与随机事件

文章目录1.1.1随机试验与随机事件引言随机事件1.1.2.样本空间与事件的集合表示基本概念1.1.3事件之间的关系1.包含2.并&#xff08;和&#xff09;引入概率论的三个要素&#xff1a;1.1.1随机试验与随机事件 引言 确定性&#xff08;必然&#xff09;&#xff1a;一定发生&am…

18-ESP8266 SDK开发基础入门篇--TCP 服务器 RTOS版,串口透传,TCP客户端控制LED

https://www.cnblogs.com/yangfengwu/p/11112015.html 先规定一下协议 aa 55 02 01 F1 4C 控制LED点亮 F1 4C为CRC高位和低位aa 55 02 00 30 8C 控制LED熄灭 30 8C为CRC高位和低位 aa 55 03 占空比(四字节 高位在前,低位在后) CRC校验高位,CRC校验低位 预留一个问题 我用客…

Ubuntu下的git使用指南

1.创建账号&#xff0c;绑定邮箱 在Git或者Gitee中创建一个Git账号或者Gitee账号&#xff0c;绑定邮箱&#xff0c;Ubuntu下的git命令对Git或者Gitee都有效。 2.安装git Ubuntu下下载git命令&#xff1a; sudo apt-get install git在下载完之后&#xff0c;可以通过git --v…

人类、动物和人工智能意识的新理论

来源&#xff1a;ScienceAI编译&#xff1a;萝卜皮德国波鸿鲁尔大学&#xff08;RUB&#xff09;的两名研究人员提出了一种新的意识理论。他们一直在探索意识的本质&#xff0c;大脑如何产生意识以及在何处产生意识&#xff0c;以及动物、人工智能是否也有意识等问题。新概念将…