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

哈尔滨网络宣传与网站建设企业网站建设的推广方式

哈尔滨网络宣传与网站建设,企业网站建设的推广方式,电子商务网站硬件建设的核心,优秀营销网站设计目录 环境配置 1、引入依赖 配置文件 代码编写 实体类创建 JPA常用注解 Service与ServiceImpl Service ServiceImpl Controller Dao 三种实现Dao功能方式 1.继承接口#xff0c;使用默认接口实现 2.根据接口命名规则默认生成实现 3.自定义接口实现(类似MyBatis…目录 环境配置 1、引入依赖 配置文件 代码编写 实体类创建 JPA常用注解 Service与ServiceImpl Service ServiceImpl Controller Dao 三种实现Dao功能方式 1.继承接口使用默认接口实现 2.根据接口命名规则默认生成实现 3.自定义接口实现(类似MyBatis) 多表关联 1.一对一关联 2.一对多、多对一 3.多对多 参考资料 Spring Data JPA Spring Data JPA 是Spring提供的一套简化JPA开发的持久层框架根据实体类自动生成表 (注意库仍旧自己创建)按照约定好的【方法命名规则】写dao层接口就可以在不写接口实现的情况下实现对数据库的访问和操作。同时提供了很多除了CRUD之外的功能如分页、排序、复杂查询等等。 Spring Data JPA 可以理解为 JPA 规范的再次封装抽象底层还是使用了 Hibernate 的 JPA 技术实现。 SpringBoot集成新框架环境往往很容易引入依赖编写配置、[启用]、代码编写。 环境配置 1、引入依赖 首先要引入jpa的依赖 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-jpa/artifactId /dependency 配置文件 spring:jpa:hibernate:ddl-auto: updateshow-sql: true ddl-auto自动创建表有4个选项 create:每次启动将之前的表和数据都删除然后重新根据实体建立表。create-drop:比上面多了一个功能就是在应用关闭的时候会把表删除。update:最常用的第一次启动根据实体建立表结构之后重启会根据实体的改变更新表结构不删除表和数据。validate:验证创建数据库表结构只会和数据库中的表进行比较不会创建新表但是会插入新值运行程序会校验实体字段与数据库已有的表的字段类型是否相同不同会报错show-sql指运行时是否在控制台展示sql 代码编写 和mybatis主要的区别在于JPA可以根据实体类自动创建表并且会提供默认的DAO方法。 实体类创建 创建一个models文件夹并新建文件algo.java package com.xxx.xxx.xxx.models;import lombok.Data; import org.springframework.data.annotation.CreatedDate;import javax.persistence.*; import java.util.Date;Entity Table(name algo) Data public class Algo {IdGeneratedValue(strategy GenerationType.IDENTITY)Column(name id)private Integer id;Column(name name, length 200)private String name;CreatedDate Column(name create_time, updatable false, nullable false)private Date createTime;} JPA常用注解 注解作用Entity声明类为实体或表.Table声明表名。Basic指定非约束明确的各个字段。Embedded指定类或它的值是一个可嵌入的类的实例的实体的属性。Id指定的类的属性用于识别一个表中的主键。GeneratedValue 指定如何标识属性可以被初始化参数strategy有以下选项 TABLE使用一个特定的数据库表格存放主键。 SEQUENCE根据底层数据库的序列来生成主键条件是数据库支持序列。Oracle IDENTITY主键有数据库自动生成主要是自动增长类型。MySQL AUTO主键由程序控制。默认 Transient指定该属性为不持久属性即该值永远不会存储在数据库中。AccessType这种类型的注释用于设置访问类型。如果设置AccessTypeFIELD则可以直接访问变量并且不需要getter和setter但必须为public。如果设置AccessTypePROPERTY通过getter和setter方法访问Entity的变量。JoinColumn指定一个实体组织或实体的集合。这是用在多对一和一对多关联。UniqueConstraint 指定的字段和用于主要或辅助表的唯一约束。 ColumnResult参考使用select子句的SQL查询中的列名。ManyToMany定义了连接表之间的多对多一对多的关系。ManyToOne定义了连接表之间的多对一的关系。OneToMany定义了连接表之间存在一个一对多的关系。OneToOne定义了连接表之间有一个一对一的关系。NamedQueries指定命名查询的列表。NamedQuery指定使用静态名称的查询。 Service与ServiceImpl Service public interface AlgoService {//查询全部ListAlgo findAlgoList();//查询一条User findAlgoById(int id);//添加void insertAlgo(Algo algo);//删除void deleteAlgo(int id);//修改void updateAlgo(Algo algo); } ServiceImpl 查询一条数据时没有直接使用User而是使用Optional User 这是由于Dao层直接使用了默认的方法。Optional 类是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true调用get()方法会返回该对象。 修改和添加都是save方法修改时对象id有值添加时id无值。 Service public class AlgoServiceImpl implements AlgoService {Autowiredprivate AlgoRepository algoRepository;Overridepublic ListAlgo findAlgoList() {return algoRepository.findAll();}Overridepublic AlgofindAlgoById(int id) {//Optional 类是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true调用get()方法会返回该对象。OptionalAlgo ao algoMapper.findById(id);return ao.orElse(null);}Overridepublic void insertAlgo(Algo algo) {algoRepository.save(algo);}Overridepublic void deleteAlgo(int id) {algoRepository.deleteById(id);}Overridepublic void updateAlgo(Algo algo) {Algo emp algoRepository.findById(algo.getId()).orElse(null);assert emp ! null;BeanUtils.copyProperties(algo,emp); //属性值拷贝algoRepository.save(emp);} } Controller RestController public class JpaController {Autowiredprivate AlgoService algoService;PostMapping(/add)public MapString,String addAlgo(){Algo algo new Algo();algo.setName(张三);algo.setPassword(123456);algo.setSex(男);algoService.insertAlgo(algo);MapString,String map new HashMap();map.put(msg,操作成功);return map;} } Dao 继承JpaRepository它默认的提供了一些常见dao方法主要是完成一些增删改查的操作。 Repository public interface AlgoRepository extends JpaRepositoryAlgo, Integer {//约束1为实体类类型、约束2为主键类型 } 三种实现Dao功能方式 1.继承接口使用默认接口实现 接口作用CrudRepository提供默认增删改查方法PagingAndSortingRepositoryCRUD方法分页、排序JpaRepository针对关系型数据库优化 2.根据接口命名规则默认生成实现 默认提供了常见方法但仍可以根据命名规则自动生成方法。         此表内容来源于官网 Spring Data JPA - Reference Documentation 关键词示例JPQL片段DistinctfindDistinctByLastnameAndFirstnameselect distinct …​ where x.lastname ?1 and x.firstname ?2AndfindByLastnameAndFirstname… where x.lastname ?1 and x.firstname ?2OrfindByLastnameOrFirstname… where x.lastname ?1 or x.firstname ?2Is EqualsfindByFirstnamefindByFirstnameIsfindByFirstnameEquals… where x.firstname ?1BetweenfindByStartDateBetween… where x.startDate between ?1 and ?2LessThanfindByAgeLessThan… where x.age ?1LessThanEqualfindByAgeLessThanEqual… where x.age ?1GreaterThanfindByAgeGreaterThan… where x.age ?1GreaterThanEqualfindByAgeGreaterThanEqual… where x.age ?1AfterfindByStartDateAfter… where x.startDate ?1BeforefindByStartDateBefore… where x.startDate ?1IsNull NullfindByAge(Is)Null… where x.age is nullIsNotNull NotNullfindByAge(Is)NotNull… where x.age not nullLikefindByFirstnameLike… where x.firstname like ?1NotLikefindByFirstnameNotLike… where x.firstname not like ?1StartingWithfindByFirstnameStartingWith… where x.firstname like ?1EndingWithfindByFirstnameEndingWith… where x.firstname like ?1ContainingContaining… where x.firstname like ?1OrderByfindByAgeOrderByLastnameDesc… where x.age ?1 order by x.lastname descNotfindByLastnameNot… where x.lastname ?1InfindByAgeIn(Collection ages)… where x.age in ?1NotInfindByAgeNotIn(Collection ages)… where x.age not in ?1TruefindByActiveTrue()… where x.active trueFalsefindByActiveFalse()… where x.active falseIgnoreCasefindByFirstnameIgnoreCase… where UPPER(x.firstname) UPPER(?1) 3.自定义接口实现(类似MyBatis) 使用注解方式 Query 使用 Query()注解来生成sql语句注意此注解默认value属性值与myBatis有点不同它使用的是JPQL。 如果想使value值为原生SQL则添加属性nativeQuery true 即可。 表名映射可以直接使用表对应类名如果想用表名#{#entityName}参数映射?n表示第n个参数、:参数名(参数可用Param指定) #{#entityName}:SPEL表达式实体类使用了Entity后它的值为实体类名如果Entity的name属性有值则它的值为该name值。 Modifying标记仅映射参数的方法。 Transactional开启事务并将只读改为非只读。 Repository //约束1为实体类、约束2为主键 public interface AlgoRepository extends JpaRepositoryAlgo,Integer {//添加使用了原生sqlTransactional//开启事务为非只读ModifyingQuery(value insert into jpa_test(name, userId) values(:#{#algo.name}, :#{#algo.userId}) , nativeQuery true)void addAlgo(Param(algo) Algo algo);//删除Transactional(timeout 10)ModifyingQuery(delete from Algo where id:id)void deleteAlgoById(Param(id) Integer id);//修改Transactional(timeout 10)ModifyingQuery(update Algo u set u.name:#{#algo.name}, u.createTime:#{#algo.createTime}, u.userId:#{#algo.userId} where u.id:#{#algo.id})void updateAlgo (Param(algo)Algo algo);//查询一条Query(select u from Algo u where u.id?1 )User findAlgoById(Integer id);//查询全部Query(select u from Algo u)ListAlgo findAllAlgo(); } 对象属性的绑定使用 Param(映射名) 注解  :#{#映射名.属性} 多表关联 JPA中一般只需要创建关联性即可默认方法会自动关联查询。 1.一对一关联 两张表a、ba的每条对应着b最多一条数据。 jpa实现如下 /*** 表A*/ Entity Table(name a) public class A{IdGeneratedValue(strategy GenerationType.IDENTITY)private Long id;private String name;OneToOne(cascade {CascadeType.ALL})//一对一关系级联删除JoinColumn(nameb,referencedColumnName id)//关联 b的id字段private B b; }/*** 表B*/ Entity Table(name b) public class B{IdGeneratedValue(strategy GenerationType.IDENTITY)private Long id;private String name; }上面是A级联B即可以通过A查到B如果想通过B查到A则需要为B添加级联属性。 2.一对多、多对一 一对多: 两张表A、BA的一条记录对应B的多条记录B每条只能对应1个A。A对B的关系为一对多B对 A的关系为多对一。 jpa实现如下 /*** 球员表*/ Entity//球员表 Table(name sportmans) public class SportMan implements Serializable {IdGeneratedValue(strategy GenerationType.IDENTITY)private long id;private String sportManName;ManyToOne(cascade {CascadeType.MERGE,CascadeType.PERSIST})JoinColumn(nameduty) //库中添加的外键字段private Duty duty;}/*** 位置表*/ Data Entity Table(name dutys) public class Duty implements Serializable {IdGeneratedValue(strategy GenerationType.IDENTITY)private long id;private String dutyName;JsonIgnore//不反向查询//级联保存、更新、删除删除时会删除所有球员OneToMany(mappedBy duty,cascade CascadeType.ALL,fetch FetchType.LAZY)private ListSportMan sportManList;} 不使用JsonIgnore注解时查询球员球员里关联出位置位置反向关联球员会无限递归查询因此添加此注解防止此字段被查出来时自动回查。  3.多对多 两张表A、B一条A记录对应多条B一条B记录对应多条A。 jpa实现如下 /*** 表A*/ Entity Table(name a) public class A{IdGeneratedValue(strategy GenerationType.IDENTITY)private Long id;private String name;ManyToMany(cascade {CascadeType.ALL})JoinColumn(nameb,referencedColumnName id)//关联 b的id字段private B b;}/*** 表B*/ Entity Table(name b) public class B{IdGeneratedValue(strategy GenerationType.IDENTITY)private Long id;private String name;ManyToMany(cascade {CascadeType.ALL})JoinColumn(namea,referencedColumnName id)//关联 a的id字段private A a;}参考资料 SpringBoot 一文搞懂Spring JPA_springboot jpa_马踏飞燕lin_li的博客-CSDN博客 使用springJpa创建数据库表_jpa可以动态创建数据库表吗_阿圣同学的博客-CSDN博客 【Spring JPA总结】GeneratedValue注解介绍 - 简书 (jianshu.com) spring boot 中使用 jpa(详细操作)_springboot jpa_熬菜的博客-CSDN博客 Spring BootJPA_springbootjpa_火恐龙的博客-CSDN博客
http://www.laogonggong.com/news/108318.html

相关文章:

  • 淘宝客网站可以备案吗食品饮料网站源码
  • 湛江市手机网站建设企业如何建立一个微信公众号平台
  • 相关网站建设wordpress页面分类插件
  • 学校营销型网站网站优化合同模板
  • 兰州建设工程信息网站wordpress文章列表加广告
  • .me做社区网站深圳网站建设总部
  • 门户网站需要多少费用浙江省职业建设学院官方网站
  • 织梦网网站建设视频下载成都平面设计公司排行
  • 博罗企业网站建设wordpress 看板娘
  • 彩票网站建设平台jsp网站开发存在的问题
  • 广州东站建站时间晚上必看的正能量网站app
  • 沂水网站建设紫竹桥网站建设
  • 网站技能培训班有哪些东莞新媒体运营
  • dede 后台 不能保存网站名称网站建设的功能需求文档
  • 专门做销售招聘网站建设网银登录网站
  • 佛山品牌网站建设wordpress __()
  • 如何优化网站关键词排名wordpress入门建站教程
  • seo网站推广电话业务推广方案怎么写
  • 息壤网站打不开了正规接单网站
  • 企业网站的作用抖音代运营是干嘛的
  • 平度168网站建设嘉兴公司的网站设计
  • 个人网站建设作用海南响应式网页建设找哪家
  • 大连博硕网站建设该网站使用的安全设置
  • 怎么做vip网站安卓系统开发者
  • 网站定制公司排行榜ps做汽车网站下载地址
  • 亿赐客网站怎么样软件开发相关文档
  • 郑州建网站371现在什么网络推广好
  • 网站接入银联支付怎么做淘宝网站制作公司哪家好
  • 网站开发需要用到哪些设备软件开发模型有哪些
  • 天津最好网站建设公司网店如何引流与推广