jpa
方便行事,个人约定:
A.只允许@ManyToOne和@OneToOne注解; B.不许配cascade,需要处理的自己写; C.使用 @NotFound(action=NotFoundAction.IGNORE)与延迟加载互斥,影响一定性能;
1.dao继承两个接口一个是JpaRepository,一个是个人的接口ArticleRepository
eg:public interface ArticleDao extends JpaRepository<Article,Integer>,ArticleRepository
2.目的:
extends JpaRepository: 目的是方便@Query直接写代码并自动封装,同时利用其集成的方法. 但是它只支持精准匹配(字符串除外可以like),比如大于等于,范围查询都不支持. 所以=>①只用它的----增删改 + 查1个,查全部,还有智能方法; ②其他>,>,in,like,Hql在@Query中写(分页传Pageable即可,自动代理了); ③更复杂的在ArticleRepositoryImpl中使用EntityManager
extends ArticleRepository: 目的是写其他复杂的sql
3.代码:
ArticleRepository和ArticleRepositoryImpl不用spring管理
/**
* extends JpaRepository: 目的是方便@Query直接写代码并自动封装,同时利用其集成的方法
* extends ArticleRepository: 目的是写其他复杂的sql
*/
@Component
public interface ArticleDao extends JpaRepository<Article,Integer>,ArticleRepository{
/**
* 可以使用@Query的接口直接写在这里, 其他复杂的sql写在ArticleRepository实现类中
*/
@Query(value="select * from t_article", nativeQuery=true)
List<Article> getAll();
}
public interface ArticleRepository {
List<Article> getAll2();
List<Article> getAll3();
}
public class ArticleRepositoryImpl implements ArticleRepository{
@PersistenceContext
private EntityManager em;
private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@Override
public List<Article> getAll2() {
List<Article> articles = null;
List<Map> list = em.createNativeQuery("select id,title,create_time from t_article").unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).setFirstResult(0).setMaxResults(100).list();
if(null!=list&&list.size()>0) {
articles = new ArrayList<Article>();
for(Map m :list){
Article a = new Article();
a.setId(Integer.parseInt(m.get("id").toString()));
if(null!=m.get("title"))a.setTitle(m.get("title").toString());
if(null!=m.get("create_time"))try {a.setCreateTime(sdf.parse(m.get("create_time").toString()));} catch (Exception e) {}
articles.add(a);
}
}
return articles;
}
@Override
public List<Article> getAll3() {
return em.createNativeQuery("select id,title,create_time as createTime from t_article").unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.aliasToBean(Article.class)).setFirstResult(0).setMaxResults(100).list();
}
}
无聊我就学英语

浙公网安备 33010602011771号