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

phpmysql网站开发全程实例 pdf微信网站怎么做的好处

phpmysql网站开发全程实例 pdf,微信网站怎么做的好处,网站建设案例百度云,网站建设的多少钱一、Jpa的介绍 JPA ,是一套Sun公司Java官方制定的ORM 规范。 ORM,即 对象关系映射 (Object Relational Mapping),是一种程序技术,用于 在关系数据库和业务实体对象之间做映射 。ORM 框架的存在,…

一、Jpa的介绍

JPA ,是一套Sun公司Java官方制定的ORM 规范

ORM,即 对象关系映射 (Object Relational Mapping),是一种程序技术,用于 在关系数据库和业务实体对象之间做映射 。ORM 框架的存在,让开发者可以更关注业务层面的编程,而不需要过多关注数据库层面的操作。 其作用是在操作数据库之前,先把数据表与实体类关联起来,然后通过实体类的对象操作(增删改查)数据库表。

二、JPA实现流程:

2.1 ORM 映射

首先是 ORM 映射,通过注解或 XML 描述对象和表直接的映射关系。
@Entity
@Table(name = "user")
public class User {@Id// 该字段对应数据库中的列为主键@GeneratedValue(strategy = GenerationType.IDENTITY) // 主键自增长@Column(name = "id")private Long id;@Column(name = "name")private String name;@Column(name = "age")private Integer age;@Column(name = "sex")private String sex;
}

2.2 继承CrudRepository(或者JpaRepository)

新建接口,通过继承 CrudRepository 实现 CRUD 操作

@Repository
public interface UserDao extends CrudRepository<User,Long> {
}

2.3 添加服务层

@Service
public class UserService {@Autowiredprivate UserDao userDao;public void add(User user) {userDao.save(user);}
}

2.4  @EnableJpaRepositories

如果你的 Repository 接口位于与启动类不同的包中,或者你希望配置不同的数据源,这种情况下就需要使用 @EnableJpaRepositories 注解来明确地指定需要扫描的包。

2.5 JpaRepository与CrudRepository的差异及不同的使用场景

JpaRepository 和 CrudRepository 是 Spring Data JPA 框架提供的两个接口,它们都提供了一套用于在数据库中执行 CRUD(创建、读取、更新、删除)操作的方法。下面是它们之间的差异及不同的使用场景:

  1. CrudRepository

    • CrudRepository 是 Spring Data 提供的基础接口,定义了一组基本的 CRUD 操作方法,例如 savefindByIdfindAlldelete 等。
    • CrudRepository 接口中的方法是非类型化的,返回类型为 Iterable,需要手动进行类型转换。
    • CrudRepository 适用于简单的 CRUD 操作,不涉及复杂的查询和操作。
  2. JpaRepository

    • JpaRepository 是继承自 CrudRepository 接口的一个子接口,提供了更丰富和强大的查询功能,例如通过方法名自动生成查询、使用@Query 注解执行自定义 SQL 查询等。
    • JpaRepository 接口中的方法返回类型为具体的实体类,无需进行手动类型转换。
    • JpaRepository 适用于需要进行复杂查询和定制化操作的场景,能够更方便地实现各种复杂的数据操作需求。
    • 分页和排序:JpaRepository 提供了一些方法,如 findAll(Pageable pageable) 和 findAll(Sort sort),用于支持结果的分页和排序。
    • 刷新持久性上下文:JpaRepository 提供了 flush() 和 saveAndFlush(T entity) 方法,用于刷新持久性上下文,即使未提交的变更立即同步到数据库。
    • 批量操作:JpaRepository 提供了 deleteInBatch(Iterable<T> entities) 和 deleteAllInBatch() 方法,可以进行批量的删除操作。

使用场景:

  • 当只需要进行简单的 CRUD 操作时,例如基本的增删改查,可以使用 CrudRepository
  • 当需要进行复杂的查询或操作时,例如需要使用动态查询、分页查询、自定义查询等功能时,应该使用 JpaRepository。 -如果应用中有复杂的业务逻辑、需求,并且需要更灵活地操作数据库,那么建议选择JpaRepository

总的来说,JpaRepository提供了CrudRepository所有的功能,另外还提供了更多的查询方法以及对实体的操作功能。因此,如果有需要进行更复杂的数据库操作或查询时,推荐使用JpaRepository

三、JPA的审计功能

@EntityListeners(AuditingEntityListener.class) 是 JPA 的注解,它用于定义在持久化过程中应用于实体类的回调方法类,也就是说,它将指定的类配置为实体监听器。

 

AuditingEntityListener 是 Spring Data JPA 提供的一个实体监听器,专门用于审计,即追踪和记录实体的创建、修改等行为。

 

一个典型的使用场景是,你想要追踪并自动填充实体的创建时间和最后修改时间。这可以通过 Spring Data JPA 的审计功能来实现。示例代码如下:

3.1 新增一个 AbstractAuditable 的抽象类

@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class AbstractAuditable {@Id@Column(name = "id", nullable = false)@GeneratedValue(strategy = GenerationType.IDENTITY)private Integer id;@CreatedDate@Column(name = "create_time", nullable = true)private Date createTime;@CreatedBy@Column(name = "create_user_id", nullable = true)private Integer createUserId;@LastModifiedBy@Column(name = "last_modified_user_id", nullable = true)private Integer lastModifiedUserId;@LastModifiedDate@Column(name = "last_modified_time", nullable = true)private Date lastModifiedTime;
......
}

@CreatedDate 和 @LastModifiedDate 是审计注解,分别表示创建时间和最后修改时间。当你保存或更新User实体的时候, createdTime 和 lastModifiedTime 会自动被填充。 

3.2 实现 AuditorAware 接口,实现 getCurrentAuditor 方法

@CreatedBy 和 @LastModifiedBy 注解负责跟踪数据记录的创建者和最后一次修改者。这两个注解通常用于持久化域对象,以实现审计(审核)功能。然而,Spring Data本身无法自动获取到当前的用户ID。它依赖于AuditorAware接口来设定用户身份。你必须提供AuditorAware的实现类,告诉Spring Data应该用什么作为当前用户或当前操作者。

举例来说,你如果在使用Spring Security这种安全框架,你可以从SecurityContext获取到当前用户信息,并通过AuditorAware返回给Spring Data。代码示例如下:

public class SpringSecurityAuditorAware implements AuditorAware<User> {@Overridepublic Optional<User> getCurrentAuditor() {return Optional.ofNullable(SecurityContextHolder.getContext().getAuthentication()).filter(Authentication::isAuthenticated).map(Authentication::getPrincipal).map(User.class::cast);}
}

在这个例子中,我们从SecurityContextHolder中获取了当前的Authentication对象,确保了它是已认证的,然后得到了principal(在许多情况下,principal通常就是你的User对象或者是包含User对象信息的对象),最后将这个principal转换成了User对象并包装在Optional中返回。这样,每次需要自动填充@CreatedBy@LastModifiedBy字段时,Spring Data就可以知道当前用户是谁了。

3.3 需要 Auditing 的实体继承 AbstractAuditable

@Entity
@Table(name = "user")
public class User extends AbstractAuditable{@Id// 该字段对应数据库中的列为主键@GeneratedValue(strategy = GenerationType.IDENTITY) // 主键自增长@Column(name = "id")private Long id;@Column(name = "name")private String name;@Column(name = "age")private Integer age;@Column(name = "sex")private String sex;
}

3.4 审计配置

要启用 Spring Data JPA 的审计功能,你还需要在某个配置类中添加 @EnableJpaAuditing 注解。

要是实现了AuditorAware接口,则同样需要配置。

@EnableJpaAuditing
@Configuration
public class JpaConfig {@Beanpublic AuditorAware<Integer> auditorProvider() {return new SpringSecurityAuditorAware ();}
}

四、JPA与MybatisPlus对比

JPA和MybatisPlus都是Java持久化框架,但有一些不同之处,下面是它们的优缺点及不同的使用场景:

JPA:

  • 优点:
    • 对象关系映射(ORM)方便,通过注解或XML配置的方式可以轻松地实现实体类和数据表的映射关系。
    • 提供了强大的查询语言JPQL,可以灵活地进行查询操作。
    • 支持事务管理和持久性上下文,能够帮助开发者管理实体对象的生命周期和事务。
  • 缺点:
    • 性能相对较低,对于复杂的查询性能不如MybatisPlus。
    • 需要深入了解JPA规范和实现,学习成本较高。
    • 不够灵活,有时候需要绕过JPA规范使用原生SQL。

MybatisPlus:

  • 优点:
    • 灵活性高,可以通过SQL语句自定义查询和更新操作,满足复杂业务需求。
    • 性能优秀,对于复杂的查询操作能够更好地优化和提升性能。
    • 配置简单,可以通过注解或XML配置文件快速实现功能。
  • 缺点:
    • 没有JPA那种ORM的便利性,需要手动编写SQL语句。
    • 由于灵活性较高,开发者需要深入了解SQL语法和数据库,不易上手。
    • 不提供自动实现的事务管理和持久性上下文,需要手动处理事务。

不同的使用场景:

  • 如果项目中对数据库操作较为简单,大部分操作可以通过简单的CRUD操作实现,可以考虑使用JPA,确实能够减少很多繁琐的代码。
  • 如果项目中需要进行复杂的查询操作,或者对性能要求较高,可以考虑使用MybatisPlus,它提供了更多的灵活性和优化性能的功能。
http://www.yayakq.cn/news/31714/

相关文章:

  • 用c 做网站设计系统的项目作业wordpress中文主题站
  • 网站集约化建设情况汇报家装o2o平台有哪些
  • 南平做网站wordpress亲你迷路了
  • wpsppt网站链接怎么做外包服务是什么意思
  • 常用网站建设工具网站速成班有哪些专业
  • 艺术家网站源码中企动力科技股份有限公司广州分公司
  • 惠州附近公司做网站建设多少钱淘宝网站建设的公司
  • 广州专业做网站公司北京市网站制作
  • 如何给网站做防盗链哪些行业需要做网站
  • php网站开发淮安招聘导购网站如何做淘宝客
  • 医疗器械网站素材在线捏脸网站需要多少钱
  • 视频网站开发公司自己建设网站流程
  • 台州做微网站做PPT不错的网站有哪些
  • 盐城网站开发代理污水管网建设
  • 买软件的网站建设安卓开发工程师月薪
  • 怎么做网站卖保险海淀注册公司
  • 网站开发员需要什么素质临沂罗庄做网站
  • 春节网站怎么做深圳制作企业网站的公司
  • 怎样维护网站自响应式网站建设清单
  • 长沙产品网站建设成都网站改版
  • 网站建设备案优化设芜湖网络公司
  • 网站建设文献综述模板永久免费仓库出入库管理软件
  • 同一ip网站石岩网站设计
  • 开封景区网站建设方案做区域县城招聘网站
  • 服装 产品展示网站模板沈阳口碑最好的男科医院
  • 嘉兴网站制作策划百度投流
  • wordpress文章站官网好看的公司
  • 定西市城乡建设局网站网页设计作业压缩包
  • 商务网站规划建设与管理答案重庆药师网
  • 西安建筑网站建设仿网站出售