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 org.springframework.transaction.annotation.Transactional;
import me.test.first.spring.jdo.entity.QUser;
import me.test.first.spring.jdo.entity.User;
import com.mysema.query.jdo.JDOQLQuery;
import com.mysema.query.jdo.JDOQuery;
import com.mysema.query.jdo.dml.JDOUpdateClause;
public class UserDaoDslImpl implements UserDao {
private PersistenceManagerFactory pmFactory;
@Transactional(readOnly = true)
public List<User> list() {
final PersistenceManager pm = this.pmFactory.getPersistenceManager();
final JDOQLQuery query = new JDOQuery(pm);
try {
final QUser qUser = QUser.user;
return query
.from(qUser)
.where(qUser.id.gt(1L))
.list(qUser);
} finally {
query.close();
pm.close();
}
}
@Transactional
public void insert(final User person) {
final PersistenceManager pm = this.pmFactory.getPersistenceManager();
try {
pm.makePersistent(person);
} finally {
pm.close();
}
}
@Transactional(readOnly = true)
public User select(final Long id) {
final PersistenceManager pm = this.pmFactory.getPersistenceManager();
final JDOQLQuery query = new JDOQuery(pm);
try {
final QUser qUser = QUser.user;
return query
.from(qUser)
.where(qUser.id.eq(id))
.singleResult(qUser);
} finally {
query.close();
}
}
@Transactional
public void update(final Map<String, Object> person) {
final PersistenceManager pm = this.pmFactory.getPersistenceManager();
final QUser qUser = QUser.user;
JDOUpdateClause updateClause = new JDOUpdateClause();
try {
final User p = pm.getObjectById(User.class, person.get("id"));
if (person.containsKey("name")) {
updateClause.set(qUser.name, (String) person.get("name"));
}
if (person.containsKey("age")) {
updateClause.set(qUser.age, (Integer) person.get("age"));
}
if (person.containsKey("male")) {
updateClause.set(qUser.male, (Boolean) person.get("male"));
}
if (person.containsKey("birthday")) {
updateClause.set(qUser.birthday, (Date) person.get("birthday"));
}
if (person.containsKey("imgData")) {
updateClause.set(qUser.imgData, (byte[]) person.get("imgData"));
p.setImgData((byte[]) person.get("imgData"));
}
updateClause.where(qUser.id.eq((Long) person.get("id")));
updateClause.execute();
} finally {
pm.close();
}
}
@Transactional
public void delete(final long id) {
final PersistenceManager pm = this.pmFactory.getPersistenceManager();
try {
final User p = pm.getObjectById(User.class, id);
pm.deletePersistent(p);
} finally {
pm.close();
}
}
public void setPersistenceManagerFactory(final PersistenceManagerFactory pmf) {
this.pmFactory = pmf;
}
public void destroy() {
System.out.println("dddddddddddddddddddddddddddddddd");
}
public User select(final long uid) {
// TODO Auto-generated method stub
return null;
}
}