zoukankan      html  css  js  c++  java
  • SpringBoot整合Hibernate

    编写配置文件

     1 <!--配置读取properties文件-->
     2 <context:property-placeholder location="classpath:jdbc.properties"/>
     3 <!--配置c3p0数据库连接池-->
     4 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
     5     <property name="jdbcUrl" value="${jdbc.url}" />
     6     <property name="driverClass" value="${jdbc.driver.class}" />
     7     <property name="user" value="${jdbc.username}" />
     8     <property name="password" value="${jdbc.password}" />
     9 </bean>
    10 <!--配置Hibernate的SessionFactory-->
    11 <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
    12     <property name="dataSource" ref="dataSource" />
    13     <!--hibernateProperties属性:显示sql语句,开启正向工程等等-->
    14     <property name="hibernateProperties">
    15         <props>
    16             <!--显示当前执行的sql语句-->
    17             <prop key="hibernate.show_sql">true</prop>
    18             <!--开启正向工程-->
    19             <prop key="hibernate.hbm2ddl.auto">update</prop>
    20         </props>
    21     </property>
    22     <!--扫面实体所在的包-->
    23     <property name="packageToScan">
    24         <list>
    25             <value>io.guangsoft.pojo</value>
    26         </list>
    27     </property>
    28 </bean>
    29 <!--配置hibernate事物管理器-->
    30 <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
    31     <property name="sessionFactory" ref="sessionFactory" />
    32 </bean>
    33 <!--配置开启注解事物处理-->
    34 <tx:annotation-driven transaction-manager="transactionManager" />
    35 <!--配置springIOC的注解扫描-->
    36 <context:component-scan base-package="io.guangsoft" />
    37 <!--配置HibernateTemplate对象-->
    38 <bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate">
    39     <property name="sessionFactory" ref="sessionFactory" />
    40 </bean>

    编写实体类

     1 @Entity
     2 @Table(name="t_user")
     3 public class User implements Serializable {
     4     @Id
     5     @GeneratedValue(strategy=GenerationType.IDENTITY)
     6     @Column(name="id")
     7     private Integer id;
     8     @Column(name="username")
     9     private String username;
    10     //...set、get方法
    11 }

    dao层编写

     1 @Repository
     2 public class UserDaoImpl implements UserDao {
     3     @Autowired
     4     private HibernateTemplate hibernateTemplate;
     5     @Override
     6     public void insertUser(User user) {
     7         this.hibernateTemplate.save(user);
     8     }
     9     @Override
    10     public void updateUser(User user) {
    11         this.hibernateTemplate.update(user);
    12     }
    13     @Override
    14     public void deleteUser(User user) {
    15         this.hibernateTemplate.delect(user);
    16     }
    17     @Override
    18     public User selectUserById(Integer id) {
    19         return this.hibernateTemplate.get(User.class, id);
    20     }
    21 }

    测试代码

     1 @RunWith(SpringJUnit4ClassRunner.class)
     2 @ContextConfiguration("classpath:applicationContext.xml")
     3 public class UserDaoImplTest {
     4     @Autowired
     5     private UserDao userDao;
     6     @Test
     7     @Transactional//测试类对事物提交方式默认是回滚
     8     @Rollback(false)//取消自动回滚
     9     public void testInsertUser() {
    10         User user = new User();
    11         user.setUsername("呵呵");
    12         this.userDao.insertUser(user);
    13     }
    14     @Test
    15     @Transactional
    16     @Rollback
    17     public void testUpdateUser() {
    18         //...
    19     }
    20 }

    使用HQL,Hibernate Query Language,HQL的语法就是将原来sql语句中的字段名称换成对象与属性的名称。

    1 @Override
    2 public List<User> selectUserByName(String username) {
    3     //getCurrentSession:当前session必须要有事物边界,且只能处理唯一的一个事务,当事务提交或者回滚后session自动失效
    4     //openSession:每次都会打开一个新的session,加入每次使用多次,则获得的是不同session对象,使用完毕后我们需要手动调用close方法关闭session。
    5     Session session = this.hibernateTemplate.getSessionFactory().getCurrentSession();
    6     Query queryTemp = session.createQuery("from User where username = :uname");
    7     Query query = queryTemp.setString("uname", username);
    8     return queryTemp.list();
    9 }

    QBC查询:query by criteria

    1 public List<User> selectUserByNameUseCriteria(String username) {
    2     Session session = this.hibernateTeamplate.getSessionFactory().getCurrentSession();
    3     Criteria criteria = session.createCriteria(User.class);
    4     criteria.add(Restrictions.eq("username", username));
    5     return criteria.list();
    6 }
  • 相关阅读:
    把一元可以分解成几个1毛,2毛,5毛?
    记录集导出到Excel方法
    MySQL数据库加密与解密:
    运行时错误'430': 类不支持自动化或不支持期望的接口。New ADODB.Connection问题
    instrrev 和instr 区别vb
    解决用 VB 中用 ADO 访问 数据库时 SQL 查询处理 Null 值的问题( 使用 iff(isNull(字段), 为空时的值,不为空时的值) 来处理)
    Mysql SQL CAST()函数
    MySQL CAST与CONVERT 函数的用法
    一些网页链接
    git上传时出现ERROR: Repository not found.的解决办法
  • 原文地址:https://www.cnblogs.com/guanghe/p/10974948.html
Copyright © 2011-2022 走看看