• hibernate入门


    ***********

    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,

     ...?????

    主外键

    ***********

    有问题在公众号【清汤袭人】找我,时常冒出各种傻问题,然一通百通,其乐无穷,一起探讨


  • 相关阅读:
    antd Upload的使用
    table 的使用方法
    标题前点的制作
    插件multiBtnList的使用
    render的写法
    数据请求
    实体类为什么使用包装类
    el-table中如何遍历数组中对象里的数组?
    关于hash的描述,hashcode etc
    Java集合框架详解
  • 原文地址:https://www.cnblogs.com/qingmaple/p/4096035.html
Copyright © 2020-2023  润新知