Nutz是一组轻便小型的框架的集合, 各个部分可以被独立使用,把SSH的精华封装在一个1M左右的jar包中,Nutz不对其他任何第三方库产生依赖,如果不考虑数据库链接和日志的话,创建完美的Web应用只需要一个Nutz的jar包。

作为产品而言,就算是再优秀,如果没有优良的使用文档,也是白搭。这也是Nutz的优势所在,很少见到文档像Nutz这样详细的开源框架。

总之,小菜认为Nutz乃国产良心精品。

但是,Nutz 再怎么好,也是个人维护的开源框架,总会遇到种种问题。

今天小菜在实体索引注解方面遇到了点问题,啥问题呢:根本不知道索引注解怎么用。。。

但令小菜意外的是,整个度娘和谷歌,竟然搜不到一丁点答案,官方也没有说明。。。

最后还是在GitHub里找到了点线索,现在把使用方法共享一下!

假设有如下实体:

 /**
* 用户
* @author xx
*
*/
@Table("t_user")
public class User {
/**
* 主键
*/
@Id
private long id; //其他属性...... } /**
* 用户操作记录
* @author xx
*
*/
@Table("t_user_record")
public class UserRecord { /**
* 主键
*/
@Id
private long id;
/**
* 用户id(外键)
*/
@Column("user_id")
private long userId;
/**
* 创建时间
*/
@Column("create_date")
private Date createDate; //其他属性...... }

这两个实体描述了用户和用户使用系统而产生的记录,很明显的关联关系。

虽然小菜没有配置一对多映射,但是我们也应该清楚UserRecord实体中的userId属性是一个外键,会在关联两个表的时候使用,而userId又可能有很多很多,不具备有限性,所以这个字段必须加索引。

既然提到索引,就多介绍一点,索引不是乱加的,加多了严重影响写入的速度,这个大家应该都知道,有些字段,可能只有有限的几个值,比如性别,加上索引意义不太。

废话太多了。。。进入正题。。。

我们现在要在UserRecord实体的userId属性上加索引,这么写:

 /**
* 用户操作记录
* @author xx
*
*/
@Table("t_user_record")
@TableIndexes({@Index(name="idx_user_record_user_id",fields={"userId"},unique=false)})
public class UserRecord { /**
* 主键
*/
@Id
private long id;
/**
* 用户id(外键)
*/
@Column("user_id")
private long userId;
/**
* 创建时间
*/
@Column("create_date")
private Date createDate; //其他属性...... }

只需在实体类上加@TableIndexes注解即可,然后里边每一个@Index注解可以理解成一个索引的声明。

比如说想定义多个索引:

 @TableIndexes({@Index(name="idx_user_record_user_id",fields={"userId"},unique=false),
@Index(name="index_name",fields={"fieldName1","fieldName2"},unique=false)})

@Index注解中具体参数说明如下:

         name 索引名称。由于索引是全局的,为了避免冲突,名称中建议加上表名。

fields 索引属性集合,也就是说在哪些属性上创建索引。因为索引不仅仅可以加在一个字段上,加在多个字段上叫联合索引。注意,小菜一直在强调属性,fields中的值是实体属性名称,而不是数据库表中的字段名称。

unique 是否是唯一索引。索引大致有三种类型:普通索引、唯一索引、全文索引。普通索引没得说,就是简单的加一个索引,unique=false就是普通索引;唯一索引就是在普通索引的基础上加了一个唯一性约束,保证该字段不重复,unique=true就是唯一索引;全文索引比较复杂,一个表只能建一个,针对超长字符串搜索优化,Nutz不支持,一般也用不到,小菜就不多说啦!

文末,小菜再多说点联合索引的知识。

我们经常会用到这样的SQL语句:

 SELECT * FROM T_TABLE WHERE FIELD1=? AND FIELD2=? AND FIELD3=?

如果这样的查询非常频繁,数据量又比较大,我们就得考虑在FIELD1、FIELD2、FIELD3上加索引,但是一下子加三个单独的索引很浪费,所以可以在FIELD1、FIELD2、FIELD3上加一个联合索引。

另外,在加联合索引时,如果某个字段被单独查询的概率比较大,那么要把这个字段靠前。就拿刚刚的例子说,如果FIELD2会经常被单独查询,那么就按照FIELD2、FIELD1、FIELD3的顺序加联合索引。

本来挺简单的一件事,小菜说了这么多,文章到此结束,祝读者学习顺利!

Nutz Dao实体中索引注解的使用(@TableIndexes@Index)的更多相关文章

  1. SSM框架中写sql在dao文件中以注解的方式

    1以注解方式 //两个参数其中一个是对象需写,对象.属性 @Update("update delivery_address set consignee = #{address.consign ...

  2. JPA实体类中的注解

    @Entity 标注于实体类上,通常和@Table是结合使用的,代表是该类是实体类@Table 标注于实体类上,表示该类映射到数据库中的表,没有指定名称的话就表示与数据库中表名为该类的简单类名的表名相 ...

  3. spring boot JPA中实体类常用注解

    spring boot jpa中的注解很多,参数也比较多.没必要全部记住,但是经常查看官方文档也比较麻烦,记录一下一些常用的注解.通过一些具体的例子来帮助记忆. @Entity @Table(name ...

  4. 模拟实现Spring中的注解装配

    本文原创,地址为http://www.cnblogs.com/fengzheng/p/5037359.html 在Spring中,XML文件中的bean配置是实现Spring IOC的核心配置文件,在 ...

  5. SSM框架中的注解,配置和控制器相关笔记

    常规SSM实例 探索SSM理论的前提,应该是在对框架基础的运作方式有一定了解,以下是个人Android后台项目,用SSM框架快速搭建,以下是代码,主要 观察结构. 代码结构: model实体类 Ida ...

  6. java.lang.IllegalArgumentException: name MUST NOT NULL! at org.nutz.dao.impl.NutDao.fetch

    Nutz传值报错问题 作者:Vashon 时间:20150902 平台:Nutz框架 Java后台方法中拿值时报的错 报错信息: java.lang.IllegalArgumentException: ...

  7. 【进阶】Spring中的注解与反射

    [进阶]Spring中的注解与反射 目录 [进阶]Spring中的注解与反射 前言 一.内置(常用)注解 1.1@Overrode 1.2@RequestMapping 1.3@RequestBody ...

  8. 使用JPA中@Query 注解实现update 操作

    spring使用jpa进行update操作主要有两种方式: 1.调用保存实体的方法 1)保存一个实体:repository.save(T entity) 2)保存多个实体:repository.sav ...

  9. JPA中EntityListeners注解的使用

    使用场景 EntityListeners在jpa中使用,如果你是mybatis是不可以用的 它的意义 对实体属性变化的跟踪,它提供了保存前,保存后,更新前,更新后,删除前,删除后等状态,就像是拦截器一 ...

随机推荐

  1. php 解决json_encode中文UNICODE转码问题

    用PHP的json_encode来处理中文的时候, 中文都会被编码, 变成不可读的, 类似"\u***"的格式,如果想汉字不进行转码,这里提供三种方法 1.升级PHP,在PHP5. ...

  2. linux crontab命令参数及用法详解--linux自动化定时任务cron

    声明:本文转自Linux 安全网,在此基础上加上自己的体会! crontab 命令 如果发现您的系统里没有这个命令,在ubuntu server 中用的是 sudo apt-get install c ...

  3. 如何扫描二维码下载APK

    将apk文件放到网站上,即用户可以通过www.xxx.com.cn/abc.apk直接下载 再www.xxx.com.cn/abc.apk这个字符串做成二维码就可以了. 问题: 直接放到网站后,输入下 ...

  4. [其他] 蒙特卡洛(Monte Carlo)模拟手把手教基于EXCEL与Crystal Ball的蒙特卡洛成本模拟过程实例:

    http://www.cqt8.com/soft/html/723.html下载,官网下载 (转帖)1.定义: 蒙特卡洛(Monte Carlo)模拟是一种通过设定随机过程,反复生成时间序列,计算参数 ...

  5. mysql 数据库导入 导出,解决 导入 错误问题

    mysqldump -uxxxx -pxxxx -hrds2383jse53pi6ipwmf.mysql.rds.aliyuncs.com legaokao > /root/legaokaodu ...

  6. 关于hql一些不常见但好用的技巧(个人总结)

    最近一直在用spring-data-jpa这个东西,感觉方法上注解hql语句已经是很常用的方法了, 有一些关于hql的经验分享一下: 一.hql的join hql的优势就是直接的关联关系嘛,但是通过h ...

  7. fail2ban 原理 安装 使用

    cd fail2ban python setup.py install /etc/fail2ban/ 为配置文件目录; /usr/lib/pythonx.x/site-packages/fail2ba ...

  8. Google搜索质量评估员指南

    Google: 此文档是我们(谷歌)的一份搜索质量评估员指南,可作为搜索质量评估员的培训材料.其中主要介绍了一类名为“网址评分”的评分任务,此类任务要求评估员查看搜索查询与可能返回的相应结果.他们需要 ...

  9. css省略号

    效果图如下: 效果图如下:

  10. 20145225《Java程序设计》 2015—2016年学期课程总结

    20145225<Java程序设计> 2015—2016年学期课程总结 读书笔记链接汇总 1.2016年2月25日 <Java程序设计>课程准备之问卷调查 摘要: 一.你对自己 ...