***********
1,hibernate.hbm.xml,
表与对象的映射规律
2,hibernate.cfg.xml
hibernate的配置文件
比如还有那些其他资源文件,在什么地方
hibernate将要映射成那种数据库的语言
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.hbm2ddl.auto=update <!--是否需要根据映射源数据生产数据表结构 -->
hibernate.show_sql=true
hibernate.format_sql=false
注:
hibernate.hbm2ddl.auto可以取值:
create-drop:每次创建,关闭时删除
create:每次创建前删除,关闭时不删除(测试时方便)
update:每次发现有不同,则更新
validate:每次发现有不同,不会更新,而是报错,所以更安全
连接数据库的信息,如驱动名,url,username,password
3,hibernate默认把自动提交事务关闭了
所以要显式提交
tx=s.beginTransaction()
tx.commit();
4,mysql默认的engine=myisam
不支持事务,不能回滚
而InnoDB支持事务,可以回滚
二,入门小例子
hibernate工具类,提供session接口
public final class HibernateUtil { private static SessionFactory sessionFactory; static{ Configuration cfg=new Configuration(); cfg.configure(); sessionFactory=cfg.buildSessionFactory(); } public static SessionFactory getSessionFactory(){ return sessionFactory; } public static Session getSession(){ return sessionFactory.openSession(); } }
使用工具类进行对象的crud
public class Base { public static void main(String[] args) { User user = new User(); user.setBirthday(new Date()); user.setName("maple"); saveUser(user); //tx.commit();// 提交事务,必须显示提交事务,hibernate把自动提交事务关闭了 System.out.println("end"); } static void saveUser(User user){ Session s=null; Transaction tx=null; try{ s=HibernateUtil.getSession(); tx=s.beginTransaction(); s.save(user); tx.commit(); }catch(HibernateException e){ if(tx!=null) tx.rollback(); throw e;//还要抛出异常,向方法调用者报告异常,否则只是回滚,是将异常隐藏了,调用者不知 }finally{ if(s!=null){ s.close(); } } } static void saveUser1(User user){ Session s=null; Transaction tx=null; try{ s=HibernateUtil.getSession(); tx=s.beginTransaction(); s.save(user); tx.commit(); }finally{ if(s!=null){ s.close(); } } } }
2014.11.15
1,get(Class,id),有select语句
2,load(),没有select语句,如果使用load后,立即
User user=(User) s.load(User.class, id);
//com.maple.hibernate.domain.User$$EnhancerByCGLIB$$db1767bftttt
System.out.println(user.getClass().getName()); //返回的是user子类的名称
System.out.println(user.getName()+"gggg");//可正确执行,产生select语句,无异常
3,save(),如果不开启事务,虽然有insert语句,即开始进行了插入,但发现未开启事务,没有提交,后来会回滚;
pesist(),无事务时,无insert语句,不会进行插入,
4,saveorupdate(),根据id和version判断是保存还是更新,调用merge,对象还是脱管的
5,lock(),对象变为持久化对象,但不会同步对象的状态
2014.11.16
1,query.uniqueResult(),最多只有一条语句
2,User.hbm.xml,如果类名映射的表名和数据库中的关键字一样,为避免冲突,column,table改写,或者加单撇号
3,Query接口的分页查询
query.setFirstResult(0); //起始记录号
query.setMaxResults(1); //共查找出多少条
List<User> list=query.list(); //一条select语句
for(User user:list){
System.out.println(user.getName());
}
mysql分页语句:
select * from user limit 0,2;
从记录索引0开始,查找2条记录
oracle分页
1,
select * from t_base_menu where
rowid in
(select rid from
(select rownum rn,rid from(select rowid rid,menu_name from
t_base_menu order by menu_name desc) where rownum<2)
where rownum>0)
order by menu_name desc;
三,过程中遇到的一些问题
1,TBaseUser,TBaseRole,
...?????
主外键
***********