hibermysql 映射 mysql restrict_5Hibernate配置及使用方法----青软S2SH(笔记)

关于hibernate的简单配置,先看结构图,我们需要

1.还要弄一下需要的 jar包.

2.配置两个文件(hibernate配置文件和映射文件),不过映射文件可以用注解替代.

3.写一个pojo类,写一个示例demo

825543229b4c36665e5d0ee6e230ff0b.png

79645eb063efccde015e787933c9f891.png

下载的完整版的压缩包,解压后,lib里有一个required,这个基本就是需要的jar包,如果有别的需求再另加.

另外,这里边没有连接数据库的包(比如连接mysql的mysql-connector-java-5.1.36-bin.jar),需要自己下载.

如下图,我用的是目前的最新版,5.2.3

a5f3336f7bb9623aa4eb7cac0d2a39e4.png

2.建立项目,建立配置文件

hibernate.cfg.xml,放在src下面,

这一步看情况而定,但是建议用注解的方式

如果你是用xml配置映射的POJO,那么就用这种形式

如果你是用注解配置映射的POJO,那么就用这种形式

如果你是用的5.2.6版本,那么也可以不用配置映射,直接在代码里指定就可以.

org.hibernate.dialect.MySQLDialect

com.mysql.jdbc.Driver

jdbc:mysql://127.0.0.1:3306/hibTest

root

password

true

update

3.demo

例子有好多个,主要如第二步的配置文件的形式分成三类,

第一类:用xml配置ORM映射,这个映射文件一般放到相应的POJO所在的包下面

在hibernate.cfg.xml里配置如下

/p>

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

此时pojo就是平常的类,没啥改动,额,得序列化

package com.qst.chapter05.pojos;

import java.io.Serializable;

public class User implements Serializable {

/* 用户ID */

private Integer id;

/* 用户名 */

private String userName;

/* 密码 */

private String userPwd;

/* 权限 */

private Integer role;

/* 默认构造方法 */

public User() {

}

/* 根据属性创建 构造方法 */

public User(String userName, String userPwd,Integer role) {

this.userName = userName;

this.userPwd=userPwd;

this.role=role;

}

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getUserName() {

return userName;

}

public void setUserName(String userName) {

this.userName = userName;

}

public String getUserPwd() {

return userPwd;

}

public void setUserPwd(String userPwd) {

this.userPwd = userPwd;

}

public Integer getRole() {

return role;

}

public void setRole(Integer role) {

this.role = role;

}

}

第二类:用注解配置ORM映射,这种形式只需要hibernate.cfg.xml一个配置文件就好.

在hibernate.cfg.xml里配置如下

不需要xxx.hbm.xml

packagecom.qst.chapter05.pojos;importjava.io.Serializable;importjavax.persistence.Column;importjavax.persistence.Entity;importjavax.persistence.GeneratedValue;importjavax.persistence.GenerationType;importjavax.persistence.Id;importjavax.persistence.Table;

@Entity

@Table(name="test_Ano")public class TestAno implementsSerializable {/****/

private static final long serialVersionUID = -2018875535473489473L;/*用户ID*/@Id

@GeneratedValue(strategy=GenerationType.IDENTITY)

@Column(name= "id", insertable = false, updatable = false)privateInteger id;/*用户名*/@Column(name= "user_name")privateString userName;/*密码*/@Column(name= "user_pwd")privateString userPwd;/*权限*/@Column(name= "role")privateInteger role;/*默认构造方法*/

publicTestAno() {

}/*根据属性创建 构造方法*/

publicTestAno(String userName, String userPwd,Integer role) {this.userName =userName;this.userPwd=userPwd;this.role=role;

}publicInteger getId() {returnid;

}public voidsetId(Integer id) {this.id =id;

}publicString getUserName() {returnuserName;

}public voidsetUserName(String userName) {this.userName =userName;

}publicString getUserPwd() {returnuserPwd;

}public voidsetUserPwd(String userPwd) {this.userPwd =userPwd;

}publicInteger getRole() {returnrole;

}public voidsetRole(Integer role) {this.role =role;

}

}

好了,配置就上面这些,下面看如何使用hibernate来往数据库倒数据,额,就是如何获取SessionFactory

而如何配置,无论是用注解还是xml,对调用时没影响,所以,注解跟xml是可以混用的(一般不建议这麽做,当然,一般也没机会这么做,毕竟这些一般都有要用到spring整合的,单独用hibernate的机会比较少).

下面看是一个传统的获取SessionFactory的方式,这个方式适应于4.3版本,如果用到是版本5以上,那么这方法会出现找不到映射对象的错误,

public static voidmain(String[] args) {//创建User对象

User user = new User("zhangsan", "123", 1);//实例化Configuration

Configuration configuration = newConfiguration();//加载hibernate.cfg.xml文件

configuration.configure("/hibernate.cfg.xml");//创建SessionFactory//Hibernate4.3创建SessionFactory的方式

StandardServiceRegistryBuilder standardServiceRegistryBuilder = new StandardServiceRegistryBuilder();

standardServiceRegistryBuilder.applySettings(configuration

.getProperties());

SessionFactory sessionFactory = configuration

.buildSessionFactory(standardServiceRegistryBuilder.build());//打开Session

Session session =sessionFactory.openSession();//开始一个事务

Transaction trans =session.beginTransaction();//持久化操作

session.save(user);//提交事务

trans.commit();//关闭Session

session.close();

}

hibernate5版本以上,用以下方式,就一行代码,不过这个方法被hibernate5.2.6里弃用了,当然,用也不会报错.

SessionFactory sessionFactory = new Configuration().configure("/hibernate.cfg.xml").buildSessionFactory();

当然,如果也可以不指定配置/hibernate.cfg.xml,代码如下

SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();

而hibernate会默认去寻找/hibernate.cfg.xml

public static voidmain(String[] args) {//创建User对象

TestAno testAno = new TestAno("555553", "123", 1);//实例化Configuration//Configuration configuration = new Configuration();//加载hibernate.cfg.xml文件//configuration.configure("/hibernate.cfg.xml");//创建SessionFactory//Hibernate4.3创建SessionFactory的方式//StandardServiceRegistryBuilder standardServiceRegistryBuilder = new StandardServiceRegistryBuilder();//standardServiceRegistryBuilder.applySettings(configuration//.getProperties());//SessionFactory sessionFactory = configuration//.buildSessionFactory(standardServiceRegistryBuilder.build());

@SuppressWarnings("deprecation")

SessionFactory sessionFactory= new Configuration().configure("/hibernate.cfg.xml").buildSessionFactory();//打开Session

Session session =sessionFactory.openSession();//开始一个事务

Transaction trans =session.beginTransaction();//持久化操作

session.save(testAno);//提交事务

trans.commit();//关闭Session

session.close();

}

在5.2.6里,用以下方式,这种方式不需要在hibernate.cfg.xml中配置ORM映射,可以直接在代码里指定

.addAnnotatedClass( HiberNew.class )

因为用这个方法,类名可以直接从方法里用反射获取,写代码时就会灵活很多.

public static voidmain(String[] args) {//创建User对象

HiberNew hiberNew = new HiberNew("hiber5.2.6", "1", 1);//实例化Configuration//Configuration configuration = new Configuration();//加载hibernate.cfg.xml文件//configuration.configure("/hibernate.cfg.xml");//创建SessionFactory//Hibernate4.3创建SessionFactory的方式//StandardServiceRegistryBuilder standardServiceRegistryBuilder = new StandardServiceRegistryBuilder();//standardServiceRegistryBuilder.applySettings(configuration//.getProperties());//SessionFactory sessionFactory = configuration//.buildSessionFactory(standardServiceRegistryBuilder.build());

StandardServiceRegistry standardRegistry = new StandardServiceRegistryBuilder()

.configure( "hibernate.cfg.xml" )

.build();

Metadata metadata = new MetadataSources( standardRegistry )

.addAnnotatedClass( HiberNew.class ).getMetadataBuilder()

.applyImplicitNamingStrategy( ImplicitNamingStrategyJpaCompliantImpl.INSTANCE )

.build();

SessionFactory sessionFactory = metadata.getSessionFactoryBuilder().build();//打开Session

Session session =sessionFactory.openSession();//开始一个事务

Transaction trans =session.beginTransaction();//持久化操作

session.save(hiberNew);//提交事务

trans.commit();//关闭Session

session.close();

}

总结一下:

82e44fea275f6acf76bdd2f6d0c027fd.png

8184b6105b1fc53b02d18dec613326c4.png

由于方法较多,上面例子已经写得很清楚,这里就不再重复了.

当我们已经获取了session之后,就可以进行数据库操作了,session的使用方式如下:

268fa4b26b8e6f7d67d363f392347b2a.png

1.使用事务,直接用session进行持久化操作

a37e5603c4fa499d9e1718b17ad28a95.png

//打开Session

Session session =sessionFactory.openSession();//开始一个事务

Transaction trans = session.beginTransaction();//持久化操作

session.save(user);//提交事务

trans.commit();//关闭Session

session.close();

5978c7ed822a6556bd0bbc948a1a3974.png

0c5320bf5183854c8d6e3b7d789081f4.png

2.使用Query接口

Query query = session.createQuery("from User");

//打开Session

Session session =sessionFactory.openSession();//开始一个事务

Transaction trans =session.beginTransaction();//查询Customer表

Query query = session.createQuery("from User");//执行查询

List list =query.list();//遍历输出

for(User u : list) {

System.out.println(u.getId()+ "\t" + u.getUserName() + "\t"

+ u.getUserPwd() + "\t" +u.getRole());

}//提交事务

trans.commit();//关闭Session

session.close();

6a16dfe324821ab47606e5f33601fbe4.png

3.使用Criteria接口

//打开Session

Session session =sessionFactory.openSession();//开始一个事务

Transaction trans =session.beginTransaction();//创建一个Criteria查询对象,查询Student类的所有对象

Criteria criteria = session.createCriteria(Student.class);//执行查询

List list = criteria.list();//遍历输出

for(Student stu : list) {

System.out.println(stu.getId()+ "\t" + stu.getName() + "\t"+stu.getScore());

}//提交事务

trans.commit();//关闭Session

session.close();

因为不能每次都这么调用session,所以写一个工具类来产生session,这个例子用的是单例模式,但是没实现线程安全

packagecom.qst.chapter06.util;importorg.hibernate.HibernateException;importorg.hibernate.Session;importorg.hibernate.SessionFactory;importorg.hibernate.boot.registry.StandardServiceRegistryBuilder;importorg.hibernate.cfg.Configuration;public classHibernateUtils {private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";private static final ThreadLocalthreadLocal= new ThreadLocal();private static Configuration configuration = newConfiguration();private static StandardServiceRegistryBuilder standardServiceRegistryBuilder = newStandardServiceRegistryBuilder();private staticSessionFactory sessionFactory;private static String configFile =CONFIG_FILE_LOCATION;/*静态代码块创建SessionFactory*/

static{try{

configuration.configure(configFile);//Hibernate4.3创建SessionFactory的方式

standardServiceRegistryBuilder.applySettings(configuration.getProperties());

sessionFactory=configuration.buildSessionFactory(standardServiceRegistryBuilder.build());

}catch(Exception e) {

System.err.println("%%%% Error Creating SessionFactory %%%%");

e.printStackTrace();

}

}privateHibernateUtils() {

}/*** 返回ThreadLocal中的session实例*/

public static Session getSession() throwsHibernateException {

Session session=(Session) threadLocal.get();if (session == null || !session.isOpen()) {if (sessionFactory == null) {

rebuildSessionFactory();

}

session= (sessionFactory != null) ?sessionFactory.openSession()

:null;

threadLocal.set(session);

}returnsession;

}/*** 返回Hibernate的SessionFactory*/

public static voidrebuildSessionFactory() {try{

configuration.configure(configFile);

sessionFactory=configuration.buildSessionFactory(standardServiceRegistryBuilder.build());

}catch(Exception e) {

System.err.println("%%%% Error Creating SessionFactory %%%%");

e.printStackTrace();

}

}/*** 关闭Session实例并且把ThreadLocal中副本清除*/

public static void closeSession() throwsHibernateException {

Session session=(Session) threadLocal.get();

threadLocal.set(null);if (session != null) {

session.close();

}

}/*** 返回SessionFactory*/

public staticSessionFactory getSessionFactory() {returnsessionFactory;

}public static voidsetConfigFile(String configFile) {

HibernateUtils.configFile=configFile;

sessionFactory= null;

}public staticConfiguration getConfiguration() {returnconfiguration;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值