oracle总结

1.oracle
创建数据库 创建表 添加约束 ...
用户名,,模式,表空间,序列,同义词,索引,分区表,权限关系
视图,游标,存储过程,异常处理,pl/sql编程
--0.启动监听器服务和oracle数据库服务
lsnrctl start --启动监听器
net start OracleServiceACCP --启动数据库服务

--1.如果不知道用户名密码 可以使用数据库管理员权限登录
sqlplus / as sysdba --在控制台
--2.修改指定用户名的密码
alter user system identified by accp;
--3.自己新建一个账户
create user shuaige identified by 123456;
--4.给新用户授权
grant connect,resource to shuaige;
--从scott用户下复制dept emp表
grant all on scott.dept to shuaige;
grant all on scott.emp to shuaige;

--5.创建表 添加约束 添加数据
create table emp as select * from scott.emp;

create table dept as select * from scott.dept;

create table dept(
deptno number(2) not null primary key,
dname varchar2(20) not null,
loc varchar2(20) not null
);
--删除表
drop table dept;

--添加约束
alter table dept add constraint PK_deptno primary key(deptno);
alter table emp add constraint PK_empno primary key(empno);
alter table emp add constraint FK_deptno foreign key(deptno) references DEPT(deptno);

--6.数据的操作(增 删 该 查)
--6.1查询
select * from emp;
select * from dept;
--6.2删除
delete emp where empno=7369;
--6.3添加
insert into dept values(50,'研发部','深圳');
--6.4修改
update dept set dname='财务部' where deptno=50;
2.Hibernate
2.1.搭建Hibernate开发环境
1.添加Hibernate jar包
2.创建hibernate.cfg.xml配置文件
3.创建实体类以及*.hbm.xml映射文件
session进行数据的增删改查操作 在进行增删改时必须开启事务Transaction
Hibernate中java对象的三种状态
2.2hql查询:hql语句是针对类的查询 可以进行数据的删除 修改 查询操作 但是不能新增
hql语句的其他操作 分组 使用聚合函数 连接 排序都一样
分页查询:
setFristResult()
setMaxResult()
uniqueResult() 唯一查询
投影查询:只查询实体类中部分属性对应的数据
1.只是一列 可以采用对应数据类型的泛型集合
2.多列:1.使用Object[]数组 2.通过构造函数封装对象
hql查询使用步骤:
import org.hibernate.*;
1.获取session
Session session = new Configuration().configure().buildSessionFactory().openSession();
2.编写Hql语句
String hql = "from Dept";
3.获取Query对象
Query query = session.createQuery(hql);
4.获取数据
query.list();
query.iterator();
5.关闭session
session.close();
2.3关联映射
多对一:
主键映射:需要将一个表中的主键作为另一种表主键的外键 设置既是主键又是外键的那种表 对应主键生成策略为foreign
唯一外键:将一张表的主键在另一张表中为外键,并且这个外键是唯一的(这一列的值都是唯一的) 添加unique=true
一对多:
多对多: 双方实体类中都有对方的集合 映射文件中就是<many-to-many>
关键就是在bag/set中添加一个table属性 设置中间表(关系表)
一对一:
核心思想:关键就是找到一方和多方
找到一方 在一方的实体类中添加多方的集合 映射文件中就是<one-to-many>
找到多方 在多方的实体类中添加一方的实体属性 映射文件中就是<many-to-one>

组件映射:
设置:一般对一方设置为cascade 多方设置inverse=false
懒加载:lazy=true
立即加载:lazy=false
使用懒加载时,只根据当前需要的数据进行查询 可能只查询一次
使用立即加载,将所有相关的数据都一次性的查找出来, 可能查询多次
为了不要每次都进行session的开关以及事务的开关,此时引入了openSessionInView
openSessionInView通过Filter实现的
fetch的设置:select/join
join表示采用连接查询 只有当使用OID查询时才有效
迫切连接和普通连接的区别:
迫切左外连接: 特点是:如果左表有不满足条件的,也返回左表不满足条件
1. LEFT JOIN FETCH 关键字表示迫切左外连接检索策略.
2. list() 方法返回的集合中存放实体对象的引用, 每个 Department 对象关联的 Employee 集合都被初始化,
存放所有关联的 Employee 的实体对象.
3. 查询结果中可能会包含重复元素, 可以通过一个 HashSet 来过滤重复元素
左外连接:
1. LEFT JOIN 关键字表示左外连接查询.
2. list() 方法返回的集合中存放的是对象数组类型
3. 根据配置文件来决定 Employee 集合的检索策略.
4. 如果希望 list() 方法返回的集合中仅包含 Department 对象,
可以在HQL 查询语句中使用 SELECT 关键字
迫切内连接: 特点是:不返回左表不满足条件
INNER JOIN FETCH 关键字表示迫切内连接, 也可以省略 INNER 关键字
list() 方法返回的集合中存放 Department 对象的引用, 每个 Department
对象的 Employee 集合都被初始化, 存放所有关联的 Employee 对象

内连接:
INNER JOIN 关键字表示内连接, 也可以省略 INNER 关键字
list() 方法的集合中存放的每个元素对应查询结果的一条记录, 每个元素都是对象数组类型
如果希望 list() 方法的返回的集合仅包含 Department 对象, 可以在 HQL 查询语句中使用 SELECT 关键字

2.4二级缓存
Hibernate支持二级缓存,但是不提供
使用二级缓存,需要使用第三方的组件,比如OSCache EhCache...
1.导入第三方组件的jar包
2.在hibernate.cfg.xml中启用二级缓存,以及制定二级缓存提供者
<!-- 启用二级缓存 -->
<property name="hibernate.cache.use_second_level_cache">true</property>
<!-- 指定二级缓存提供者 -->
<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
<!-- <property name="hibernate.cache.provider_class">org.hibernate.cache.OSCacheProvider</property> -->
<!-- 启用查询缓存 查询缓存依赖于二级缓存-->
<property name="hibernate.cache.use_query_cache">true</property>
3.指定要缓存的数据
在相应的实体类对应的hbm.xml映射文件中 class标签下添加<cache usage="read-only"/>
注意:
二级缓存默认支持OID查询
当使用hql查询时必须要开启查询缓存 并且在进行查询时需要设置query.setCacheable(true)
2.5Hibernate查询方式
OID查询 session.get()|session.load()
HQL查询 query session.createQuery()
原生SQL查询 sqlQuery session.createSqlQuery()
命名查询 session.getNamedQuery()
criteria查询 session.createCriteria()
2.6注解
1.持久化
@Entity
@Table
@Id
@GeneratorValue
@SequenceGenerator | @genericGenerator
@Column
@Transient
2.映射关系
@OneToOne
@ManyToMany
@OneToMany
@ManyToOne
@JoinColumn(name="deptno")



















 

posted @ 2017-03-06 23:57  林新i  阅读(233)  评论(0编辑  收藏  举报