hibernate,作为一款全自动化的ORM框架,将原本需要通过JDBC的包括获取连接,创建statement,传入sql语句,设置参数,封装结果集以及释放连接等一系列操作进行了封装 和简化,其次,用户只要简单的配置POJO类,就能自动完成对象与数据库表的映射。在一些简单的数据库操作中,可以直接调用hibernate提供的API就能根据不同数据库生成相应的sql语句进行执行,得到想要的结果。
hibernate中,hibernate.cfg.xml文件是用来配置数据库连接,二级缓存,sql打印输出,持久化类等一系列hibernate环境属性。持久类的hbm.xml文件是用来配置对象与数据库表的映射关系 ,可以利用注解来替换该配置文件。
以下是我在简单的一个demo中的hibernate.cfgxml
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 配置数据源 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_demo1</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<!-- 数据库方言 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<!-- 输出sql语句 -->
<property name="show_sql">true</property>
<!--数据库连接池的大小 -->
<property name="hibernate.connection.pool_size">2</property>
<!-- 设置使用jdbc事务 -->
<property name="hibernate.current_session_context_class">thread</property>
<!-- 二级缓存 sessionFactory级别 -->
<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
<property name="hibernate.cache.use_second_level_cach">false</property>
<!-- 配置持久化类 -->
<mapping class="pojo.User" />
<!-- <mapping resource="user.hbm.xml"/>-->
</session-factory>
</hibernate-configuration>
持久化类User(用注解代替了hbm.xml配置文件)
@Entity
@Table(name="user")
@Cache(usage=CacheConcurrencyStrategy.READ_ONLY)
public class User {
@Id
@GenericGenerator(name="nativeGenerator",strategy="native")
@GeneratedValue(generator="nativeGenerator")
private Integer id;
private String username;
private String password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
测试代码:查询id为1的用户
private Session session;
@Before
public void before(){
//加载配置文件
Configuration configuration=new Configuration();
configuration.configure("hibernate.cfg.xml");
ServiceRegistry registry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
SessionFactory sessionFactory = configuration.buildSessionFactory(registry);
session = sessionFactory.getCurrentSession();
}
@Test
public void selectOne(){
session.beginTransaction();
User user=(User)session.get(User.class, 1);
System.out.println(user);
session.getTransaction().commit();
}
执行selectOne方法后,控制台打印出来的结果如下:
Hibernate: select user0_.id as id1_0_0_, user0_.password as password2_0_0_, user0_.username as username3_0_0_ from user user0_ where user0_.id=?
User [id=1, username=xiaoyu, password=123456]
hibernate学习之1先到这里~~!!!