前言
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):该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等。
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)事务四个特性
原子性、一致性、隔离性、持久性
原子性: 事务要么都执行要么都不执行,不可分割的工作单位(一个成功一个失败结果失败)
一致性:事务操作前后数据总量不变。
隔离性:多个事务操作同一条记录,相互之间没有影响。
持久性:事务提交,对数据库的改变是永久的,不会因为数据库系统故障而丢失提交的事务。