欢迎光临
我们一直在努力

jpa的query注解,jpa查询部分字段不用query

文章目录 @Query作用使用例子简单使用like表达式原生sql 传参方式SPEL表达式nativeQuery 作用更新操作删除操作@query返回自定义字段@query返回自定义对象

@Query作用

@Query标记在继承了Repository的自定义接口方法上,就不需要遵循查询方法命名规则

public @interface Query {/** 定义被执行的sql或者hql */String value() default “”;/** 分页时用于查询中数量的sql或者hql */String countQuery() default “”;/** 用原生的分页 */String countProjection() default “”;/** 使用原生sql,为false时使用hql */boolean nativeQuery() default false;/** 定义该查询的名字 */String name() default “”;/** 数量查询返回的别名 */String countName() default “”;} 使用例子 @Entity@Table(name = “T_DEPT”)@Datapublic class Dept implements Serializable { @Id private Integer id; private String name; private Integer upId;} @Entity@Table(name = “T_USER”)@Datapublic class User implements Serializable { @Id private Integer id; private String name; private Integer deptId;} 简单使用

用占位符?序号对应传入参数,从1开始

@Repositorypublic interface UserRepository extends JpaRepository<User, Integer> { @Query(“select u.id, u.name from User u where u.id=?1”) List<User> getUserById(Integer id);} like表达式

用命名参数

@Query(“select u.id, u.name from User u where u.name like %:name%”)List<User> getUserByName(@Param(“name”) String name); 原生sql

只能用占位符?

@Query(value=”select u.id, u.name from t_user u where u.id=?1″, nativeQuery = true)List<User> getUserById(Integer id); 传参方式 占位符,序号对应参数声明顺序,从1开始命名参数,@Param中声明传入参数名称 SPEL表达式

使用@Entity注解后,#{#entityName}会取@Entity()的值,默认是类名小写,可以申请如@Entity(name = “t_user”),取出的值就是t_user

@Query(value=”select u.id, u.name from #{#entityName} u where u.id=?1″, nativeQuery = true)List<User> getUserById(Integer id); nativeQuery 作用

nativeQuery 默认值为false,默认是使用hql语法, from对象
设置为true时,则使用原生sql, from表名

更新操作

添加@Modifying 注解代表允许修改

@Modifying@Query(“update User u set u.name = :name where u.id = :id”)void update(@Param(“id”) Integer id, @Param(“name”) String name); 删除操作

添加@Modifying 注解代表允许删除

@Modifying@Query(“delete from User where u.id = :id”)void update(@Param(“id”) Integer id); @query返回自定义字段

hql和原生sql都可以实现
原生sql返回的是List<Object[]>

@Repositorypublic interface UserRepository extends JpaRepository<User, Integer> { @Query(“select u.id, u.name, d.id, d.name ” + “from User u, Dept d ” + “where u.deptId=d.id”, nativeQuery = true) List<Object[]> findAllForUserDept(); @query返回自定义对象

使用的时hql语法,不支持sql原生

@Datapublic class UserDept implements Serializable { @JsonProperty(“user_id”) private Integer userId; @JsonProperty(“user_name”) private String 便宜美国vps userName; @JsonProperty(“dept_id”) private Integer deptId; @JsonProperty(“dept_name”) private String deptName; public UserDept(Integer userId, String userName, Integer deptId, String deptName) { this.userId = userId; this.userName = userName; this.deptId = deptId; this.deptName = deptName; }}

from 后面都是用的对象(hql)

@Repositorypublic interface UserRepository extends JpaRepository<User, Integer> { @Query(“select new com.ljw.test.pojo.domain.UserDept(” + “u.id, u.name, d.id, d.name ) ” + “from User u, Dept d ” + “where u.deptId=d.id”) List<UserDept> findAllForUserDept(); @Query(“select new map(” + “u.id as user_id, u.name as user_name, d.id as dept_id, d.name as dept_name) ” + “from User u, Dept d ” + “where u.deptId=d.id”) List<Map<String, Object>> findAllForMap();} 56179165

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。