Hibernate 入门案例
1. Maven创建Web工程
在Eclipse中使用Maven创建Web工程。
2. 引入依赖
在pom.xml中引用Hibernate核心包 + MySQL数据库驱动包:
<!--依赖关系-->
<dependencies>
<!--1.引用MySQL依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!--2.引用Hibernate依赖-->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
</dependencies>
3. 创建核心配置文件
在src或resource文件夹下创建Hibernate框架核心配置文件:hibernate.cfg.xml
创建hibernate.cfg.xml文件有两种方式:一种通过JBoss插件,一种手写(推荐)
4. 创建持久化类(实体类)
持久化——即将数据永久保存在存储介质上(硬盘)。
创建持久化的类,就是创建实体类(JavaBean),私有化属性、公开set/get方法,并实现序列化。
public class User implements Serializable{
private static final long serialVersionUID = 1L;
private Integer userId;
private String userName;
private String passWord;
private Date regDate;
……
// 省略set和get方法
}
5. 创建持久化类的映射文件
在持久化类的同包或resource文件夹中创建持久化类的映射文件,对象关系映射文件名:类名.hbm.xml。
如:User.hbm.xml。
<!--配置类和表的映射关系-->
<hibernate-mapping package="com.zking.ssh.pojo">
<!--class表示类,name代表实体类的全路径或类名,table代表映射的数据库表名-->
<class name="User" table="T_USER">
<!--1.设置主键及主键策略 -->
<id name="userId" column="USER_ID" type="java.lang.Integer">
<generator class="native" />
</id>
<!-- 2. 实体类属性:
name表示实体类属性;
type 表示属性类型全路径名或类名,如果是基本类型,直接写类型名或包装类
Column中name表示对应表中的列名
-->
<property name="userName" column="USER_NAME" type="java.lang.String"/>
<property name="passWord" column="PASS_WORD" type="java.lang.String"/>
<property name="regDate" column="REG_DATE" type="java.lang.Date"/>
<!-- 3. 配置对象之间的关联关系(重点)一对一、一对多、多对一、多对多-->
</class>
</hibernate-mapping>
6. 编写访问数据库的代码
6.1.Junit的写法
public class HibernateTest {
private SessionFactory sessionFactory;
private Session session;
private Transaction transaction;
@Before
public void init(){
Configuration configuration = new Configuration().configure();
sessionFactory = configuration.buildSessionFactory();
session = sessionFactory.openSession();
transaction = session.beginTransaction();
}
@After
public void destory(){
transaction.commit(); //当test()执行完无异常则执行after()进行提交
session.close(); //关闭资源
sessionFactory.close();
}
@Test
public void test() {
//1. 添加
News news = new News(“新闻标题”, “hibernate你大爷”, new Date());
session.save(news);
//2. 删除
News news = session.get(News.class, new Integer(1));
session.delete(news);
//3. 修改
//加载要修改的数据
News news = session.get(News.class, new Integer(2));
//修改数据
news.setAuthor("习大大"); //修改对象的值,即修改数据库中对象
session.update(news);
//4. 查询
News news = session.get(News.class, 1); // 1代表主键标识的值,也就是id为1
System.out.println(news.getAuthor());
}
}
注: 若忘记在 hibernate.cfg.xml文件中配置 News.hbm.xml 文件,则报org.hibernate.InvalidMappingException: Unable to read XML
注意:如果出现错误,主要是在hibernate.cfg.xml配置文件和mapper映射文件。
尝试指定加载new Configuration().configure(“hibernate.cfg.xml”)
错误:Field ‘id’ doesn’t have a default value
解决:数据库设置id自动增长,因为主键策略是native。