Spring学习笔记之使用对象-关系映射持久化数据

ORM(object-relational mapping)——对象/关系 映射。
Spring对多个ORM框架提供了支持。下面分别介绍Spring对Hibernate和JPA(Java持久化API,java Persistence API)的支持。
maven:

<dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-orm</artifactId>
        <version>4.3.8.RELEASE</version>
    </dependency>

1.在Spring中集成Hibernate

1.1声明Hibernate的Session工厂

使用Hibernate所需的主要接口是org.hibernate.Session。Session接口提供了基本的数据访问功能。获取Hibernate Session对象的标准方式是借助于Hibernate Session Factory接口的实现类。SessionFactory主要负责Hibernate Session的打开、关闭以及管理。
从3.1版本开始,Spring提供了三个Session工厂bean供我们选择:

  • org.springframework.orm.hibernate3.LocalSessionFactoryBean
  • org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean
  • org.springframework.orm.hibernate4.LocalSessionFactoryBean

至于选择哪一个Session工厂,取决于使用哪一个版本的Hibernate以及使用XML还是使用注解定义对象-数据库之间的映射关系。XML——LocalSessionFactoryBean
,注解——AnnotationSessionFactoryBean。
org.springframework.orm.hibernate4.LocalSessionFactoryBean
类似于前俩个的结合体,能够支持基于XML的映射和基于注解的映射。

/**
     * org.springframework.orm.hibernate3.LocalSessionFactoryBean
     * @param dataSource
     * @return
     */
    @Bean
    @Autowired
    public LocalSessionFactoryBean sessionFactory(DataSource dataSource){
        LocalSessionFactoryBean sfb = new LocalSessionFactoryBean();
        sfb.setDataSource(dataSource);
        sfb.setMappingResources(new String[] {
  "test.hnm.xml"});//设置Hibernate映射文件
        Properties prop = new Properties();
        prop.setProperty("dialect", "org.hibernate.dialect.MySQLDialect");
        sfb.setHibernateProperties(prop);
        return sfb;
    }

    /**
     * org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean

     * @param dataSource
     * @return
     */
    @Bean
    @Autowired
    public AnnotationSessionFactoryBean sessionFactory(DataSource dataSource){
        AnnotationSessionFactoryBean bean = new AnnotationSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setPackagesToScan(new String[] {
  "com.sh.domin"});
        Properties prop = new Properties();
        prop.setProperty("dialect", "org.hibernate.dialect.MySQLDialect");
        bean.setHibernateProperties(prop);
        return bean;
    }

/**
     * org.springframework.orm.hibernate4.LocalSessionFactoryBean
     * 基于注解的方式
     * @param dataSource
     * @return
     */
    @Bean
    @Autowired
    public LocalSessionFactoryBean sessionFactory(DataSource dataSource){
        LocalSessionFactoryBean sfb = new LocalSessionFactoryBean();
        sfb.setDataSource(dataSource);
        //使用PackagesToScan属性告诉Spring要扫描一个或多个包以查找域类,这些类通过主机的方式表明
        //要使用Hibernate进行持久化,这些类可以使用的注解包括JPA的@Entity或@MappedSuperclass以及Hibernate的@Entity。
        sfb.setPackagesToScan(new String[] {
  "com.sh.domin"});
        Properties properties = new Properties();
        properties.setProperty("dialect", "org.hibernate.dialect.MySQLDialect");
        sfb.setHibernateProperties(properties);
        return sfb;
    }

1.2构建不依赖于Spring 的hibernate代码

使用上下文Session.

@Repository
public class HibernateRepository {
   

    @Autowired
    private SessionFactory sessionFactory;//注入SessionFactory

    public Session currentSession(){
        return sessionFactory.getCurrentSession();//从SessionFactory众获取当前Session
    }

    @Transactional
    public List<User> list(){
        //使用当前Session查询user表中的所有数据方法list集合中
        return (List<User>)currentSession().createCriteria(User.class).list();
    }
}

实体User:

@Entity()
@Table(name="user")
public class User implements Serializable {
   

    private static final long serialVersionUID = -4869287368065710953L;

    @Id
    private int id;
    private String username;
    private String password;
    private int sex;

    @Column(name="id",nullable=false)
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    @Column
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值