当前位置: 首页 > news >正文

成都旅游网站建设规划方案深圳安嘉建设有限公司网站

成都旅游网站建设规划方案,深圳安嘉建设有限公司网站,建站之星设计师,广州网站建设丿新科送推广文章目录一、Spring Data基础概念二、JPA与JDBC的相同与不同之处三、Hibernate JPA快速搭建1.添加依赖2.实体类3.hibernate的配置文件 ——hibernate.cfg.xml四、测试——基于hibernate的持久化#xff08;单独使用#xff09;五、测试——基于JPA的持久化#xff08;… 文章目录一、Spring Data基础概念二、JPA与JDBC的相同与不同之处三、Hibernate JPA快速搭建1.添加依赖2.实体类3.hibernate的配置文件 ——hibernate.cfg.xml四、测试——基于hibernate的持久化单独使用五、测试——基于JPA的持久化单独使用1.建立 /resources/META-INF/persistence.xml 配置文件2.案例六、JPA对象的四种状态临时状态持久状态删除状态游离状态方法下对象的不同状态情况1、persist(Object entity)2、merge(Object entity)3、refresh(Object entity)4、remove(Object entity)七、Spring Data JPA搭建 -- xml方式1.添加依赖2. spring.xml3. CRUD测试 -- spring八、Spring Data JPA搭建 -- JavaConfig 方式1.JavaConfig九、自定义操作1.JPQL和SQL2.规定方法名3.Query By Example 动态查询4.Specifications5.Query DSL一、Spring Data基础概念 Spring Data统一和简化对不同类型持久性存储关系数据库系统和NoSQL数据存储的访问。 特性模板制作、对象/数据存储映射、Repository支持 二、JPA与JDBC的相同与不同之处 相同   1.都跟数据库操作有关JPA是JDBC的升华。   2.JPA和JDBC都是一组规范接口 不同之处   1.JDBC是由各个关系型数据库实现的JPA是由ORM框架实现。   2.JDBC使用SQL语句和数据库通信JPA用面向对象方式通过ORM框架来生成SQL进行操作。   3.JPA在JDBC之上JPA也要依赖JDBC才能操作数据库。 三、Hibernate JPA快速搭建 1.添加依赖 2.实体类 /*** 客户的实体类* 配置映射关系* 1.实体类和表的映射关系* Entity声明实体类* Table配置实体类和表的映射关系* name : 配置数据库表的名称* 2.实体类中属性和表中字段的映射关系*/ Data Entity Table(name tb_customer) public class Customer {/*** Id声明主键的配置* GeneratedValue:配置主键的生成策略* strategy:* GenerationType.IDENTITY 自增mysql* 底层数据库必须支持自动增长底层数据库支持的自动增长方式对id自增* GenerationType.SEQUENCE : 序列oracle* 底层数据库必须支持序列* GenerationType.TABLE : jpa提供的一种机制通过一张数据库表的形式帮助我们完成主键自增* GenerationType.AUTO 由程序自动的帮助我们选择主键生成策略* Column配置属性和字段的映射关系* name数据库表中字段的名称*/IdGeneratedValue(strategy GenerationType.IDENTITY)Column(name customer_id)private Long Id; //客户的主键Column(name customer_name)private String name;//客户名称Column(namecustomer_age)private int age;//客户年龄Column(namecustomer_sex)private boolean sex;//客户性别Column(namecustomer_phone)private String phone;//客户的联系方式Column(namecustomer_address)private String address;//客户地址 }Entity 作为hiberbate实体类 Tabel(name“表名”) 映射的表名 Id 声明主键 GenerateValue 主键的生成策略 Column(name“字段名”) 表单的列名 3.hibernate的配置文件 ——hibernate.cfg.xml ?xml version1.0 encodingutf-8? !DOCTYPE hibernate-configuration PUBLIC-//Hibernate/Hibernate Configuration DTD//ENhttp://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd hibernate-configurationsession-factory!--使用 Hibernate 自带的连接池配置--property nameconnection.driver_classcom.mysql.jdbc.Driver/propertyproperty nameconnection.urljdbc:mysql://localhost:3306/bianchengbang_jdbc?characterEncodingUTF-8/propertyproperty namehibernate.connection.usernameroot/propertyproperty namehibernate.connection.passwordroot/property!--hibernate 方言--property namehibernate.dialectorg.hibernate.dialect.MySQL5Dialect/property!--打印sql语句--property namehibernate.show_sqltrue/property!--格式化sql--property namehibernate.format_sqltrue/property!--表生成策略none 不会创建表create : 程序运行时创建数据库表如果有表先删除表再创建update 程序运行时创建表如果有表不会创建表create-drop : 每次加载hibernate时根据model类生成表但是sessionFactory一关闭,表就自动删除。validate : 每次加载hibernate时验证创建数据库表结构只会和数据库中的表进行比较不会创建新表但是会插入新值--property namehbm2ddl.autoupdate/property!-- 加载映射文件 择一--mapping resourcenet/biancheng/www/mapping/User.hbm.xml/!-- 指定哪些pojo需要进行ORM映射 择一--mapping classcom.test.pojo.Customer//session-factory /hibernate-configuration四、测试——基于hibernate的持久化单独使用 案例 懒查询 五、测试——基于JPA的持久化单独使用 1.建立 /resources/META-INF/persistence.xml 配置文件 依赖不用改多加一个配置文件。IDEA有persistence模板setting》file and code Template》JPA》Deployment descriptors》persistenceXX.xml ?xml version1.0 encodingUTF-8? persistence xmlnshttp://java.sun.com/xml/ns/persistence version2.0!-- name持久化单元名称transaction-type持久化单元事务类型(JTA:分布式事务管理,RESOURCE_LOCAL:本地事务管理) --persistence-unit namemyJpa transaction-typeRESOURCE_LOCAL!--jpa的实现方式,配置JPA服务提供商 --providerorg.hibernate.jpa.HibernatePersistenceProvider/provider!-- 可配可不配如果配置了顺序不能错必须在provider之后--!--classcom.test.pojo.Customer/class--!--可选配置配置jpa实现方的配置信息--properties!-- 数据库信息配置数据库驱动、数据库地址、数据库账户、数据库密码 --property namehibernate.connection.driver_class valuecom.mysql.jdbc.Driver/property namehibernate.connection.url valuejdbc:mysql://127.0.0.1:3306/hibernate_jpa?characterEncodingUTF-8/property namehibernate.connection.username valueroot/property namehibernate.connection.password valuepassword/!-- 配置JPA服务提供商可选参数 --property namehibernate.show_sql valuetrue /!-- 自动显示sql --property namehibernate.format_sql valuetrue/!-- 格式化sql --!-- 自动创建数据库表none 不会创建表create : 程序运行时创建数据库表如果有表先删除表再创建update 程序运行时创建表如果有表不会创建表create-drop : 每次加载hibernate时根据model类生成表但是sessionFactory一关闭,表就自动删除。validate : 每次加载hibernate时验证创建数据库表结构只会和数据库中的表进行比较不会创建新表但是会插入新值。--property namehibernate.hbm2ddl.auto valueupdate //properties/persistence-unit /persistence2.案例 /** * 测试jpa的保存 案例保存一个客户到数据库中 * Jpa的操作步骤 * 1.加载配置文件创建工厂实体管理器工厂对象 * 2.通过实体管理器工厂获取实体管理器 * 3.获取事务对象开启事务 * 4.完成增删改查操作 * 5.提交事务回滚事务 * 6.释放资源 */ Test public void testSave() {//1.加载配置文件创建工厂实体管理器工厂对象EntityManagerFactory factory Persistence.createEntityManagerFactory(myJpa);//2.通过实体管理器工厂获取实体管理器EntityManager em factory.createEntityManager();//3.获取事务对象开启事务EntityTransaction tx em.getTransaction();tx.begin();//4.完成增删改查操作保存一个客户到数据库中Customer customer new Customer();customer.setName(Sam);customer.setAddress(Beijing);//保存操作em.persist(customer);//5.提交事务tx.commit();//6.释放资源em.close();factory.close(); }---------------------------------api //立即查询 Customer customer em.find(Custormer.class,1L); //懒查询 Customer customer em.getReference(Custormer.class,1L); //更新 指定id会先查询数据是否有变化有变化则更新不指定id会插入一条数据 Customer customer new Customer(); customer.setCustId(5L); customer.setCustName(dfg); em.merge(customer); //更新 -- JPQL 不会进行查询 使用实体类名和属性名 String jpql Update Customer set name:name where id:id ; em.createQuery(jpql).setParameter(name,李四).setParameter(id,5L).executeUpdate(); //更新 -- 使用SQL 使用表名和字段名 String sql Update tb_customer set name:name where id:id ; em.createNativeQuery(sql).setParameter(name,李四11).setParameter(id,5L).executeUpdate(); //删除 先查再删除 //不能删除游离数据只能删除持久化数据从数据库里查出来的数据 Customer customer em.find(Custormer.class,5L); em.remove(customer);六、JPA对象的四种状态 临时状态 刚创建出来的对象它此时还没与entityManager发生关系没有被持久化不处于entityManager中的对象。 持久状态 与entityManager发生关系已经被持久化是数据库实在的记录比如执行了persist()、find()、merge()。 情况 持久状态进行了修改会同步数据库把数据库里的记录查询出来做修改并没有执行保存操作也会把更新数据的操作同步到数据库。 删除状态 执行remove()方法事物提交之前。 游离状态 游离状态是提交到数据库后事务commit后实体的状态。比如该对象commit之后在数据库有对应的数据但是它还没与entityManager发生关系。此时实体的属性可以做任何改变也不会同步到数据库因为事务已经提交了。 方法下对象的不同状态情况 1、persist(Object entity) persist方法可以将实例转换为managed托管状态在调用flush()方法或提交事物之后 实例将会被插入到数据库中。 对不同状态下的实例Apersist会产生以下操作 1如果A是一个new状态的实体它将会转为managed状态 2如果A是一个managed状态的实体它的状态不会发生任何改变但是系统仍会在数据库执行 insert 操作 3如果A是一个removed删除状态的实体它将会转换为受控状态 4如果A是一个detached分离状态的实体该方法会抛出IllegalArgumentException异常具体异常根据不同的JPA实现有关。 2、merge(Object entity) merge方法的主要作用是将用户对一个detached状态实体的修改进行归档归档后将产生一个新的managed状态对象。 对不同状态下的实例Amerge会产生以下操作 1如果A是一个detached状态的实体该方法会将A的修改提交到数据库并返回一个新的managed状态的实例A2 2如果A是一个new状态的实体该方法会产生一个根据A产生的managed状态实体A2 3如果A是一个managed状态的实体它的状态不会发生任何改变但是系统仍会在数据库执行update操作。 4如果A是一个removed状态的实体该方法会抛出IllegalArgumentException异常。 3、refresh(Object entity) refresh方法可以保证当前的实例与数据库中的实例内容一致。 对不同状态下的实例Arefresh会产生以下操作 1如果A是一个new状态的实体A的状态不会发生任何改变但系统仍会在数据库中执行delete语句 2如果A是一个managed状态的实体它的属性将会和数据库中的数据同步 3如果A是一个removed状态的实体该方法将会抛出异常Entity not managed 4如果A是一个detached状态的实体该方法将会抛出异常 4、remove(Object entity) remove方法可以将实体转换为removed状态并且在调用flush()方法或提交事物后删除数据库中的数据。 对不同状态下的实例Aremove会产生以下操作 1如果A是一个new状态的实体A的状态不会发生任何改变但系统仍会在数据库中执行delete语句 2如果A是一个managed状态的实体它的状态会转换为removed 3如果A是一个removed状态的实体不会发生任何操作 4如果A是一个detached状态的实体该方法将会抛出异常 七、Spring Data JPA搭建 – xml方式 1.添加依赖 父项目 添加spring data的统一版本管理它可以统一子项目的Spring Data JDBC、Spring Data JPA 、Spring Data Redis等版本。 dependencyManagementdependenciesdependencygroupIdorg.springframework.data/groupIdartifactIdspring-data-bom/artifactIdversion2022.0.2/versionscopeimport/scopetypepom/type/dependency/dependencies /dependencyManagement子项目 spring 项目需要另外添加hibernate依赖spring boot项目不需要。 dependenciesdependencygroupIdorg.springframework.data/groupIdartifactIdspring-data-jpa/artifactId/dependency dependencies2. spring.xml 整合jpa jpa:repositories /对应EnableJpaRepositories注解 3. CRUD测试 – spring 定义接口继承CrudRepository接口 public interface CrudRepositoryT, ID extends RepositoryT, ID {}查询 插入 更新 先查再更新 删除 先查再删除把new出来的实例的游离状态改为持久状态 八、Spring Data JPA搭建 – JavaConfig 方式 1.JavaConfig //标记当前类为配置类 Configuration //启动jpa 相当于xml的jpa:repository/标签 basePackage指定数据返回层.接口 EnableJpaRepositories(basePackagecom.test.repositories) //开启事务 EnableTransactionManagement class ApplicationConfig {Beanpublic DataSource dataSource() {DruidDataSource dataSource new DruidDataSource();dataSource.setUserName(root);dataSource.setPassWord(123456);dataSource.setDriverClassName(com.mysql.jdbc.Driver);dataSource.setUrl(jdbc:mysql://127.0.0.1:3306/hibernate_jpa?characterEncodingUTF-8);return dataSource;//使用内嵌内存数据库/**EmbeddedDatabaseBuilder builder new EmbeddedDatabaseBuilder();return builder.setType(EmbeddedDatabaseType.HSQL).build();**/}Beanpublic LocalContainerEntityManagerFactoryBean entityManagerFactory() {HibernateJpaVendorAdapter vendorAdapter new HibernateJpaVendorAdapter();vendorAdapter.setGenerateDdl(true);vendorAdapter.setShowSql(true);LocalContainerEntityManagerFactoryBean factory new LocalContainerEntityManagerFactoryBean();factory.setJpaVendorAdapter(vendorAdapter);//指定实体类的包factory.setPackagesToScan(com.acme.domain);factory.setDataSource(dataSource());return factory;}Beanpublic PlatformTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {JpaTransactionManager txManager new JpaTransactionManager();txManager.setEntityManagerFactory(entityManagerFactory);return txManager;} }测试使用 九、自定义操作 1.JPQL和SQL JPQL定义参数可以使用索引指定或参数名结合Param注解指定。 用 法 增删改需要开启事务Transactional通常放在业务逻辑层上声明。 JPQL是不支持新增的用Hibernate实现伪插入只能插入从别的地方查到的值。 SQL 2.规定方法名 根据提供的主题关键字前缀决定方法作用谓词关键字和修饰符决定查询条件。只支持查询和删除。官网使用说明有详细使用方法的 例 findBy关键字 属性名称首字母大写 查询条件首字母大写 3.Query By Example 动态查询 只支持查询只支持字符串开头、包含、结尾、正则匹配不支持嵌套或分组的属性约束。官网使用说明 实现 //继承QueryByExampleExecutor接口 public interface CustomerRepository extends PagingAndSortingRepositoryCustomer, Long ,QueryByExampleExecutorCustomer{ … }测试 通过customer对象来进行筛选。 通过匹配器进行条件的限制。 4.Specifications 对所有类型支持。 步骤 1、通过root拿到需要设置条件的字段 2、通过CriteraBuilder设置不同类型条件 3、组合条件 实现 //继承JpaSpecificationExecutor接口 public interface CustomerRepository extends CrudRepositoryCustomer, Long, JpaSpecificationExecutorCustomer {… } 测试 5.Query DSL 通用查询框架借助QueryDSL可以在任何支持的ORM框架或SQL平台上以通用API方式构建查询。官网使用说明 实现 //继承QuerydslPredicateExecutor interface UserRepository extends CrudRepositoryUser, Long, QuerydslPredicateExecutorUser { }//官方例子能直接实体类user.firstname是添加了插件 Predicate predicate user.firstname.equalsIgnoreCase(dave).and(user.lastname.startsWithIgnoreCase(mathews));userRepository.findAll(predicate);使用
http://www.hkea.cn/news/14403437/

相关文章:

  • 深圳模板网站建设设计公司体验营销策划方案
  • 在中国建设工程造价管理协会网站国企单位网站建设方案
  • 电子商务网站建设具体方案外贸建站有哪些公司
  • 讨论致同国际网站建设情况制作网页的网站推荐
  • 基础建设期刊在哪个网站可以查阿里巴巴网站建设哪家好
  • 上海免费建站模板杨和网站建设
  • 全部网站北京网站外包公司
  • 做两个单页面网站大概多少钱网站推广教程优化整站
  • 潮州网站建设推广wordpress 卢松松主题
  • 笑话 语录用什么网站做软件定制开发介绍
  • 网站关键词优化排名软件系统服务器地址
  • 中山网站建设多少钱兰州人工优化
  • 相册网站建设目的网站建设分录怎么开
  • 网站注册怎么做屏蔽过滤简要说明网站建设的基本流程
  • python做网站前端重庆网站开发公司
  • 网站建设需求信息长沙网站设计的公司
  • 通付盾 建设公司网站公司网站模板源代码
  • 国外营销型网站建设有没有做高仿的网站
  • 江西南昌网站定制电商运营seo是什么
  • 数码设计网站阅读网站怎么做
  • les做ml网站网站内容编写方法
  • 网站开发用什么编辑语言好汕尾招聘网
  • 网站设计网站项目流程图网络 企业网站
  • 用网站做CAN总线通信好吗安装完wordpress第一件事
  • 广西城乡建设厅网站冷水滩城乡建设局网站
  • 网站建设报价单 excel电子商务网站策划书
  • 网站名称如何设置性价比高的域名备案加急
  • 电子商务公司网站设计专业群建设 网站
  • 做网站要不要学ps设计模板用什么软件
  • 2345浏览器网站大全宁波企业网站开发公司