第一次课:持久化:就是把瞬时状态的数据转变为持久化状态的数据,这一个过程就是持久化。
(java中内存分为:栈(变量,方法,形参都是在栈上),堆(new出来的对象在堆上))1)瞬时状态:刚new出来,在内存中存在的对象就是瞬时状态的。
如果程序结束,对象就会被回收。
2)持久化状态:在磁盘或者是数据库中存在的数据就是持久状态。
Hibernate是什么?1)是一个优秀的持久化框架,对jdbc进行进一步的封装。
(hibernate,ibatis )。
2)是一个ORM (Object relation mapping ).Mysql,oracle,access 是关系型数据库= hibernate操作的是对象。
使用hibernate的步骤:1)新建项目2)引入jar包(hibernate最少依赖8个jar包)3)新建 hibernate配置文件(hibernate.cfg.xml) ,放在src根目录下面。
用于数据库的配置信息。
<hibernate-configuration><!-- 配置连接信息 --><session-factory><!-- 数据库的驱动类 --><property name="connection.driver_class">com.mysql.jdbc.Driver</property><!-- 配置数据库的用户名 --><property name="ername">root</property><!-- 配置密码 --><property name="connection.password">abc</property><!-- 配置数据库的url --><property name="connection.url">jdbc:mysql:///fwcz</property><!-- 配置数据库方言 --><property name="dialect">org.hibernate.dialect.MySQLDialect</property><!-- 自动建表第一次使用的时候,设置create,表建成之后,设置为update --><property name="hbm2ddl.auto">create</property></session-factory></hibernate-configuration>4)写bean/vo类,并且编写映射文件。
<hibernate-mapping package="com.hibernate.bean"><!--class name属性表示的是类名 --><class name="User" table="tbl_user"><!-- 表示主键 id name属性代表的是类中的属性 column表示的是字段名--><id name="id" column="uid"><!-- 主键的生成方法 sequence 代表oracle的序列,increment myql 中的自动增长,native 本地的,表示的是hibernate根据数据库自动选择 --><generator class="native"></generator></id><!-- 配置剩余的属性 --><property name="name" column="uname"></property><property name="pass" column="upass"></property></class></hibernate-mapping>5)将映射文件添加到hibernate.cfg.xml文件中<mapping resource=”com/hibernate/bean/User.hbm.xml”/>6)数据测试://向数据库中添加一条数据//1.读取配置文件Configuration cfg = new Configuration().configure();//2.创建一个工厂SessionFactory factory = cfg.buildSessionFactory();//3.获得session (是一个连接对象 Connection)Session session = factory.openSession();//4.开始事务Transaction tx = session.beginTransaction();//5.添加用户User u = new User();u.setName("admin");u.setPass("123");session.save(u);//保存对象//6.提交事务mit();//7.关闭session.close();Hibernate操作数据库的几个对象:1)Configuration:Configuration cfg = new Configuration().configure(); 读取文件名为hibernagte.cfg.xml 文件中的信息//如果修改过配置文件名称Configuration cfg = new Configuration().configure(“配置文件名”);2)SessionFactory:用于产生Session的工厂类,耗费大量的资源。
一个项目中只存在一个。
cfg.buildSessionFactory();3)Session类:jsp/servlet中的session代表的是浏览器一次会话。
而hibernate中的Session,代表的是程序与数据库之间的链接。
相当于 Connection。
Session session = facory.openSession(); //打开一个新的session连接。
一定要关闭4)Transaction: 代表的是事务。
对数据库的一次操作,要么都成功,要么都失败Transation tx = session.beginTransaction();mit();//事务提交添加用户save : User u = new User();u.setName("admin1111");u.setPass("123");session.save(u);//保存对象查询用户:get() /load();User u = (User)session.get(User.class,1); //查询id号为1的用户//立即发送sql语句,然后返回一个对象User u = (User)session.load(User.class,1);//没有发送sql语句,先到hibernate 缓存中查。
如果没有使用User对象(u.setName(),u.getName()),不会发送sql语句。
懒加载。
删除用户:User u = (User)session.get(User.class,1); //获得id号为1的数据session.delete(u);修改用户: 1) User u =new User();u.setId(2);u.setName("admin");session.update(u);2)//先查询id号为2的数据User u = (User)session.get(User.class,3); //对象此时存在于数据库,内存中也有,缓存也有u.setPass("mmmmmmmmmmmmmm");添加或者修改: saveOrUpdate()User u = new User();u.setId(2);u.setName("张三");u.setPass("aaaa");session.saveOrUpdate(u); //用于修改,也可以用于添加hibernate注解(annotation):1.导入完整的jar包(20个)2.编写bean类://在与表对应的那个bean类上加注解@Entity//表示一个实体类,与数据库中的某一张表对应@Table(name="tbl_user") //指定实体类对应的表名public class User implements Serializable{ //建议implements Serializableprivate int id;//编号private String name;private String pass;//对应主键,在属性的get方法上面@Id//代表主键@Column(name="uid") //配置主键,对应数据库中的uid这一列, 如果属性名和列名相同的情况下如果主键是使用native @GeneratedValue(strategy = GenerationType.)可以省略public int getId() {return id;}public void setId(int id) {this.id = id;}//name是一个普通的属性,不是主键@Column(name="uname")public String getName() {return name;}public void setName(String name) { = name;}@Column(name="upass")public String getPass() {return pass;}public void setPass(String pass) {this.pass = pass;}3.将实体类添加到hibernate.cfg.xml文件中<mapping class=”包名.类名”/>4.读取配置的文件AnnotationConfiguration类第三章:HQL查询语句1)hibernate中的 get()方法只能取出一条数据,delete()无法删除多条。