一、jpa 原生insert的sql语句:
@Modifying
@Query(value = "insert into t_sys_org_user(org_id,user_id) values(?1,?2)",nativeQuery = true)
int addUserToOrg(Long orgId,Long userId);
jpa 原生delete的sql语句:
@Modifying
@Query(value = "delete from t_sys_org_user where org_id=?1 and user_id=?2",nativeQuery = true)
int deleteUserFromOrg(Long orgId,Long userId);
jpa 原生update的sql语句:
@Modifying
@Query(value = "update t_sys_user set status=0 where user_id=?1",nativeQuery = true)
int updateUserStatus(Long userId);
jpa 原生select的sql语句:
@Query(value = "select s from SysUserDTO s left join s.sysOrgDTOSet o where (?1 is null or s.username like ?1) and (?2 is null or o.name like ?2)")
Page<SysUserDTO> findByUsernameAndOrgName(String username, String orgName, Pageable pageable);
public Page<SysUserDTO> findByUsernameAndOrgName(String username, String orgName, Pageable pageable){
String name = (username==null)?null:"%"+username+"%";
String orgname = (orgName==null)?null:"%"+orgName+"%";
return sysUserDAO.findByUsernameAndOrgName(name,orgname,pageable);
二、jpa hql中使用in关键字
@Query(value = "select distinct r from SysRoleDTO r left join r.sysOrgDTOSet o where (?1 is null or r.name like ?1) "+
"and (?2 is null or r.code like ?2) and o.id in (?3)") Page<SysRoleDTO> findAllRole(String name, String code, List<Long> ids, Pageable pageable);
@Transactional
@Modifying
@Query("delete from MeetingQRSign where mpid = ?1")
void deleteByMpid(String mpid);
@Modifying
@Query("update AccountEntity w set w.version=:version where w.id=:id")
void update(@Param("version") int version,@Param("id") String id);
jpa 原生insert的sql语句: @Modifying @Query(value = "insert into t_sys_org_user(org_id,user_id) values(?1,?2)",nativeQuery = true) int addUserToOrg(Long orgId,Long userId);jpa 原生delete的sql语句: @Mo...
Spring-Jpa最佳做法
스프링으로개발을하면서가했습니정정했습니다。 最佳实践,最佳实践,最佳实践。 지,프로젝트를이예라정이라깃허브开始,观看있습니다있습니다。 。이여러분에게이라도이라도이되기를기원합니다。
步骤XX分支정보를다。 보목차의목차의Branch로结帐을
Github Issue发行了。리겠습니리겠습니다。
Spring Boot 1.5.8。发布
Java 8
JPA和H2
Lombok
Lombok(Lombok)。
$ mvn spring-boot:run
API Swagger
해당API Swagger 으로테스있습니다。
jpa 原生insert的sql语句: @Modifying
@Query(value = "insert into t_sys_org_user(org_id,user_id) values(?1,?2)",nativeQuery = true)
int addUserToOrg(Long orgId,Long userId);jpa 原生delete的sql语句: @Mod
沿⽤我们之前的例⼦,新增⼀个 @Query 的⽅法:
// 通过 query 注解根据 name 查询 user 信息
@Query("From User where name=:name")
User findByQuery(@Param("name") String nameParam);
新增⼀个测试方法:
@Test
public void testQueryAnnotation() {
使用springboog+jpa框架,因为业务需求不能使用封装好的save()方法,故需要在jpa容器里使用@Query注解写sql完成
起初,直接@Query(value="insert into 对象名(字段名) values (?1)")插入,但是一直报错unexpected token: VALUES
即sql语句有误,各种改,没用,后来网上查,大多数说法是jpa的jpql不支持ins...
private EntityManager entityManager;
public insert() {
String insertSql="insert into test(id) values('1'),('2');"
Query query = this.entityManager.createNativeQuery(insertSql);
通过sql语句去做,这里nativeQuery = true,这样就可以使用原始的sql语句了
其实真实的分页是这样的:limit (page – 1) * size , size
因为limit后面不能接运算符,这里我们这service层处理:
sql文件如下:
CREATE DATABASE /*!32312 IF NOT EXISTS*/`jap_repository_demo` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci */;
老大看时间的太慢了,提醒了我一下,让我去深入看看jpa的底层
突然想到之前有点印象,在不追求性能的情况下可以使用jpa的批量插入,但是需要提升性能的时候就需要自己手动操作一波
然而因为之前都是用MySQL数据库,习惯的用了MySQL的批量插入的语法
再经过一阵子的折腾后,对自己的SQL语句
JPA (Java Persistence API) 是 Java EE 的一部分,它提供了一种方便的方式来访问和管理数据库中的数据。show-sql 是 JPA 的一个配置选项,用于在控制台上显示生成的 SQL 语句。如果你想在你的 JPA 应用程序中启用 show-sql,你可以在你的 persistence.xml 文件中添加以下配置:
<property name="hibernate.show_sql" value="true"/>
这将启用 Hibernate 的 show-sql 功能,它将在控制台上显示生成的 SQL 语句。