java – Spring Generic Dao类名
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Spring Generic Dao类名,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2369字,纯文字阅读大概需要4分钟。
内容图文
![java – Spring Generic Dao类名](/upload/InfoBanner/zyjiaocheng/710/9df70fce8aca4fa9b550129a0d9c196d.jpg)
我已经为我的spring / hibernate项目配置了一个自定义通用服务DAO – 这个想法是我可以从我的控制器中轻松地重用它.
它基本上是这样的:
public class DefaultService<T> {
private Class<T> e;
public String className(Class<T> e) {
String clip = e.getName();
clip = clip.substring(clip.lastIndexOf('.') + 1, clip.length());
return clip;
}
public List<T> getAll(Integer status) {
Session session = sessionFactory.getCurrentSession();
Query query = session.createQuery("FROM " + className(e) + " WHERE status = " + status);
return query.list();
}
...
哪个被引用:
@Autowired
public DefaultService<Address> addressService;
addressService.get(1);
但是,String clip = e.getName()行会抛出Null指针异常.如果我将类移动到属性部分(因此addressService.get(Address.class,1)),我可以让它工作,但我发现这有点不整洁,特别是当有多个不同的类被调用时.
有没有办法让类正确生成一个值而不必重复添加到我的所有函数中?
提前致谢.
解决方法:
我做了类似的事情,你需要泛型类作为构造函数参数,我使用hibernate实体,但你可以传入表名字符串.
public class DomainRepository<T> {
@Resource(name = "sessionFactory")
protected SessionFactory sessionFactory;
public DomainRepository(Class genericType) {
this.genericType = genericType;
}
@Transactional(readOnly = true)
public T get(final long id) {
return (T) sessionFactory.getCurrentSession().get(genericType, id);
}
然后,您可以子类化(如果需要)自定义或简单地在spring配置中设置bean,如下所示:
<bean id="tagRepository" class="com.yourcompnay.data.DomainRepository">
<constructor-arg value="com.yourcompnay.domain.Tag"/>
</bean>
因此,在您的代码中,您可以像这样引用tagRepository(不需要其他代码,而不是上面和下面发布的代码):
@Resource(name = "tagRepository")
private DomainRepository<Tag> tagRepository;
此外,我将其称为存储库而非服务,服务处理不同类型及其交互(不仅仅是一个).特别是使用SQL字符串的示例:
public final String tableName;
public DomainRepository(String tableName) {
this.tableName = tableName;
}
public List<T> getAll(Integer status) {
Session session = sessionFactory.getCurrentSession();
Query query = session.createQuery("FROM " + tableName + " WHERE status = " + status);
return query.list();
}
并让你的bean定义如此
<bean id="addressRepository" class="com.yourcompnay.data.DomainRepository">
<constructor-arg value="address"/>
</bean>
然后你也可以在必要时自己创建子类:
public class PersonRepository extends DomainRepository<Person> {
public PersonRepository(){
super("person"); //assumes table name is person
}
内容总结
以上是互联网集市为您收集整理的java – Spring Generic Dao类名全部内容,希望文章能够帮你解决java – Spring Generic Dao类名所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。