JPA实用手册,即看即用

JPA实用手册,即看即用,第1张

修改查询

@Modifying

@Query("update User u set ufirstname = 1 where ulastname = 2")

int setFixedFirstnameFor(String firstname, String lastname);

使用 Sort 和 JpaSort

public interface UserRepository extends JpaRepository {

  @Query("select u from User u where ulastname like 1%")

  List findByAndSort(String lastname, Sort sort);

  @Query("select uid, LENGTH(ufirstname) as fn_len from User u where ulastname like 1%")

  List findByAsArrayAndSort(String lastname, Sort sort);

}

repofindByAndSort("lannister", new Sort("firstname"));           

repofindByAndSort("stark", new Sort("LENGTH(firstname)"));       

repofindByAndSort("targaryen", JpaSortunsafe("LENGTH(firstname)"));

repofindByAsArrayAndSort("bolton", new Sort("fn_len"));   

使用已命名参数

public interface UserRepository extends JpaRepository {

  @Query("select u from User u where ufirstname = :firstname or ulastname = :lastname")

  User findByLastnameOrFirstname(@Param("lastname") String lastname,

                                @Param("firstname") String firstname);

}   

原生SQL分页

public interface UserRepository extends JpaRepository {

  @Query(value = "SELECT FROM USERS WHERE LASTNAME = 1",

    countQuery = "SELECT count() FROM USERS WHERE LASTNAME = 1",

    nativeQuery = true)

  Page findByLastname(String lastname, Pageable pageable);

}

Sort sort =newSort(SortDirectionDESC,"createTime");//创建时间降序排序Pageable pageable =newPageRequest(pageNumber,pageSize,sort);

使用原生SQL

public interface UserRepository extends JpaRepository {

  @Query(value = "SELECT FROM USERS WHERE EMAIL_ADDRESS = 1", nativeQuery = true)

  User findByEmailAddress(String emailAddress);

}

为了消除不确定性,可以在方法名内使用下划线“_”手动定义隔断点。

List findByAddress_ZipCode(ZipCode zipCode);

查询方法建立

distinct flag

ignoring case

order by

public interface PersonRepository extends Repository {

  List findByEmailAddressAndLastname(EmailAddress emailAddress, String lastname);

  // Enables the distinct flag for the query  List findDistinctPeopleByLastnameOrFirstname(String lastname, String firstname);

  List findPeopleDistinctByLastnameOrFirstname(String lastname, String firstname);

  // Enabling ignoring case for an individual property  List findByLastnameIgnoreCase(String lastname);

  // Enabling ignoring case for all suitable properties  List findByLastnameAndFirstnameAllIgnoreCase(String lastname, String firstname);

  // Enabling static ORDER BY for a query  List findByLastnameOrderByFirstnameAsc(String lastname);

  List findByLastnameOrderByFirstnameDesc(String lastname);

}

异步查询结果

@Async

Future findByFirstname(String firstname);           

@Async

CompletableFuture findOneByFirstname(String firstname);

@Async

ListenableFuture findOneByLastname(String lastname);

Like模糊查询

@Query(value = "select name,author,price from Book b where bname like %:name%")

List findByNameMatch(@Param("name") String name);

In 查询

@Query(value = "select from trade$seek_purchase_offer where sp_id in (:spIds) and of_enuu = :enUu", nativeQuery = true)

    List getSeekPurchaseOfferList(@Param("spIds") List spIds, @Param("enUu") Long enUu);

MappedSuperClass:

映射为非实体父类,该实体父类不会生成对应的数据

@OneToOne

@Entity

@Table(name = "costume_all_id")

public class AllId extends AbstractEntity {

    private static final long serialVersionUID = 1L;

    @OneToOne(cascade = CascadeTypeALL)

    @JoinColumn(name = "costume_member_fk")

    private Member member;// 用户表外键

}

@OneToMany和@ManyToOne

@Entity

@Table(name = "costume_organization")

public class Organization extends AbstractEntity {

    private static final long serialVersionUID = 1L;

    @Column(nullable = false, length = 50)

    private String name; // 组织名称

    @OneToMany(mappedBy = "organization")

    private Set departmentSet; // 部门集合

}

@Entity

@Table(name = "costume_department")

public class Department extends AbstractEntity {

    private static final long serialVersionUID = 1L;

    @Column(nullable = false, length = 50)

    private String name; // 部门名称

    @ManyToOne(optional = false)

    private Organization organization; // 组织外键

    @ManyToMany

    private Set memberSet; // 用户表外键

    public Organization getOrganization() {

        return organization;

    }

    @JsonBackReference

    public void setOrganization(Organization organization) {

        thisorganization = organization;

    }

}

@ManyToMany

Entity

@Table(name = "costume_member")

public class Member extends AbstractEntity {

    private static final long serialVersionUID = 1L;

    @Column(nullable = false, length = 20)

    private String name;

    @ManyToMany

    @JoinTable(joinColumns = { @JoinColumn(name = "member_id") }, inverseJoinColumns = {

            @JoinColumn(name = "department_id") }) //被控方表字段名

    private Set departmentSet; // 部门表外键

    public Set getDepartmentSet() {

        return departmentSet;

    }

    @JsonBackReference

    public void setDepartmentSet(Set departmentSet)

    {

        thisdepartmentSet = departmentSet;

    }

}

HQL通过旅店名称查询旅店以及城市的所有信息 直接返回实体类

/

关联查询

@return

/

@Query(value = "select new perszpwdomainCityHohel(t1name AS cityName,t2name AS hotelName) from  TCity t1 left  join THotel t2 on t1id=t2city where t2name =:name")

List findCityAndHotelByHQLResultObj(@Param("name") String name);

@Data

public class CityHohel {

        private String cityName;

        private String hotelName;

        public CityHohel(String cityName, String hotelName) {

            thiscityName = cityName;

            thishotelName = hotelName;

        }

}

实例2

@Entity 

@Table(name="orders") 

public class Order { 

    private String orderid; 

    private Float amount = 0f; 

    private Set items = new HashSet(); 

    @Id 

    @Column(length = 12) 

    public String getOrderid() { 

        return orderid; 

    } 

    public void setOrderid(String orderid) { 

        thisorderid = orderid; 

    } 

    @Column(nullable = false) 

    public Float getAmount() { 

        return amount; 

    } 

    public void setAmount(Float amount) { 

        thisamount = amount; 

    } 

@OneToMany(cascade = { CascadeTypeREFRESH, CascadeTypePERSIST,CascadeTypeMERGE, CascadeTypeREMOVE },mappedBy ="order") //这里配置关系,并且确定关系维护端和被维护端。mappBy表示关系被维护端,只有关系端有权去更新外键。这里还有注意OneToMany默认的加载方式是赖加载。当看到设置关系中最后一个单词是Many,那么该加载默认为懒加载 

    public Set getItems() { 

        return items; 

    } 

    public void setItems(Set items) { 

        thisitems = items; 

    } 

        / 

          该方法用于向order中加order项 

          / 

    public void addOrderItem(OrderItem orderItem){ 

        orderItemsetOrder(this);//用关系维护端来维护关系 

        thisitemsadd(orderItem); 

    } 

}

@Entity 

public class OrderItem { 

    private Integer id; 

    private String productName; 

    private Float sellPrice = 0f; 

    private Order order; 

    @Id 

    @GeneratedValue 

    public Integer getId() { 

        return id; 

    } 

    public void setId(Integer id) { 

        thisid = id; 

    } 

    @Column(length = 40, nullable = false) 

    public String getProductName() { 

        return productName; 

    } 

    public void setProductName(String productName) { 

        thisproductName = productName; 

    } 

    @Column(nullable = false) 

    public Float getSellPrice() { 

        return sellPrice; 

    } 

    public void setSellPrice(Float sellPrice) { 

        thissellPrice = sellPrice; 

    } 

    @ManyToOne(cascade = {CascadeTypeMERGE,CascadeTypeREFRESH }, optional = true) 

    @JoinColumn(name="order_id")//这里设置JoinColum设置了外键的名字,并且orderItem是关系维护端 

    public Order getOrder() { 

        return order; 

    } 

    public void setOrder(Order order) { 

        thisorder = order; 

    } 

缓存

  

    orgspringframeworkboot  

    spring-boot-starter-cache  

@Configuration  

@EnableCaching  

public class CacheConfig {  

}  

@Cacheable

Spring 在执行 @Cacheable 标注的方法前先查看缓存中是否有数据,如果有数据,则直接返回缓存数据;若没有数据,执行该方法并将方法返回值放进缓存。

参数: value缓存名、 key缓存键值、 condition满足缓存条件、unless否决缓存条件

@Cacheable(value = "user", key = "#id")  

public User findById(final Long id) {  

    Systemoutprintln("cache miss, invoke find by id, id:" + id);  

    for (User user : users) {  

        if (usergetId()equals(id)) {  

            return user;  

        }  

    }  

    return null;  

}  

@CachePut

和 @Cacheable 类似,但会把方法的返回值放入缓存中, 主要用于数据新增和修改方法。

@CachePut(value = "user", key = "#userid")  

public User save(User user) {  

    usersadd(user);  

    return user;  

@CacheEvict

方法执行成功后会从缓存中移除相应数据。

参数: value缓存名、 key缓存键值、 condition满足缓存条件、 unless否决缓存条件、 allEntries是否移除所有数据(设置为true时会移除所有缓存)

@CacheEvict(value = "user", key = "#userid") // 移除指定key的数据  

public User delete(User user) {  

    usersremove(user);  

    return user;  

}  

@CacheEvict(value = "user", allEntries = true) // 移除所有数据  

public void deleteAll() {  

    usersclear();  

}  

springcachetype=none 设置缓存无效化

集成EhCache

  

    netsfehcache  

    ehcache  

         xsi:noNamespaceSchemaLocation="ehcachexsd">  

      

src\main\resources/applicationproperties

springcacheehcacheconfig=classpath:ehcachexml

如果想自定义设置一些个性化参数时,通过Java Config形式配置。

@Configuration  

@EnableCaching  

public class CacheConfig {  

    @Bean  

    public CacheManager cacheManager() {  

        return new EhCacheCacheManager(ehCacheCacheManager()getObject());  

    }  

    @Bean  

    public EhCacheManagerFactoryBean ehCacheCacheManager() {  

        EhCacheManagerFactoryBean cmfb = new EhCacheManagerFactoryBean();  

        cmfbsetConfigLocation(new ClassPathResource("ehcachexml"));  

        cmfbsetShared(true);  

        return cmfb;  

    }  

}  

组合CacheManager

从多个CacheManager中轮询得到相应的Cache。

@Configuration  

@EnableCaching  

public class CacheConfig {  

    @Bean  

    public CacheManager compositeCacheManager(RedisTemplate redisTemplate) {  

        CompositeCacheManager cacheManager = new CompositeCacheManager(new ConcurrentMapCacheManager(), new SimpleCacheManager());  

        cacheManagersetFallbackToNoOpCache(false);  

        cacheManagerafterPropertiesSet();  

        return cacheManager;  

    }  

sp_configure "max memory",800000 ///共享内存16G

Sybase 能够用到的最大物理内存,单位2k,通常配置成主机物理内存的70%~80%

sp_configure “number of user connections”,180 ///180个用户连接数

通常根据实际并发呼叫来配,一般配置80~200

sp_configure “lock scheme”, allpages ///使用缺省:页锁

但有些并发 *** 作多的表需使用行锁,如cc_telebill表等

sp_configure “number of locks”,50000 /锁的数目5万

可以根据实际应用,一般10000~50000

sp_configure “max online engines”,2 ///cpu个数为2

单cpu使用缺省值,多cpu(4~8个)配成n-1个

number of engines at startup

sp_configure “number of worker processes”,2 //启用的工作进程数

单cpu使用缺省值,多cpu(4~8个)配成n-1个

sp_configure “number of open indexes ”,1000 ///打开的索引个数

sp_configure “number of open objects ”,1000 ///打开的事务个数

sp_configure "user log cache size",4096

日志缓存通常配成2048或4096

sp_configure "procedure cache size",50000 /// 100M

存储过程缓存(运行存储过程),单位2k,通常根据需要配置50~200M

sp_cacheconfig "default data cache","12G"

设置数据缓存12G(所有cache值累加不能超过max memory)

sp_cacheconfig "default data cache", "cache_partition=2"

数据缓存分区(减少锁竞争)

重启sybase服务令所有参数生效

解决方法如下:

1、首先,连接wifi网络,知道在网络与共享中心里显示了,不管是受限还是未识别,不用管。

2、单击无线网络连接,打开其“状态”页面,单击“无线属性”(也可以在右下角的网络图标那里左键,d出一个网络列表,选择连接的,右键属性),点击安全标签。

3、下面有一个高级设置,点开,勾选那个fips兼容,确定退出,然后断开无线连接,接着再连,就发现可以了,如果不行,那可能是DHCP分配ip出问题了(错的一般是169开头)。

一 存储命令

存储命令的格式

<mand name> <key> <flags> <exptime> <bytes> <data block>

参数说明如下

<mand name> set/add/replace <key> 查找关键字 <flags> 客户机使用它存储关于键值对的额外信息 <exptime> 该数据的存活时间 表示永远 <bytes> 存储字节数 <data block> 存储的数据块(可直接理解为key value结构中的value) 添加

( ) 无论如何都存储的set

这个set的命令在memcached中的使用频率极高 set命令不但可以简单添加 如果set的key已经存在 该命令可以更新该key所对应的原来的数据 也就是实现更新的作用

可以通过“get 键名”的方式查看添加进去的记录

如你所知 我们也可以通过delete命令删除掉 然后重新添加

( ) 只有数据 不存在 时进行添加的add

( ) 只有数据 存在 时进行替换的replace

  删除

可以看到 删除已存在的键值和不存在的记录可以返回不同的结果

二 读取命令 get

get命令的key可以表示一个或者多个键 键之间以空格隔开

gets

可以看到 gets命令比普通的get命令多返回了一个数字(上图中为 ) 这个数字可以检查数据是否发生改变 当key对应的数据改变时 这个多返回的数字也会改变

cas

cas即checked and set的意思 只有当最后一个参数和gets所获取的参数匹配时才能存储 否则返回“EXISTS”

三 状态命令 stats

stats items

执行stats items 可以看到STAT items行 如果memcached存储内容很多 那么这里也会列出很多的STAT items行

stats cachedump slab_id limit_num

我们执行stats cachedump 命令效果如下

这里slab_id为 是由 中的stats items返回的结果(STAT items后面的数字)决定的 limit_num看起来好像是返回多少条记录 猜的一点不错 不过 表示显示出所有记录 而n(n> )就表示显示n条记录 如果n超过该slab下的所有记录 则结果和 返回的结果一致

通过stats items stats cachedump slab_id limit_num配合get命令可以遍历memcached的记录

其他stats命令

如stats slabs stats sizes stats reset等等使用也比较常见

四 其他常见命令 append

在现有的缓存数据后添加缓存数据 如现有缓存的key不存在服务器响应为NOT_STORED

prepend

和append非常类似 但它的作用是在现有的缓存数据前添加缓存数据

flush_all

该命令有一个可选的数字参数 它总是执行成功 服务器会发送 “OKrn” 回应 它的效果是使已经存在的项目立即失效(缺省) 或在指定的时间后 此后执行取回命令 将不会有任何内容返回(除非重新存储同样的键名) flush_all 实际上没有立即释放项目所占用的内存 而是在随后陆续有新的项目被储存时执行(这是由memcached的懒惰检测和删除机制决定的)

flush_all 效果是它导致所有更新时间早于 flush_all 所设定时间的项目 在被执行取回命令时命令被忽略

其他命令

memcached还有很多命令 比如对于存储为数字型的可以通过incr/decr命令进行增减 *** 作等等 这里只列出开发和运维中经常使用的命令 其他的不再一一举例说明

补充一则 简单认识 net framework中的几种缓存

web站点中缓存的重要性毋庸置疑 我想很多asp net开发人员在开发web应用系统的时候优先考虑使用的缓存并不是第三方缓存解决方案(比如 分布式缓存memcached redis等等) 而应该是 net framework已经提供的多种缓存解决方案 下面结合自己的开发经验谈谈对 net framework中缓存的认识

System Web Caching Cache

估计大部分做过asp net开发的人都用过这个命名空间下的缓存 我们可以直接使用>

public class ImagePipelineConfigUtils {

//分配的可用内存

private static final int MAX_HEAP_SIZE = (int) RuntimegetRuntime()maxMemory();

//使用的缓存数量

private static final int MAX_MEMORY_CACHE_SIZE = MAX_HEAP_SIZE / 4;

//小图极低磁盘空间缓存的最大值(特性:可将大量的小图放到额外放在另一个磁盘空间防止大图占用磁盘空间而删除了大量的小图)

private static final int MAX_SMALL_DISK_VERYLOW_CACHE_SIZE = 20 ByteConstantsMB;

//小图低磁盘空间缓存的最大值(特性:可将大量的小图放到额外放在另一个磁盘空间防止大图占用磁盘空间而删除了大量的小图)

private static final int MAX_SMALL_DISK_LOW_CACHE_SIZE = 60 ByteConstantsMB;

//默认图极低磁盘空间缓存的最大值

private static final int MAX_DISK_CACHE_VERYLOW_SIZE = 20 ByteConstantsMB;

//默认图低磁盘空间缓存的最大值

private static final int MAX_DISK_CACHE_LOW_SIZE = 60 ByteConstantsMB;

//默认图磁盘缓存的最大值

private static final int MAX_DISK_CACHE_SIZE = 100 ByteConstantsMB;

//小图所放路径的文件夹名

private static final String IMAGE_PIPELINE_SMALL_CACHE_DIR = "ImagePipelineCacheSmall";

//默认图所放路径的文件夹名

private static final String IMAGE_PIPELINE_CACHE_DIR = "ImagePipelineCacheDefault";

public static ImagePipelineConfig getDefaultImagePipelineConfig(Context context) {

//内存配置

final MemoryCacheParams bitmapCacheParams = new MemoryCacheParams(

MAX_MEMORY_CACHE_SIZE,// 内存缓存中总的最大大小,以字节为单位。

IntegerMAX_VALUE,// 内存缓存中的最大数量。

MAX_MEMORY_CACHE_SIZE,// 内存缓存中准备清除但尚未被删除的总的最大大小,以字节为单位。

IntegerMAX_VALUE,// 内存缓存中准备清除的总的最大数量。

IntegerMAX_VALUE);// 内存缓存中单个的最大大小。

//修改内存缓存数量,空间策略(这个方式有点恶心)

Supplier<MemoryCacheParams> mSupplierMemoryCacheParams = new Supplier<MemoryCacheParams>() {

@Override

public MemoryCacheParams get() {

return bitmapCacheParams;

}

};

//小的磁盘配置

DiskCacheConfig diskSmallCacheConfig = DiskCacheConfignewBuilder()setBaseDirectoryPath(contextgetApplicationContext()getCacheDir())//缓存基路径

setBaseDirectoryName(IMAGE_PIPELINE_SMALL_CACHE_DIR)//文件夹名

setMaxCacheSize(MAX_DISK_CACHE_SIZE)//默认缓存的最大大小。

setMaxCacheSizeOnLowDiskSpace(MAX_SMALL_DISK_LOW_CACHE_SIZE)//缓存的最大大小,使用设备时低磁盘空间。

setMaxCacheSizeOnVeryLowDiskSpace(MAX_SMALL_DISK_VERYLOW_CACHE_SIZE)//缓存的最大大小,当设备极低磁盘空间

setDiskTrimmableRegistry(NoOpDiskTrimmableRegistrygetInstance())

build();

//默认的磁盘配置

DiskCacheConfig diskCacheConfig = DiskCacheConfignewBuilder()setBaseDirectoryPath(EnvironmentgetExternalStorageDirectory()getAbsoluteFile())//缓存基路径

setBaseDirectoryName(IMAGE_PIPELINE_CACHE_DIR)//文件夹名

setMaxCacheSize(MAX_DISK_CACHE_SIZE)//默认缓存的最大大小。

setMaxCacheSizeOnLowDiskSpace(MAX_DISK_CACHE_LOW_SIZE)//缓存的最大大小,使用设备时低磁盘空间。

setMaxCacheSizeOnVeryLowDiskSpace(MAX_DISK_CACHE_VERYLOW_SIZE)//缓存的最大大小,当设备极低磁盘空间

setDiskTrimmableRegistry(NoOpDiskTrimmableRegistrygetInstance())

build();

//缓存配置

ImagePipelineConfigBuilder configBuilder = ImagePipelineConfignewBuilder(context)

setBitmapsConfig(BitmapConfigRGB_565)

setBitmapMemoryCacheParamsSupplier(mSupplierMemoryCacheParams)

setSmallImageDiskCacheConfig(diskSmallCacheConfig)

setMainDiskCacheConfig(diskCacheConfig)

setMemoryTrimmableRegistry(NoOpMemoryTrimmableRegistrygetInstance())

setResizeAndRotateEnabledForNetwork(true);

// 就是这段代码,用于清理缓存

NoOpMemoryTrimmableRegistrygetInstance()registerMemoryTrimmable(new MemoryTrimmable() {

@Override

public void trim(MemoryTrimType trimType) {

final double suggestedTrimRatio = trimTypegetSuggestedTrimRatio();

Logerd(Stringformat("onCreate suggestedTrimRatio : %d", suggestedTrimRatio));

if (MemoryTrimTypeOnCloseToDalvikHeapLimitgetSuggestedTrimRatio() == suggestedTrimRatio

|| MemoryTrimTypeOnSystemLowMemoryWhileAppInBackgroundgetSuggestedTrimRatio() == suggestedTrimRatio

|| MemoryTrimTypeOnSystemLowMemoryWhileAppInForegroundgetSuggestedTrimRatio() == suggestedTrimRatio

) {

ImagePipelineFactorygetInstance()getImagePipeline()clearMemoryCaches();

}

}

});

return configBuilderbuild();

}

}

以上就是关于JPA实用手册,即看即用全部的内容,包括:JPA实用手册,即看即用、SYBASE数据库优化中各参数分别表示什么如何修改、win7无线网络一直在识别,无法访问英特尔等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9527681.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存