范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

SpringDataJPA系列06自定义操作(JPQLSQL)

  6、自定义操作(JPQL / SQL)
  在我们经过了上面的学习,我们会发现一个问题:那就是我们所支持的就是一些简单的增删查改等等的操作,对于复杂的一些操作并不支持,所以我们也需要进行一些自定义,可以通过SQL或者 JPQL进行自定义操作!
  自定义操作: 1、JPQL(原生SQL)@Query 查询如果返回单个实体,就使用pojo类进行接收即可,如果是多个就使用list进行接收! 参数设置方式 索引:?数字 具名::参数名 结合@Param注解指定参数名称 | 增删改: 要加上事务的支持: 如果是插入方法:一定只能在hibernate下才支持(Insert into … select) @Transactional    // 开启事务!通常会放在业务逻辑层上去声明!    @Modifying    // 通知springdatajpa 是增删改的操作!    复制代码
  测试代码如下: 创建repository/CustomerRepository  package com.yykk.repositories;    import com.yykk.pojo.Customer;  import org.springframework.data.jpa.repository.Modifying;  import org.springframework.data.jpa.repository.Query;  import org.springframework.data.repository.PagingAndSortingRepository;  import org.springframework.data.repository.query.Param;  import org.springframework.transaction.annotation.Transactional;    import java.util.List;    public interface CustomerRepositories extends PagingAndSortingRepository{        // 使用JPQL实现增删改查        // 查询      //@Query("from Customer where custName=?1")      @Query(value = "from Customer where custName=:custName")      List findCustomerByCustName(@Param("custName") String custName);        /**       *  更新操作!       *  在这里如果没有事务的支持,那么我们会报错!需要定义在业务逻辑层里面!       *  @Modifying  // 通知springdatajpa 是增删改的操作!       */      @Query("update Customer c set c.custName=:custName where c.id=:id")      @Transactional // 开启事务!      @Modifying  // 通知springdatajpa 是增删改的操作!      int updateCustomerById(@Param("custName") String custName,@Param("id") Long id);        // 删除      @Query("delete from Customer c  where c.id=?1")      @Transactional // 开启事务!      @Modifying  // 通知springdatajpa 是增删改的操作!      String deleteCustomer(Long id);        // 新增 JPQL 默认是不支持的,但是这里是使用的伪插入,底层是hibernate!      // 通知springdatajpa 是增删改的操作!      //@Transactional // 开启事务!      //@Modifying      //@Query(value = "insert into Customer(custName) select cust_name from Customer where id=?1") //这里推荐使用其他方法insert方法不推荐使用!如果要使用可以使用原生的!这里没有values报错!可以尝试一下拼接!      //int insertCustomerBySelect(Long id);        // 原生SQL查询      // 在这个查询中写成custName之后就报错!      @Query(value = "select * FROM tb_Customer where cust_name= ? "              ,nativeQuery = true)      List findCustomerByCustNameBySql(@Param("custName") String custName);    } 复制代码测试! import com.yykk.config.SpringDataJPAConfig;  import com.yykk.pojo.Customer;  import com.yykk.repositories.CustomerRepositories;  import org.junit.Test;  import org.junit.runner.RunWith;  import org.springframework.beans.factory.annotation.Autowired;  import org.springframework.test.context.ContextConfiguration;  import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;    import java.util.List;    @ContextConfiguration(classes = SpringDataJPAConfig.class)  @RunWith(SpringJUnit4ClassRunner.class)  public class JPQLTest {        @Autowired      CustomerRepositories repositories;        /**       * 查询测试!       * 因为可能会遇到返回的结果是多个相同的,就使用list接收!       */      @Test      public void testQuery() {          List customer = repositories.findCustomerByCustName("yykk");          System.out.println(customer);      }        /**       *  更新操作!       *  在这里如果没有事务的支持,那么我们会报错!需要定义在业务逻辑层里面!       */      @Test      public void testUpdate() {          int result = repositories.updateCustomerById("apple", 3L);          System.out.println(result);      }        @Test      public void testDelete() {          String result = repositories.deleteCustomer( 9L);          System.out.println(result);      }        //@Test      //public void testInsert() {      //    int result = repositories.insertCustomerBySelect(1L);      //    System.out.println(result);      //}        @Test      public void testQuery_sql() {            List list = repositories.findCustomerByCustNameBySql("yykk");          System.out.println(list);      }  } 复制代码2、规定方法名只支持查询方法主题关键字(前缀)只有查询和删除!决定当前方法作用!查询主题关键字
  关键字
  描述
  find…By  、`read…By  、get…By  、query..By  、search…By  、stream…By
  通过查询方法通常返回存储库类型、Collection  或Streamable  子类型或结果包装器,例如:Page  、GeoResults  或任何其他特定于商店的结果包装器。可用于 findBy…  ,findMyDomainTypeBy…
  exists…By
  存在投影,通常返回  boolean  结果
  count…By
  计数投影返回数字结果。
  delete…By、remove…By
  删除查询方法返回无结果( void  )或删除计数。
  …First…  ,…Top…
  将查询结果限制为第一个  结果。此关键字可以出现在主题的find  (和其他关键字)和之间的任何位置by  。
  …Distinct…
  使用不同的查询仅返回唯一的结果。查询特定与商店的文档是否支持该功能。此关键字可以出现在主题的  find  (和其他关键字)和之间的任意位置 by  。支持的查询方法谓词关键字和修饰符决定查询条件
  Keyword
  Sample
  JPQL snippet
  And
  findByNameAndPwd
  where name= ? and pwd =?
  Or
  findByNameOrSex
  where name= ? or sex=?
  Is,Equals
  findById,findByIdEquals
  where id= ?
  Between
  findByIdBetween
  where id between ? and ?
  LessThan
  findByIdLessThan
  where id < ?
  LessThanEquals
  findByIdLessThanEquals
  where id <= ?
  GreaterThan
  findByIdGreaterThan
  where id > ?
  GreaterThanEquals
  findByIdGreaterThanEquals
  where id > = ?
  After
  findByIdAfter
  where id > ?
  Before
  findByIdBefore
  where id < ?
  IsNull
  findByNameIsNull
  where name is null
  isNotNull,NotNull
  findByNameNotNull
  where name is not null
  Like
  findByNameLike
  where name like ?
  NotLike
  findByNameNotLike
  where name not like ?
  StartingWith
  findByNameStartingWith
  where name like ‘?%’
  EndingWith
  findByNameEndingWith
  where name like ‘%?’
  Containing
  findByNameContaining
  where name like ‘%?%’
  OrderBy
  findByIdOrderByXDesc
  where id=? order by x desc
  Not
  findByNameNot
  where name <> ?
  In
  findByIdIn(Collection<?> c)
  where id in (?)
  NotIn
  findByIdNotIn(Collection<?> c)
  where id not in (?)
  TRUE
  findByAaaTue
  where aaa = true
  FALSE
  findByAaaFalse
  where aaa = false
  IgnoreCase
  findByNameIgnoreCase
  where UPPER(name)=UPPER(?)
  top
  findTop10
  top 10/where ROWNUM <=10
  Distinct
  findDistinctByLastnameAndFirstname
  select distinct … where x.lastname = ?1 and x.firstname = ?2
  1、repository/CustomerMethodNameRepositories package com.yykk.repositories;    import com.yykk.pojo.Customer;  import org.springframework.data.jpa.repository.Modifying;  import org.springframework.data.repository.PagingAndSortingRepository;  import org.springframework.transaction.annotation.Transactional;    import java.util.List;    public interface CustomerMethodNameRepositories extends PagingAndSortingRepository{        List findByCustName(String custName);        boolean existsByCustName(String custName);        @Transactional      @Modifying      int deleteByid(Long id);        List findByCustNameLike(String custName);    } 复制代码
  2、测试! import com.yykk.config.SpringDataJPAConfig;  import com.yykk.pojo.Customer;  import com.yykk.repositories.CustomerMethodNameRepositories;  import org.junit.Test;  import org.junit.runner.RunWith;  import org.springframework.beans.factory.annotation.Autowired;  import org.springframework.test.context.ContextConfiguration;  import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;    import java.util.List;    @ContextConfiguration(classes = SpringDataJPAConfig.class)  @RunWith(SpringJUnit4ClassRunner.class)  public class MethodName {        @Autowired      CustomerMethodNameRepositories repository;        @Test      public void list(){          List list = repository.findByCustName("yykk");          System.out.println(list);      }        @Test      public void exists(){          boolean exists = repository.existsByCustName("yykk");          System.out.println(exists);      }        @Test      public void delete(){          int del = repository.deleteByid(12L);          System.out.println(del);      }        @Test      public void like(){          List list = repository.findByCustNameLike("y%");          System.out.println(list);      }  } 复制代码
  这里的都是静态的固定查询,对于动态的查询要根据以下的这几种方法!3、通过Query by Example只支持查询不支持嵌套或分组的属性约束,如firstname = ?0 or(firstname = ? 1 and lastname = ? 2)只支持字符串 start/contains/ends/regex 匹配和其他属性类型的精确匹配。
  实现:
  1、将Repository继承QueryByExampleExecutor package com.yykk.repositories;    import com.yykk.pojo.Customer;  import org.springframework.data.repository.PagingAndSortingRepository;  import org.springframework.data.repository.query.QueryByExampleExecutor;    public interface CustomerQBERepositories extends PagingAndSortingRepository          , QueryByExampleExecutor {    } 复制代码
  2、测试代码! import com.yykk.config.SpringDataJPAConfig;  import com.yykk.pojo.Customer;  import com.yykk.repositories.CustomerQBERepositories;  import org.junit.Test;  import org.junit.runner.RunWith;  import org.springframework.beans.factory.annotation.Autowired;  import org.springframework.data.domain.Example;  import org.springframework.data.domain.ExampleMatcher;  import org.springframework.test.context.ContextConfiguration;  import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;    @ContextConfiguration(classes = SpringDataJPAConfig.class)  @RunWith(SpringJUnit4ClassRunner.class)  public class QueryByExampleExecutor {        @Autowired      CustomerQBERepositories repository;        /**       * 简单实例:客户名称,客户地址动态查询!       */      @Test      public void list() {          Customer customer = new Customer();          customer.setCustName("yykk");          customer.setCustAddress("上海");            // 通过 Example构造查询条件!          Example example = Example.of(customer);            Iterable all = repository.findAll(example);          System.out.println(all);      }        /**       * 通过匹配器,进行条件的限制!       * 简单实例:客户名称,客户地址动态查询!       */      @Test      public void test() {          Customer customer = new Customer();          customer.setCustName("kk");          customer.setCustAddress("HAI");            // 通过匹配器对条件行为进行设置!          ExampleMatcher matcher = ExampleMatcher.matching()                  .withIgnorePaths("custName")  // 设置忽略的属性!                  //.withIgnoreCase("cust_address")   // 设置忽略大小写,默认不写就是全部属性的设置!                  //.withStringMatcher(ExampleMatcher.StringMatcher.ENDING); // 对字符串进行结尾匹配                  .withMatcher("cust_address",m -> m.endsWith().ignoreCase(true));  // 针对单个条件进行设置,会使withIgnoreCase失效!                  //.withMatcher("custAddress", ExampleMatcher.GenericPropertyMatchers.endsWith());          // 通过 Example构造查询条件!          Example example = Example.of(customer,matcher);            Iterable list = repository.findAll(example);          System.out.println(list);      }    } 复制代码4、通过Specifications
  之前使用Query by Example只能针对字符串进行条件设置,那如果希望对所有类型支持,可以使用Specifcations
  实现
  1、继承接口 package com.yykk.repositories;    import com.yykk.pojo.Customer;  import org.springframework.data.jpa.repository.JpaSpecificationExecutor;  import org.springframework.data.repository.PagingAndSortingRepository;    public interface CustomerSpecificationsRepositories extends PagingAndSortingRepository          ,JpaSpecificationExecutor {        } 复制代码root:查询哪个表(关联查询)= fromCriteriaQuery:查询哪些字段,排序是什么 = 组合(order by 、where)CriteriaBuilder:条件之间是什么关系,如何生成一个查询条件,每一个查询条件是什么类型(> between in …)= wherePredicate(Expression):每一条查询条件的详细描述
  2、测试! import com.yykk.config.SpringDataJPAConfig;  import com.yykk.pojo.Customer;  import com.yykk.repositories.CustomerSpecificationsRepositories;  import org.junit.Test;  import org.junit.runner.RunWith;  import org.springframework.beans.factory.annotation.Autowired;  import org.springframework.data.jpa.domain.Specification;  import org.springframework.test.context.ContextConfiguration;  import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;  import org.springframework.util.StringUtils;    import javax.persistence.EntityManager;  import javax.persistence.criteria.*;  import java.util.ArrayList;  import java.util.List;    @ContextConfiguration(classes = SpringDataJPAConfig.class)  @RunWith(SpringJUnit4ClassRunner.class)  public class SpecificationsTest {        @Autowired      CustomerSpecificationsRepositories repository;        @Autowired      EntityManager entityManager;        @Test      public void test_All(){          List customer = repository.findAll(new Specification() {              @Override              public Predicate toPredicate(Root root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {                    // root from Customer ,获取列                  // CriteriaBuilder 设置各种条件 (< > in ...)                  // query 组合(order by ,where )                    return null;              }          });      }        /**       * 查询客户范围(in)       * id > 大于       * 地址:精确       */      @Test      public void test_Coll(){          List customer = repository.findAll(new Specification() {              @Override              public Predicate toPredicate(Root root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {                    // root from Customer ,获取列                  // CriteriaBuilder 设置各种条件 (< > in ...)                  // query 组合(order by ,where )                    Path id = root.get("id");                  Path custName = root.get("custName");                  Path custAddress = root.get("custAddress");                    // 参数1:为哪个字段设置条件    参数2:值                  Predicate address = criteriaBuilder.equal(custAddress, "SHANGHAI");                  Predicate ids = criteriaBuilder.greaterThan(id, 0L);                  CriteriaBuilder.In in = criteriaBuilder.in(custName);                  in.value("yykk").value("张三");                    Predicate predicate = criteriaBuilder.and(address, ids,in);                    return predicate;              }          });          System.out.println(customer);      }        /**       * 查询客户范围(in)       * id > 大于       * 地址:精确       * 将这里的值设置为动态的!       */      @Test      public void test_dynamic(){            Customer params = new Customer();          params.setId(0L);          params.setCustAddress("SHANGHAI");          params.setCustName("yykk,apple");            List customer = repository.findAll(new Specification() {              @Override              public Predicate toPredicate(Root root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {                    // root from Customer ,获取列                  // CriteriaBuilder 设置各种条件 (< > in ...)                  // query 组合(order by ,where )                    Path id = root.get("id");                  Path custName = root.get("custName");                  Path custAddress = root.get("custAddress");                    // 参数1:为哪个字段设置条件    参数2:值                  List list = new ArrayList<>();                  if (StringUtils.isEmpty(params.getCustAddress())) {                      list.add(criteriaBuilder.equal(custAddress, "SHANGHAI"));                  }                  if (params.getId() > -1) {                      list.add(criteriaBuilder.greaterThan(id, 0L));                  }                  if (StringUtils.isEmpty(params.getCustName())) {                      CriteriaBuilder.In in = criteriaBuilder.in(custName);                      in.value("yykk").value("张三");                      list.add(in);                  }                    Predicate predicate = criteriaBuilder.and(list.toArray(new Predicate[list.size()]));                    return predicate;              }          });          System.out.println(customer);      }        /**       * 查询客户范围(in)       * id > 大于       * 地址:精确       * 将这里的值设置为动态的!       */      @Test      public void test_dynamicx(){            CriteriaBuilder builder = entityManager.getCriteriaBuilder();          CriteriaQuery query = builder.createQuery();          Root root = query.from(Customer.class);            Customer params = new Customer();          params.setId(0L);          params.setCustAddress("SHANGHAI");          params.setCustName("yykk,apple");            List customer = repository.findAll(new Specification() {              @Override              public Predicate toPredicate(Root root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {                    // root from Customer ,获取列                  // CriteriaBuilder 设置各种条件 (< > in ...)                  // query 组合(order by ,where )                    // 1、通过root拿到需要设置条件的字段                  Path id = root.get("id");                  Path custName = root.get("custName");                  Path custAddress = root.get("custAddress");                    // 2、通过CriteriaBuilder设置不同的类型条件                  List list = new ArrayList<>();                  if (StringUtils.isEmpty(params.getCustAddress())) {                      // 参数1:为哪个字段设置条件    参数2:值                      list.add(criteriaBuilder.equal(custAddress, "SHANGHAI"));                  }                  if (params.getId() > -1) {                      list.add(criteriaBuilder.greaterThan(id, 0L));                  }                  if (StringUtils.isEmpty(params.getCustName())) {                      CriteriaBuilder.In in = criteriaBuilder.in(custName);                      in.value("yykk").value("张三");                      list.add(in);                  }                    // 3、组合条件!                  Predicate predicate = criteriaBuilder.and(list.toArray(new Predicate[list.size()]));                    Order desc = criteriaBuilder.desc(id);                  return query.where(predicate).orderBy(desc).getRestriction();              }          });          System.out.println(customer);      }    } 复制代码
  限制:不能分组、聚合函数,需要自己通过entityManager! 5、通过Querydsl
  官网:querydsl.com/
  Github:github.com/querydsl/qu…
  中文文档:github.com/wjw465150/Q…
  Querydsl 是基于ORM框架或SQL平台上的一个通用查询框架。借助于Querydsl可以在任何支持的ORM框架或者SQL平台上以通用API方式构建查询!
  JPA是QueryDSL的主要集成技术,是JPQL和Criteria查询的替代方法。目前QueryDSL支持的平台包括JPA、JDO、SQL、MongoDB等等!
  QueryDSL扩展让我们以链式方式编写查询方法。该扩展需要一个接口QueryDslPredicateExecutor,它定义了很多查询方法。
  1、接口继承了该接口,就可以使用提供的各种方法了! package com.yykk.repositories;    import com.yykk.pojo.Customer;  import org.springframework.data.querydsl.QuerydslPredicateExecutor;  import org.springframework.data.repository.PagingAndSortingRepository;    public interface CustomerQueryDSLRepositories extends PagingAndSortingRepository          , QuerydslPredicateExecutor {    } 复制代码
  2、导入依赖!     com.querydsl    querydsl-apt    ${querydsl.version}    provided          com.querydsl    querydsl-jpa    ${querydsl.version}          org.slf4j    slf4j-log4j12    1.6.1   复制代码
  3、配置Maven APT插件!                       com.mysema.maven        apt-maven-plugin        1.1.3                                            process                                      target/generated-sources/java              com.querydsl.apt.jpa.JPAAnnotationProcessor                                               复制代码
  JPAAnnotationProcessor   查找使用 javax.persistence.Entity   注解的实体类并为它们生成查询类。
  如果您在实体类中使用 Hibernate 注解,则应改用 APT 处理器 com.querydsl.apt.hibernate.HibernateAnnotationProcessor  。
  运行maven clean install  ,您将得到生成的查询类到 target/generated-sources/java  目录下。
  如果您使用 Eclipse,请运行 mvn eclipse:eclipse   来更新您的 Eclipse 项目以包含 target/generated-sources/java   作为源文件夹。
  简单理解:打开IDEA的项目工程,将我们生成的Q类设置为Sources资源类!
  4、测试! import com.querydsl.core.Tuple;  import com.querydsl.core.types.dsl.BooleanExpression;  import com.querydsl.jpa.impl.JPAQuery;  import com.querydsl.jpa.impl.JPAQueryFactory;  import com.yykk.config.SpringDataJPAConfig;  import com.yykk.pojo.Customer;  import com.yykk.pojo.QCustomer;  import com.yykk.repositories.CustomerQueryDSLRepositories;  import org.junit.Test;  import org.junit.runner.RunWith;  import org.springframework.beans.factory.annotation.Autowired;  import org.springframework.test.context.ContextConfiguration;  import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;  import org.springframework.util.StringUtils;    import javax.persistence.EntityManager;  import javax.persistence.PersistenceContext;  import java.util.List;    @ContextConfiguration(classes = SpringDataJPAConfig.class)  @RunWith(SpringJUnit4ClassRunner.class)  public class QueryDSLTest {        @Autowired      CustomerQueryDSLRepositories repository;        // 解决线程安全问题,类似于Autowired!@Bean默认是单例的,JPA就有线程安全问题!      @PersistenceContext      EntityManager entityManager;          @Test      public void test_All(){          QCustomer customer = QCustomer.customer;            // 通过id查找          BooleanExpression eq = customer.id.eq(1L);          System.out.println(repository.findOne(eq));      }        /**       * 查询客户范围(in)       * id > 大于       * 地址:精确       */      @Test      public void test_demo(){          QCustomer customer = QCustomer.customer;            // 通过id查找          BooleanExpression and = customer.custName.in("yykk","apple")                          .and(customer.id.gt(0L))                          .and(customer.custAddress.eq("SHANGHAI"));          System.out.println(repository.findOne(and));      }          /**       * 查询客户范围(in)       * id > 大于       * 地址:精确       * 测试动态的!       */      @Test      public void test(){            Customer params = new Customer();          params.setId(0L);          params.setCustAddress("SHANGHAI");          params.setCustName("yykk");            QCustomer customer = QCustomer.customer;            // 初始条件 类似于1=1,永远都成立!          BooleanExpression expression = customer.isNotNull().or(customer.isNull());            expression = params.getId() > -1 ?                  expression.and(customer.id.gt(params.getId())) : expression;            expression = !StringUtils.isEmpty(params.getCustName()) ?                  expression.and(customer.custName.in(params.getCustName().split(","))) : expression;            expression = !StringUtils.isEmpty(params.getCustAddress()) ?                  expression.and(customer.custAddress.in(params.getCustAddress())) : expression;            System.out.println(repository.findAll(expression));      }        /**       * 自定义列查询、分组       * 需要使用原生态的方式!(Specification)       */      @Test      public void test_customize(){          JPAQueryFactory factory = new JPAQueryFactory(entityManager);            QCustomer customer = QCustomer.customer;            // select id,custName from ...          // 构建基于QueryDsl的查询          JPAQuery tupleJPAQuery = factory.select(customer.id, customer.custName)                  .from(customer)                  .where(customer.id.eq(1L))                  .orderBy(customer.id.desc());            // 执行查询          List fetch = tupleJPAQuery.fetch();            // 处理返回数据          for (Tuple tuple : fetch) {              System.out.println(tuple.get(customer.id));              System.out.println(tuple.get(customer.custName));          }      }        /**       * 自定义列查询、分组       * 需要使用原生态的方式!(Specification)       * 通过Repository进行查询,列、表都是固定的!       */      @Test      public void test_customize_list(){          JPAQueryFactory factory = new JPAQueryFactory(entityManager);            QCustomer customer = QCustomer.customer;            // select id,custName from ...          // 构建基于QueryDsl的查询          JPAQuery longJPAQuery = factory.select(customer.id.sum())                  .from(customer)                  //.where(customer.id.eq(1L))                  .orderBy(customer.id.desc());            // 执行查询          List fetch = longJPAQuery.fetch();            // 处理返回数据          for (Long tuple : fetch) {              System.out.println(tuple);          }      }  }
血溅三尺!亚洲货币集体沦陷,美联储一日狂吸近2。4万亿美元杀熟今年美元最强攻势一共发起了两轮,第一轮是4月中旬开始,到5月中旬结束,这一波下去发生两件惨案,斯里兰卡债务违约和欧元汇率平价。虽然很多国家预示到了危险来临,甚至有了应对,结德国权威机构大幅下调今明两年德经济增长预期德国权威经济研究机构9月29日发布秋季联合经济预测报告,预计德国经济今年将增长1。4,明年将萎缩0。4,较今年春季联合经济预测报告中的今明两年分别增长2。7和3。1明显下调。报告说4条骑行路线推荐云淡风轻,骑行感受京城初秋之美初秋时节天高云淡,微风沁人此时不妨约上好友用车轮延伸脚步来一场慢骑行吧温榆河滨水绿道图北京市园林绿化局温榆河是北京常年有水的天然河道,碧波荡漾,绿树成行。高大的乔木将巡河路夹在中间用安全锁锁住快递实名制信息作者莫开伟系中国知名财经作家据相关媒体披露,我国自开始实施居民寄快递需实名制之后,有数据显示,78。2的网民个人身份信息被泄露过,包括网民的姓名学历家庭住址身份证号及工作单位等63诱导注册后却无额度,微众银行被质疑白嫖个人信息科技向善还是来者不善?点了微信朋友圈的微众银行广告,隔天接到了对方的电话,邀请获取微众银行旗下微众易贷的额度,在经过采集人脸等一系列操作后,最后却被告知暂无额度,这是张成(化名)最韩国排名前100位的多房业主人均206套房,政府房地产税改革还将让他们更富据韩国国家统计局的数据显示,韩国排名前100位的多房业主总共拥有超过2万套住房。这意味着,这百位房产大户平均每人拥有206套房屋。韩国议员指出,尹锡悦政府的一项税制改革计划将使得这它无处不在,是宇宙真正的主人,是普通物质的5倍上世纪三十年代,天文学家在对星系边缘的恒星运动情况进行观测时,发现了一个奇怪的现象。根据计算,他们发现星系本身产生的引力不足以拉拽边缘的恒星稳定运行,边缘的恒星本应该被甩出去才对,罗京去世12年,曾经哭到晕厥的妻子改嫁富商,母亲至今不知死讯他口齿清爽声音极具穿透力,出镜3000多次0失误,一度创造了主持界的神话他,外表沉稳严肃,曾被喻为央视国脸。但是一次病魔的侵扰,让他的生命永远停留在了48岁,从此央视痛失一名大员。巩固拓展生态保护和环境治理成效青海省湖泊型国家公园建设的探索实践秋日,游客在青海湖畔合影留念。宋忠勇摄光明图片近年来,青海湖生态日渐转好,在青海湖栖息的水鸟种类增加到了97种。青海湖景区保护利用管理局供图光明图片二郎剑景区是青海湖最著名的景点,艺点资讯十一将至!打卡国内三大特色景区蓝字关注中国小康网十一长假即将来临,你有什么出行计划吗?中国地大物博,有非常多值得打卡的好去处,而且现在秋高气爽,晴朗的阳光很适合拍照。美丽的风景加上明快的摄影,会为你的假期增加愉一花一世界,一寺一菩提沈阳慈恩寺沈阳城中哪个寺庙最大呢?毫无疑问当属慈恩寺。他被誉为东北的十方丛林,与营口的楞严寺,哈尔滨的极乐寺以及长春的般若寺一起,合称为东北四大佛教寺院。同时辽宁省佛教协会也建于此。图片来源
甘愿降薪,重回76人!迎来绝佳的争冠机会,这次你没有任何借口了10胜9负,东部第六,实话实说,76人目前的这个战绩,从大局的角度来看,他们没有达到预期。毕竟当他们针对性补强了锋线实力之后,新赛季的76人被认为是东部最大的争冠黑马球队,在皮尔斯世界杯太太团争奇斗艳,阿根廷颜值高,巴西最美艳,法国最拉胯?文阅栀编辑阅栀世界杯激战正酣,场上运动员们努力拼搏,而场边的风景也同样精彩。各个球队的太太团们争先亮相,个个打扮的花枝招展美艳动人争奇斗艳,大有球可以输,场面不能输的模样。虽然许多背水一战!梅西能否带领阿根廷走出困局?今夜明晨卡塔尔世界杯将迎来四场生死战C组,阿根廷队将迎战同组最强对手墨西哥队。由于首轮输球,阿根廷已无退路,此战必须战胜对手,才能保留晋级希望,否则将提前出局。梅西今夜迎生死战决定向涵之澄清与吴磊恋情,男方辟谣4月终得清白,星汉灿烂神了内娱出现得最勤快的瓜,估计就是恋情瓜的了。艺人的婚恋问题一直是大众比较关心的,因为工作特殊的关系。许多人在寻找另一半的时候,往往会在圈内人中寻找。那么这个时候所出现的组合,就很有看世界杯阿根廷VS墨西哥梅西搭档劳塔罗迪马利亚首发北京时间11月27日凌晨3点,2022卡塔尔世界杯小组赛第二轮,阿根廷队对阵墨西哥队。赛前,两队公布了首发名单,阿根廷方面,梅西与迪马利亚以及劳塔罗组成攻击线。阿根廷首发23马丁内打破卫冕冠军魔咒,法国队击败丹麦率先出线中新网11月27日电在过去三届世界杯中,以卫冕冠军身份出战的球队全部折戟小组赛,包括2010年的意大利,2014年的西班牙以及2018年的德国。这一魔咒今晨被法国队打破,在21战胜21364亿元退税款已到账政策红利效果持续显现原标题21364亿元退税款已到账政策红利效果持续显现今年以来,我国部署实施包括大规模增值税留抵退税在内的新的组合式税费支持政策以及稳经济一揽子政策措施,切实帮助企业纾困解难,稳住宏21364亿元退税款已到账政策红利效果持续显现来源人民网原创稿今年以来,我国部署实施包括大规模增值税留抵退税在内的新的组合式税费支持政策以及稳经济一揽子政策措施,切实帮助企业纾困解难,稳住宏观经济大盘,推动中国经济高质量发展。21364亿元退税款已到账政策红利效果持续显现今年以来,我国部署实施包括大规模增值税留抵退税在内的新的组合式税费支持政策以及稳经济一揽子政策措施,切实帮助企业纾困解难,稳住宏观经济大盘,推动中国经济高质量发展。记者从国家税务总国家税务总局今年累计有21364亿元退税款退到纳税人账户中新网9月13日电据国家税务总局微信公号13日消息,据统计,2013年至2021年,税务部门办理新增减税降费累计8。8万亿元,我国宏观税负从2012年的18。7降至2021年的15安徽某商贸有限公司虚开增值税专用发票,被罚税款72。49万安徽XH商贸有限公司具有虚开增值税专用发票行为,在稽查案件执行完毕前,不履行税收义务并脱离税务机关监管,经税务机关检查确认走逃(失联)的。虚开增值税专用发票二主要违法事实经国家税务