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,一经查实,立即删除!

相关文章

oracle函数 INITCAP(c1)

【功能】返回字符串并将字符串的第一个字母变为大写&#xff0c;其它字母小写; 【参数】c1字符型表达式 【返回】字符型 【示例】 SQL> select initcap(smith abc aBC) upp from dual; UPP ----- Smith Abc Abc转载于:https://www.cnblogs.com/fanweisheng/p/11119958.html

设计模式——抽象工厂

文章目录1.“对象创建”模式2.动机&#xff08;Motivation&#xff09;3.模式定义4.要点总结5.代码对比1.“对象创建”模式 通过“对象创建” 模式绕开new&#xff0c;来避免对象创建&#xff08;new&#xff09;过程中所导致的紧耦合&#xff08;依赖具体类&#xff09;&…

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;导演描述的世界似乎离我们越来越近了。其中一个进展来…

面试题——面经题目(1)

文章目录1. 进程调度算法2.操作系统在调度线程时会做哪些事情3.页面置换算法4.32位系统,64位的系统内存是多大5.CPU的GHz是什么意思1. 进程调度算法 进程调度规定了CPU执行就绪队列中的多个进程的顺序。 1.先来先服务 &#xff08;FCFS&#xff0c;first come first served&…

去掉input密码框自动补全功能

<input name"password" autocomplete"off" hidden> <input type"password" autocomplete"off"> //不能加id 转载于:https://www.cnblogs.com/yuyedaocao/p/11124653.html

《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;如何使用组件呢&…

iscsi-分区类型

iSCSI简介(Internet SCSI)&#xff1a; iSCSI 小型计算机系统接口&#xff0c;IBM公司研发&#xff0c;用于在IP网络上运行SCSI协议&#xff1b;解决了 SCSI需要直连存储设备的局限性&#xff1b;可以不停机扩展存储容量&#xff0c;iSCSI 将 SCSI 接口与 Ethernet 技术结合&am…

设计模式1——设计模式的原则

1.从面向对象说起 ~~~~~~变化是代码复用的天敌&#xff0c;面向对象的设计语言的优势就是抵御变化&#xff01;这里的所谓抵御变化&#xff0c;不是说采用面向对象的设计语言&#xff0c;就没有变化&#xff0c;而是将变化的范围降到最小。 ~~~~~~之前我们所认识的面向对象的语…

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

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

操作系统学习笔记-01-1.1课程概述

此课程来自于b站操作系统_清华大学(向勇、陈渝)&#xff0c;博客作为博主手打&#xff0c;当作参考笔记&#xff0c;回头复习223 1.1课程概述 课程简介 什么是操作系统 为什么学习以及如何学习操作系统 操作系统的实例&#xff0c;历史和结构介绍 基本概念及原理 操作系统…