package me.test.first.spring.jdo;
import java.util.ArrayList;
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.Person;
import me.test.first.spring.jdo.entity.QPerson;
import com.mysema.query.jdo.JDOQLQuery;
import com.mysema.query.jdo.JDOQLQueryImpl;
public class PersonDAOImpl implements PersonDAO {
private PersistenceManagerFactory pmFactory;
@SuppressWarnings("unchecked")
public List<Person> list() {
PersistenceManager pm = this.pmFactory.getPersistenceManager();
try {
Query query = pm.newQuery(Person.class, "id > query_id ");
query.declareParameters("Long query_id");
return (List<Person>) query.execute(1);
} finally {
pm.close();
}
}
public void insert(Person person) {
PersistenceManager pm = this.pmFactory.getPersistenceManager();
try {
pm.makePersistent(person);
} finally {
pm.close();
}
}
public Person select(String id) {
PersistenceManager pm = this.pmFactory.getPersistenceManager();
try {
pm.getFetchPlan().addGroup("imgData");
return pm.getObjectById(Person.class, Long.valueOf(id));
} finally {
pm.close();
}
}
public void update(Map<String, Object> person) {
PersistenceManager pm = this.pmFactory.getPersistenceManager();
try {
Person p = pm.getObjectById(Person.class, person.get("id"));
if (person.containsKey("name")) {
p.setName((String) person.get("name"));
}
if (person.containsKey("age")) {
p.setAge((Integer) person.get("age"));
}
if (person.containsKey("male")) {
p.setMale((Boolean) person.get("male"));
}
if (person.containsKey("birthday")) {
p.setBirthday((Date) person.get("birthday"));
}
if (person.containsKey("imgData")) {
p.setImgData((byte[]) person.get("imgData"));
}
} finally {
pm.close();
}
}
public void delete(long id) {
PersistenceManager pm = this.pmFactory.getPersistenceManager();
try {
Person p = pm.getObjectById(Person.class, id);
pm.deletePersistent(p);
} finally {
pm.close();
}
}
public List<Person> dslQuery() {
PersistenceManager pm = this.pmFactory.getPersistenceManager();
JDOQLQuery query = new JDOQLQueryImpl(pm);
try {
QPerson person = QPerson.person;
List<Person> list = query.from(person)
.where(person.age.goe(22), person.name.startsWith("zhao"))
.list(person);
return new ArrayList<Person>(list);
} finally {
query.close();
pm.close();
}
}
public void setPersistenceManagerFactory(PersistenceManagerFactory pmf) {
this.pmFactory = pmf;
}
public void destroy() {
System.out.println("dddddddddddddddddddddddddddddddd");
}
}