package me.test.first.spring.jdo;
import java.util.Date;
import java.util.List;
import java.util.Map;
import javax.jdo.PersistenceManager;
import javax.jdo.PersistenceManagerFactory;
import javax.jdo.Query;
import me.test.first.spring.jdo.entity.User;
import org.springframework.transaction.annotation.Transactional;
public class UserDaoJdoImpl implements UserDao {
private PersistenceManagerFactory pmFactory;
@SuppressWarnings("unchecked")
@Transactional(readOnly = true)
public List<User> list() {
PersistenceManager pm = this.pmFactory.getPersistenceManager();
try {
Query query = pm.newQuery(User.class);
query.setFilter("id > query_id ");
query.declareParameters("Long query_id");
return (List<User>) query.execute(1);
} finally {
pm.close();
}
}
@Transactional
public void insert(User person) {
PersistenceManager pm = this.pmFactory.getPersistenceManager();
try {
pm.makePersistent(person);
} finally {
pm.close();
}
}
@Transactional(readOnly = true)
public User select(long uid) {
PersistenceManager pm = this.pmFactory.getPersistenceManager();
try {
pm.getFetchPlan().addGroup("imgData");
return pm.getObjectById(User.class, Long.valueOf(uid));
} finally {
pm.close();
}
}
@Transactional
public void update(Map<String, Object> userUpdateMap) {
PersistenceManager pm = this.pmFactory.getPersistenceManager();
try {
// 先查询出来,才能更新
User user = pm.getObjectById(User.class, userUpdateMap.get("id"));
if (userUpdateMap.containsKey("name")) {
user.setName((String) userUpdateMap.get("name"));
}
if (userUpdateMap.containsKey("age")) {
user.setAge((Integer) userUpdateMap.get("age"));
}
if (userUpdateMap.containsKey("male")) {
user.setMale((Boolean) userUpdateMap.get("male"));
}
if (userUpdateMap.containsKey("imgData")) {
user.setImgData((byte[]) userUpdateMap.get("imgData"));
}
if (userUpdateMap.containsKey("birthday")) {
user.setBirthday((Date) userUpdateMap.get("birthday"));
}
// version 字段应当会自动更新
pm.makePersistent(user);
} finally {
pm.close();
}
}
@Transactional
public void delete(long uid) {
PersistenceManager pm = this.pmFactory.getPersistenceManager();
try {
User p = pm.getObjectById(User.class, uid);
pm.deletePersistent(p);
} finally {
pm.close();
}
}
public void setPersistenceManagerFactory(PersistenceManagerFactory pmf) {
this.pmFactory = pmf;
}
}