Hibernação (a)
O que é Hibernate?
Hibernate framework de mapeamento objeto-relacional é uma fonte aberta, que tinha um pacote muito leve objeto JDBC, ele irá relação de mapeamento POJO com uma tabela de banco de dados, é um totalmente automatizado quadro ORM , hibernate pode gerar automaticamente instruções SQL, automaticamente, de modo que o programador Java pode usar arbitrária pensamento objeto de programação para manipular o banco de dados.
Entendemos a partir de três perspectivas sobre Hibernate:
Um, hibernação mais encapsulamento de JDBC
Quando não utilizar a Hiberante originais fazer persistência desenvolvimento da camada, há um monte de redundância, tais como: vários declaração JDBC, gerenciamento de conexão, portanto, o Hibernate JDBC encapsula o momento, não temos dados operacionais,-lo diretamente irá operar a linha.
Em segundo lugar, novamente a partir do ponto hierárquica de vista
Sabemos arquitectura muito típica de três camadas: camada de apresentação, camada de negócios, bem como a camada de persistência. Hiberante também o enquadramento camada de persistência, mas há um monte de quadro camada de persistência, tais como: ibatis, Nhibernate, JDO, OJB, EJB, e assim por diante.
Três, hibernação é um ORM fonte aberto (mapeamento objeto-relacional) quadro.
ORM, ou seja mapeamento objeto-relacional, o seu papel está entre as bases de dados relacionais e objecto feito um mapa. Mapeamento do objecto (Objecto) a relação (relação), e, em seguida, mapeados para o objecto a partir da relação. Desta forma, quando operar o banco de dados, você não precisa ir e lidar com SQL complexa, desde que a operação do objeto como ele pode operar-se (o campo é mapeado para um atributos de banco de dados relacionais de um objeto na memória). .
O ORM ( objecto relacional o mapeamento ) Quadro metadados entre uma base de dados relacional e um mapa feito objectos. Metadados geralmente usam XML formato, e armazenado em um arquivo de mapeamento objeto dedicado. O ORM ( objecto relacional o mapeamento ) moldura : a hibernação (a Nhibernate) , o iBATIS , MyBatis , o EclipseLink , JFinal . Hibernate é um uso típico xml framework de mapeamento de arquivo descrito como objetos físicos , Metadados : dados que descrevem outros dados ( dados sobre outros dados ), ou estrutura de dados (para informações sobre um recurso de dados estruturados ). |
Recursos da linguagem
Operação do conversor irá operar na base de dados para objetos Java para simplificar o desenvolvimento. Ao modificar um atributo de "persistência" de um objecto para modificar os registos de dados na tabela de base de dados correspondente.
Fios e processos para se obter dois níveis de cache para melhorar o desempenho da aplicação.
Há uma grande variedade de maneiras de converter as relações de mapeamento entre objetos Java para o relacionamento entre as tabelas de banco de dados.
Proteger diferenças entre diferentes implementações de banco de dados. Hibernate só precisa especificar o atualmente usado pelo banco de dados na forma de "línguas", pode gerar instruções SQL para a situação real do banco de dados subjacente.
Não-invasiva: classes persistentes Hibernate não são necessários para implementar qualquer interface ou herdar qualquer classe, POJO pode.
// lê o arquivo de configuração
Configuração conf = nova configuração () configure (.);
// criar a configuração de fábrica
SessionFactory SessionFactory = conf.buildSessionFactory ();
// obter a operação de banco de dados de sessão objetos
Session session = sessionFactory.openSession ();
Ele pode ser visto na Figura, o Hibernate a API um total de 6. , Respectivamente, para : a Sessão , a SessionFactory , a Transação , consulta , Critérios e Configuração .
configuração de classe
Configuração categorias: usado para carregar o arquivo de configuração padrão (o caminho do arquivo as hibernate.properties ).
Chamada para configure () método irá carregar o caminho do arquivo padrão XML formato de arquivo de configuração (hibernate.cfg.xml) é recomendado.
Se o perfil não padrão caminho do arquivo ou o nome do perfil não cumpra a regra padrão pode ser usado
nova configuração (). configure (arquivo ) para carregar o arquivo especificado
nova configuração (). configure (caminho ) para carregar arquivos no caminho especificado
Se propriedades formato de arquivo de configuração, podem ser utilizados . AddClass ( nome da classe entidade .class) método pode carregar arquivos de mapas.
SessionFactory objetos
SessionFactory objetos :
SessionFactory em nome de fonte de armazenamento de dados. De acordo com Hibernate criar o banco de dados correspondente ao perfil de loja de fonte.
SessionFactory Depois que o objeto é criado, e Configuração não objetos associados. Modificar configuração de arquivo de configuração contém informações, não SessionFactory ter qualquer impacto.
Obter SessionFactory objetos:
Configuração new () configure () buildSessionFactory ()..;
objeto de cache é grande, ele é chamado de objeto pesado. SessionFactory armazenados para Hibernate informações de configuração, mapeando informações de metadados. objeto Heavyweight.
sessão objeto
Sessão objetos:
A sessão em nome do programa eo banco de dados. Sessão fornece um método de operar as várias bases de dados. É objetos leves.
Obtém Sessão Objeto
factory.openSession (): obter uma nova sessão instância.
factory.getCurrentSession (): esse método cria a sessão irá remover o segmento atual sessão , usando o subjacente ThreadLocal acesso
save () método : o Java objeto é salvo no banco de dados.
ts transacção = session.beginTransaction (); Usuário u = new User (); u.setName ( "赵 六") u.setPassword ( "123456") // salva o objeto para o banco de dados Session.save (u); ts.commit (); |
update () método: actualizar a abordagem de banco de dados
ts transacção = session.beginTransaction (); // primeiro encontrar o objeto que você deseja modificar, de acordo com os valores de chave primária usuário = session.get (User.class, 1); user.setName ( "jery"); // objeto para atualizar o banco de dados, de acordo com OID Session.update (utilizador); ts.commit (); |
delete () método: método Delete
De acordo com o subjacente OID ser excluído. Há duas maneiras ( 1 ) Transaction ts=session.beginTransaction(); User user=session.get(User.class, 1); //删除指定对象 session.delete(user); ts.commit(); (2) Transaction ts=session.beginTransaction(); User user=new User(); user.setId(2); session.delete(user); ts.commit(); |
load()或get()方法:从数据库查找指定对象
session.get(实体类名.class,OID); 或session.load(实体类名.class,OID); |
load()和get()的区别:
我们使用get查询时发现控制台会立马打出查询语句。
使用load查询时控制台不会打印查询语句。
get方法被调用时立刻发送sql语句到数据库进行查询。
load方法被调用时并没有查询数据库,当我们需要使用查询的对象时,才去查询,所以当我们打印对象时,才会在控制台打印sql语句。
get()的原理
程序调用get方法,Hibernate发送sql语句到数据库
数据库返回结果,Hibernate将结果封装成对象,返回对象到程序。
load()的原理
程序调用load方法,Hibernate使用代理技术,创建一个代理对象,属性只有ID值。
然后返回代理对象给程序,我们使用对象时,代理对象调用Hibernate查询数据库,初始化其他属性。
load方法,返回一个代理对象,获取其属性时,会查询数据库,每次访问属性都会查询数据库么?
答:不是。代理对象中有一个标识是否被初始化的boolean类型变量,记录是否被初始化。
查询所有对象的方法
使用HQL语言(后面会详细介绍),HQL语言是面向对象的
Query query=session.createQuery("from User");
第二种方式
Criteria c=session.createCriteria(User.class);
List<User> l=c.list();
第三种方式,使用原生sql语句进行查询
SQLQuery query=session.createSQLQuery("select * from user");
List l=query.list();
Transaction对象
封装了事务的操作。我们做增删改查等操作时,必须开启事务.
因为session是线程不安全的,这样主要是为了线程安全。保证数据的正确性。
开启事务: Transaction ts=session.beginTransaction();
提交事务:ts.commit();
回滚事务:ts.rollback();
当通过getCurrentSession获取当前线程绑定的Session时,事务关闭时,会自动把Session关闭并删除。
Query对象
封装HQL语句的对象。
返回一个对象的方法 query.uniqueResult();
分页相关
query.setFirstResult(index):从第几个取
query.setMaxResults(count):指定取几行记录
https://blog.csdn.net/Vpn_zc/article/details/82784003(hibernate缓存)
综合自:https://blog.csdn.net/c99463904/article/details/72794787
https://blog.csdn.net/jiuqiyuliang/article/details/39078749