hibernate基础01概述_环境搭建

                                                  前言

1.web内容

(1)javaee三层结构

a.web层/表现层(UI) struts2框架

b.service层/业务逻辑(BLL) spring框架

c.dao层/数据访问(DAL) hibernate框架——对数据库进行crud操作

(2)MVC思想

a.M模型

b.V视图

c.C控制器

(3)区别

三层架构和MVC是有明显区别的,MVC应该是展现模式(三个加起来才是三层架构中的UI层)。

三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为        了“高内聚,低耦合”的思想。

a、表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。   

b、业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。   

c、数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等。 

扫描二维码关注公众号,回复: 2453591 查看本文章

MVC是 Model-View-Controller,严格说这三个加起来才是三层架构中的UI层,MVC把三层架构中的UI层再度进行了分化,     分成了控制器、视图、实体三个部分,控制器完成页面逻辑,通过实体来与界面层完成通话;而C层直接与三层中的BLL进行      对话。

MVC可以是三层中的一个表现层框架。三层和MVC可以共存。 三层是基于业务逻辑来分的,而MVC是基于页面来分的。     MVC主要用于表现层,3层主要用于体系架构,3层一般是表现层、中间层、数据层。

2.hibernate概述

(1)dao层框架

对JDBC进行封装,不需要写sql

开源(免费)的轻量级(单独使用,所需jar包较少)的框架

(2)orm思想:

a.对数据库进行操作

b.实体类

c.object(对象),relational(关系),mapping(映射)

文字描述:

①让实体类和数据库表进行一一对应关系

让实体类首先和数据库表对应

让实体类属性 和 表里面字段对应

②不需要直接操作数据库表,而是操作表所对应实体类的对象

(3)jdbc:

a.加载驱动 Class.forName("");

b.创建连接 Connection conn =

DriverManager.getConnection(url,username,passeord);

c.sql编写 String sql = "select * from user";

PreparedStatement psmt = conn.prepareStatement(sql);

d.执行sql ResultSet rs = psmt .executeQuery();

e.遍历结果集

f.关闭连接

(4)hibernate

在lib下放入jar包

a.实体类

public class User {

private int uid;

private String username;

private String password;

private String address;

//get、set方法

}

 

b.创建实体类对应的配置文件(User.hbm.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="cn.entiey.User" table="t_user">

<!-- column:表名称 -->

<id name="uid" column="uid">

<!-- 设置id增长策略 native:生成表id值就是主键自动自增 -->

<generator class="native"></generator>

</id>

<!-- 其他属性 -->

<property name="username" column="username"></property>

<property name="password" column="password"></property>

<property name="address" column="address"></property>

</class>

</hibernate-mapping>

 

c.创建hibernate配置文件(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>

<!-- 1. 配置数据库信息 -->

<property name="hibernate.connection.driver_class">

com.mysql.jdbc.Driver</property>

<!-- hibday1数据库名称 -->

<property name="hibernate.connection.url">

jdbc:mysql:///hibday1?characterEncoding=utf-8</property>

<property name="hibernate.connection.username">root</property>

<property name="hibernate.connection.password">root</property>

<!--2. 配置hibernate信息 可选的-->

<!-- 输出底层sql语句 -->

<property name="hibernate.show_sql">true</property>

<!-- 输出底层sql语句格式 -->

<property name="hibernate.format_sql">true</property>

<!-- hibernate创建表,需要配置之后

update: 如果已经有表,更新,如果没有,创建

-->

<property name="hibernate.hbm2ddl.auto">update</property>

<!-- 3. 配置数据库方言

在mysql里面实现分页 关键字 limit,只能使用mysql里面

在oracle数据库,实现分页rownum

让hibernate框架识别不同数据库的自己特有的语句

-->

<property name="hibernate.dialect">

org.hibernate.dialect.MySQLDialect</property>

<!-- 4. 把映射文件放到核心配置文件中 -->

<mapping resource="cn/entiey/User.hbm.xml"/>

</session-factory>

</hibernate-configuration>

 

d.测试

public class test {

@Test

public void add() {

// 第一步 加载hibernate核心配置文件

Configuration cfg = new Configuration();

cfg.configure();

// 第二步 创建SessionFactory对象

//读取hibernate核心配置文件内容,创建sessionFactory

//在过程中,根据映射关系,在配置数据库里面把表创建

// SessionFactory sessionFactory = cfg.buildSessionFactory();

SessionFactory sessionFactory = HibernateUtils.getSessionFactory();

// 第三步 使用SessionFactory创建session对象

Session session = sessionFactory.openSession();

// 第四步 开启事务

Transaction tx = session.beginTransaction();

// 第五步 写具体逻辑 crud操作

//添加功能

User user = new User();

user.setUsername("111");

user.setPassword("111");

user.setAddress("111");

//调用session的方法实现添加

session.save(user);

// 第六步 提交事务

tx.commit();

// 第七步 关闭资源

session.close();

sessionFactory.close();

}

}

e.相应的util

public class HibernateUtils {

static Configuration cfg = null;

static SessionFactory sessionFactory = null;

static {

//加载核心配置文件

cfg = new Configuration();

cfg.configure();

sessionFactory = cfg.buildSessionFactory();

}

//提供方法返回sessionFactory

public static SessionFactory getSessionFactory() {

return sessionFactory;

}

}

代码解析:

Configuration

Configuration cfg = new Configuration();

cfg.configure();

1.到src下面找到名称hibernate.cfg.xml配置文件,创建对象,把配置文件放到对象里面(加载核心配置文件)

 

SessionFactory

SessionFactory sessionFactory = HibernateUtils.getSessionFactory();

1 使用configuration对象创建sessionFactory对象

(1)创建sessionfactory过程中做事情:

数据库配置,映射文件部分,到数据库里面根据映射关系把表创建

2 创建sessionFactory过程中,这个过程特别耗资源的

3 具体实现

(1)工具类,静态代码块实现

 

Session

1 session类似于jdbc中connection

2 调用session里面不同的方法实现crud操作

(1)添加 save方法

(2)修改 update方法

(3)删除 delete方法

(4)根据id查询 get方法

3 session属于单线程对象

 

Transaction

1 事务对象

2 事务提交和回滚方法 

3 事务概念

(1)事务四个特性

原子性、一致性、隔离性、持久性

原子性: 事务要么都执行要么都不执行,不可分割的工作单位(一个成功一个失败结果失败)

一致性:事务操作前后数据总量不变。

隔离性:多个事务操作同一条记录,相互之间没有影响。

持久性:事务提交,对数据库的改变是永久的,不会因为数据库系统故障而丢失提交的事务。

猜你喜欢

转载自blog.csdn.net/weixin_42756687/article/details/81239766