Spring data jpa实现CRUD的三种方式
2015-11-18 09:56
246 查看
1. 继承JpaRepository
JpaRepository继承PagingAndSortingRepository因此可以很好的实现分页和排序功能。
public interface JpaRepository<T, ID extends Serializable>
extends CrudRepository<T, ID> {
Iterable<T> findAll(Sort sort);
Page<T> findAll(Pageable pageable);
}
2. 使用 jpql语句
public interface UserRepository extends JpaRepository<User, Long> {
@Query("select u from User u where u.emailAddress = ?1")
User findByEmailAddress(String emailAddress);
}
3. 使用实体处理器
package com.jike.usermanage.repository;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.springframework.transaction.annotation.Transactional;
import com.jike.usermanage.model.Interest;
import com.jike.usermanage.model.User;
public class UserRepositoryImpl {
@PersistenceContext
private EntityManager entityManager;
@Transactional
public void add(User user) {
entityManager.persist(user);
}
@Transactional
public User update(User user) {
User userUpdate = entityManager.find(User.class, user.getId());
userUpdate.setName(user.getName());
userUpdate.setPhone(user.getPhone());
return userUpdate;
}
@Transactional
public User addOrUpdate(User user) {
return entityManager.merge(user);
}
@Transactional
public void delete(User user) {
entityManager.remove(user);
}
public User findOne(Integer id) {
return entityManager.find(User.class, id);
}
@Transactional
public List<User> findAll() {
/*
* + , - , *, /
*
* =, >, <, >=, <=, <>
*
* between, like, in, is null, is empty, member of, not , and ,or
*
* */
String queryString = "select u from User u where :interest member of u.interests";
Query query = entityManager.createQuery(queryString);
Interest interest = new Interest();
interest.setId(1L);
query.setParameter("interest", interest);
List list = query.getResultList();
/*if (list!=null){
List<User> userList = new ArrayList<User>();
for(int i=0; i<list.size(); i++){
Object[] o = (Object[]) list.get(i);
User user = new User();
user.setName(o[0].toString());
user.setInCome(new BigDecimal(o[1].toString()));
userList.add(user);
}
return userList;
}else
return null;*/
return list;
}
@Transactional
public List<Object> findObject(int uid) {
/*
* 基本语法:select 实体属性 聚合函数(实体属性) from 实体 group by 实体属性 having 条件
*
* avg(distinct...),sum(distinct...),count(distinct...),min,max
*
* */
String queryString = "select new com.jike.usermanage.model.User(u.id,u.name) from User u where u.id=:id";
//Query query = entityManager.createQuery(queryString);
Query query =entityManager.createNativeQuery("select id_,name_ from t_user where id_=1");
query.setParameter("id", uid);
List list = query.getResultList();
return list;
}
}
相关文档参考:http://docs.spring.io/spring-data/jpa/docs/current/reference/html/
JpaRepository继承PagingAndSortingRepository因此可以很好的实现分页和排序功能。
public interface JpaRepository<T, ID extends Serializable>
extends CrudRepository<T, ID> {
Iterable<T> findAll(Sort sort);
Page<T> findAll(Pageable pageable);
}
2. 使用 jpql语句
public interface UserRepository extends JpaRepository<User, Long> {
@Query("select u from User u where u.emailAddress = ?1")
User findByEmailAddress(String emailAddress);
}
3. 使用实体处理器
package com.jike.usermanage.repository;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.springframework.transaction.annotation.Transactional;
import com.jike.usermanage.model.Interest;
import com.jike.usermanage.model.User;
public class UserRepositoryImpl {
@PersistenceContext
private EntityManager entityManager;
@Transactional
public void add(User user) {
entityManager.persist(user);
}
@Transactional
public User update(User user) {
User userUpdate = entityManager.find(User.class, user.getId());
userUpdate.setName(user.getName());
userUpdate.setPhone(user.getPhone());
return userUpdate;
}
@Transactional
public User addOrUpdate(User user) {
return entityManager.merge(user);
}
@Transactional
public void delete(User user) {
entityManager.remove(user);
}
public User findOne(Integer id) {
return entityManager.find(User.class, id);
}
@Transactional
public List<User> findAll() {
/*
* + , - , *, /
*
* =, >, <, >=, <=, <>
*
* between, like, in, is null, is empty, member of, not , and ,or
*
* */
String queryString = "select u from User u where :interest member of u.interests";
Query query = entityManager.createQuery(queryString);
Interest interest = new Interest();
interest.setId(1L);
query.setParameter("interest", interest);
List list = query.getResultList();
/*if (list!=null){
List<User> userList = new ArrayList<User>();
for(int i=0; i<list.size(); i++){
Object[] o = (Object[]) list.get(i);
User user = new User();
user.setName(o[0].toString());
user.setInCome(new BigDecimal(o[1].toString()));
userList.add(user);
}
return userList;
}else
return null;*/
return list;
}
@Transactional
public List<Object> findObject(int uid) {
/*
* 基本语法:select 实体属性 聚合函数(实体属性) from 实体 group by 实体属性 having 条件
*
* avg(distinct...),sum(distinct...),count(distinct...),min,max
*
* */
String queryString = "select new com.jike.usermanage.model.User(u.id,u.name) from User u where u.id=:id";
//Query query = entityManager.createQuery(queryString);
Query query =entityManager.createNativeQuery("select id_,name_ from t_user where id_=1");
query.setParameter("id", uid);
List list = query.getResultList();
return list;
}
}
相关文档参考:http://docs.spring.io/spring-data/jpa/docs/current/reference/html/
相关文章推荐
- 基于Android SQLiteOpenHelper && CRUD 的使用
- 基于php和mysql的简单的dao类实现crud操作功能
- spring的jdbctemplate的crud的基类dao
- jQuery操作JSON的CRUD用法实例
- Hibernate上路_15-多对多表单操作
- SpringMVC+Hibernate +MySql+ EasyUI实现CRUD(一)
- MySQL_CRUD基础语句
- SQLiteDatabase中query、insert、update、delete方法参数说明
- EXTJS4.1MVC单表维护
- MongoDB 一些简单操作,_id ,时间戳等
- yii1.1随记
- Yii framwork crud Relational Active Record 笔记二
- Mongo 在Java中的增删改查操作
- Hibernate之CRUD工具类
- 【MongoDB数据库】Java MongoDB CRUD Example
- MyBatis系列教程(三)--实现数据的增删改查(CRUD)
- Mongodb之CRUD for Java
- Android中使用OrmLite来对SQLite数据库进行CRUD(增删改查)解析
- 如何在Android设备中用NDK编译SQLite并且对SQLite进行操作(增删)-How to Compile SQLite for Android using NDK
- Mybatis上路_02-单表的CRUD