当前位置: 首页 > 面试题库 >

Hibernate:CRUD通用DAO

吴才俊
2023-03-14
问题内容

我的web应用程序已经得到了很多服务表/实体,如payment_methodstax_codesprovince_codes,等。

每次添加新实体时,都必须编写一个DAO。问题是,它们基本上是相同的,但是唯一的区别是 实体类本身

我知道Hibernate工具可以自动为我生成代码,但是我现在不能使用它们(不要问为什么),所以我想到了 Generic DAO
。关于这方面有很多文献,但我无法整理并使其与Spring一起使用。

我认为这全都是关于泛型的,它将有四种基本方法:

  • listAll
  • saveOrUpdate
  • deleteById
  • getById

就这样。

题:

不重新发明轮子的 最佳实践 是什么?还没有准备好使用的东西吗?


问题答案:

这是我的

@Component
public class Dao{

    @Resource(name = "sessionFactory")
    private SessionFactory sessionFactory;

    public <T> T save(final T o){
      return (T) sessionFactory.getCurrentSession().save(o);
    }


    public void delete(final Object object){
      sessionFactory.getCurrentSession().delete(object);
    }

    /***/
    public <T> T get(final Class<T> type, final Long id){
      return (T) sessionFactory.getCurrentSession().get(type, id);
    }

    /***/
    public <T> T merge(final T o)   {
      return (T) sessionFactory.getCurrentSession().merge(o);
    }

    /***/
    public <T> void saveOrUpdate(final T o){
      sessionFactory.getCurrentSession().saveOrUpdate(o);
    }

    public <T> List<T> getAll(final Class<T> type) {
      final Session session = sessionFactory.getCurrentSession();
      final Criteria crit = session.createCriteria(type);
  return crit.list();
    }
// and so on, you shoudl get the idea

然后您可以在服务层中像这样访问:

 @Autowired
    private Dao dao;

   @Transactional(readOnly = true)
    public List<MyEntity> getAll() {
      return dao.getAll(MyEntity.class);
    }


 类似资料:
  • 通用通知消息 消息体 ChannelMessage 例子 Swift: NotificationCenter.rokidsdk.addObserver(self, selector: #selector(handleChannelMsgsNotification(_:)), name: NSNotification.Name(rawValue: SDKNotificationName.Channe

  • 类属性 $state state值,调用getAuthUrl方法后可以获取到 $scope 授权权限列表 $result 接口调用结果 $accessToken AccessToken,调用相应方法后可以获取到 $openid openid,调用相应方法后可以获取到

  • 问题内容: 我想在我的api中提供以下内容: 所以我这样写: 但是java无法解决。 随着代替它的工作原理,但第二个实际上是多余的“事业AbtractThing已定义的类型。所以我喜欢摆脱它。 问题答案: 你不能摆脱它。第二个不是多余的。您希望编译器将第一个解释为类型参数,但事实并非如此。您也可以这样写: 请注意,在这种情况下,它是一个具体的类,而不是类型参数。将此与以下内容进行比较: 请注意,它

  • 以下是各个选项的中文翻译: 在启动时: 创建新文档 新建组合 新建的组合允许深度点击 如果启用了深度点击,你就可以在画布中直接选中组合内的对象,而不需要先进入组合。如果关闭此选项,你仍然可以通过按住Cmd键来进行深度点击。 撤销 将类似的操作组合在一起 一次撤销将同时撤销短时间内连续进行的类似操作。 字体渲染 对字体进行子像素反锯齿 允许子像素反锯齿,可以精确获得在Mac上字体渲染效果。iOS设备

  • application提供了千牛移动提供的原生能力,比如打开聊天窗口(openChat)、获取地址位置(location)和打开网址(openWebsite)等,点击查看api列表和具体用法 打开“千牛欢迎页” QN.application.invoke({ api: 'openPlugin', query: { appkey: 23093073 }, settings:

  • 问题内容: 我的web应用程序已经得到了很多服务表/实体,如,,,等。 每次添加新实体时,都必须编写一个DAO。问题是,它们基本上是相同的,但是唯一的区别是 实体类本身 。 我知道Hibernate工具可以为我自动生成代码,但是我现在不能使用它们(不要问为什么),所以我想到了 Generic DAO 。关于这方面有很多文献,但我无法整理并使其与Spring一起使用。 我认为这全都是关于泛型的,它将