一、hibernate是属于ORM(Object Relational Mapping)框架的一员,它代替的是JavaEE中dao层,以操作实体类来代替操作数据库的操作,也就是CRUD操作。其底层就是对JDBC的封装。
二、说一下hibernate的使用步骤吧
- 首先导入jar包
- 编写实体类
- 编写实体类的映射文件
- 编写核心配置文件(主配置文件)
- 最后就是对数据库的操作了
三、详细介绍一下使用步骤
- 1.导入jar包
- 这个是hibernate的jar包,此外我们还需要导入一个mysql的jar包
- 这里记得要添加“小奶瓶哦!”
- 2.编写实体类就是简单的一个Java类了,并生成其属性的get和set方法
- 3.编写实体类的映射文件
- 此处推荐将实体类的映射文件就放在实体类的包中,并且名字和实体类的名字保持一致,其后缀名必须是.hbn.xml。
-
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <!-- 将实体类与数据库进行连接,class中的name是我们的实体类的类路径,而table就是实体类在数据库中的表名 --> <class name="com.czw.domain.Monkey" table="monkey"> <!-- 设置主键,name是实体类中的自己设置的属性值,而column是数据库中表的字段名,可以不写,不写默认就是实体类中的属性名 --> <id name="m_id" column="mm_id"> <!-- 设置主键的增长方式,有多种算法,我们选择nayive,它是identity、hilo和sequence的集合,会从这三种算法中自动选择 --> <generator class="native"></generator> </id> <!-- 设置字段,property中也可以将 写column, --> <property name="m_name" column="mm_name"></property> <property name="m_age"></property> <property name="m_sex"></property> </class> </hibernate-mapping>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>可以在我们导入的jar包中寻找 -
这是其位置,找到后直接复制放到,实体类的映射文件中即可
-
-
接着我们就可以按照上面的代码进行配置了。
-
4.编写核心配置文件
-
这里需注意的一点就是是这个主配置文件必须放在src目录下,并且其名字必须为hibernate.cfg.xml。注意和实体类映射文件进行区分。详细的解释在代码里都有,可以仔细看看代码哟!
-
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/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:///coding</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">root</property> <!-- 对hibernate的配置 --> <property name="hibernate.show_sql">true</property> <property name="hibernate.format_sql">true</property> <property name="hibernate.hbm2ddl.auto">update</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property> <!-- 将Monkey.hbm.xml与hibernate.cfg.xml相连接 --> <mapping resource="com/czw/domain/Monkey.hbm.xml"/> </session-factory> </hibernate-configuration>
-
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">这个和实体类的映射文件配置一样,下面的是其位置,直接复制并放在我们的配置文件中即可。 -
-
5.对数据库的操作
-
这个我们可以在一个测试类中写,其代码如下:
-
import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.junit.Test; import com.czw.domain.Monkey; public class MonkeyTest { @Test public void add(){ //1.获取配置文件对象 Configuration config=new Configuration().configure(); //2.构建sessionFactory SessionFactory factory = config.buildSessionFactory(); //3.生产session -->可以理解为jdbc里的Connection Session session=factory.openSession(); //4.开启事务 Transaction beginTransaction = session.beginTransaction(); //5.进行数据库操作 Monkey monkey=new Monkey(); monkey.setM_name("jack"); monkey.setM_age(6); monkey.setM_sex("雄性"); //将对象的状态从瞬时态转变为持久态 session.save(monkey); //6.事务提交或回滚 beginTransaction.commit(); // beginTransaction.rollback(); //7.释放资源 session.close(); factory.close(); } }
其运行结果为
-
其他的操作也是可以的
-
-
@Test public void update(){ //1.获取配置文件对象 Configuration configure = new Configuration().configure(); //2.获取session工厂 SessionFactory factory = configure.buildSessionFactory(); //3.生产session Session session = factory.openSession(); //4.开始事务 Transaction transaction = session.beginTransaction(); //5.对数据库的操作 Monkey monkey=session.get(Monkey.class, 1); monkey.setM_name("Alice"); monkey.setM_sex("女"); session.saveOrUpdate(monkey); //6.事务提交或回滚 transaction.commit(); //7.关闭资源 session.close(); factory.close(); }
还有
好了,这个简单的hibernate 的入门介绍就差不多了,看完的同学是否觉得测试类中的某些代码写的很冗余呢,是否可以写一个工具类进行简化代码呢?