zoukankan      html  css  js  c++  java
  • framwork NHibernate

    NHibernate

    一.NHibernate

    1.HQL  curd语句总结

      1 1. 查询整个映射对象所有字段
      2 
      3 ?
      4 //直接from查询出来的是一个映射对象,即:查询整个映射对象所有字段    
      5         String hql = "from Users";    
      6         Query query = session.createQuery(hql);    
      7              
      8         List<Users> users = query.list();    
      9         for(Users user : users){    
     10             System.out.println(user.getName() + " : " + user.getPasswd() + " : " + user.getId());    
     11         }    
     12     
     13  输出结果为:    
     14 name1 : password1 : 1  
     15 name2 : password2 : 2  
     16 name3 : password3 : 3 
     17 2.查询字段  
     18 
     19 ?
     20 //查询其中几个字段    
     21         String hql = " select name,passwd from Users";    
     22         Query query = session.createQuery(hql);    
     23         //默认查询出来的list里存放的是一个Object数组    
     24         List<Object[]> list = query.list();    
     25         for(Object[] object : list){    
     26             String name = (String)object[0];    
     27             String passwd = (String)object[1];    
     28                  
     29             System.out.println(name + " : " + passwd);    
     30         }    
     31 输出结果为:    
     32 name1 : password1    
     33 name2 : password2    
     34 name3 : password3 
     35  
     36 
     37 3.修改默认查询结果(query.list())不以Object[]数组形式返回,以List形式返回
     38 
     39 ?
     40 //查询其中几个字段,添加new list(),注意list里的l是小写的。也不需要导入包,这样通过query.list()出来的list里存放的不再是默认的Object数组了,而是List集合了   
     41          String hql = " select new list(name,passwd) from Users";    
     42         Query query = session.createQuery(hql);    
     43         //默认查询出来的list里存放的是一个Object数组,但是在这里list里存放的不再是默认的Object数组了,而是List集合了    
     44         List<List> list = query.list();    
     45         for(List user : list){    
     46             String name = (String)user.get(0);    
     47             String passwd = (String)user.get(1);    
     48                  
     49             System.out.println(name + " : " + passwd);    
     50         }    
     51         /**   
     52         输出结果为:   
     53          name1 : password1   
     54         name2 : password2   
     55         name3 : password3   
     56          */ 
     57  
     58 
     59 4.修改默认查询结果(query.list())不以Object[]数组形式返回,以Map形式返回
     60 
     61 ?
     62 //查询其中几个字段,添加new map(),注意map里的m是小写的。也不需要导入包,这样通过query.list()出来的list里存放的不再是默认的Object数组了,而是map集合了    
     63         String hql = " select new map(name,passwd) from Users";    
     64         Query query = session.createQuery(hql);    
     65         //默认查询出来的list里存放的是一个Object数组,但是在这里list里存放的不再是默认的Object数组了,而是Map集合了    
     66         List<Map> list = query.list();    
     67         for(Map user : list){    
     68             //一条记录里所有的字段值都是map里的一个元素,key是字符串0,1,2,3....,value是字段值    
     69             //如果将hql改为:String hql = " select new map(name as username,passwd as password) from Users";,那么key将不是字符串0,1,2...了,而是"username","password"了    
     70             String name = (String)user.get("0");//get("0");是get(key),注意:0,1,2...是字符串,而不是整形    
     71             String passwd = (String)user.get("1");    
     72                  
     73             System.out.println(name + " : " + passwd);    
     74         }    
     75         /**   
     76         输出结果为:   
     77          name1 : password1   
     78         name2 : password2   
     79         name3 : password3   
     80          */ 
     81  
     82 
     83 5.修改默认查询结果(query.list())不以Object[]数组形式返回,以自定义类型返回
     84 
     85  
     86 
     87 6.条件查询
     88 
     89 ?
     90 //条件查询,参数索引值从0开始,索引位置。通过setString,setParameter设置参数    
     91         String hql = "from Users where name=? and passwd=?";    
     92         Query query = session.createQuery(hql);    
     93         //第1种方式    
     94 //      query.setString(0, "name1");    
     95 //      query.setString(1, "password1");    
     96         //第2种方式    
     97         query.setParameter(0, "name1",Hibernate.STRING);    
     98         query.setParameter(1, "password1",Hibernate.STRING);    
     99         List<Users> list = query.list();    
    100         for(Users users : list){    
    101             System.out.println(users.getId());    
    102         } 
    103  
    104 
    105 ?
    106 //条件查询,自定义索引名(参数名):username,:password.通过setString,setParameter设置参数    
    107         String hql = "from Users where name=:username and passwd=:password";    
    108         Query query = session.createQuery(hql);    
    109         //第1种方式    
    110 //      query.setString("username", "name1");    
    111 //      query.setString("password", "password1");    
    112         //第2种方式,第3个参数确定类型    
    113         query.setParameter("username", "name1",Hibernate.STRING);    
    114         query.setParameter("password", "password1",Hibernate.STRING);    
    115         List<Users> list = query.list();    
    116         for(Users users : list){    
    117             System.out.println(users.getId());    
    118         } 
    119   
    120 
    121 ?
    122 //条件查询,通过setProperties设置参数    
    123         String hql = "from Users where name=:username and passwd=:password";    
    124         Query query = session.createQuery(hql);    
    125         //MyUser类的2个属性必须和:username和:password对应    
    126         MyUser myUser = new MyUser("name1","password1");    
    127         query.setProperties(myUser);    
    128         List<Users> list = query.list();    
    129         for(Users users : list){    
    130             System.out.println(users.getId());    
    131         } 
    132   
    133 
    134 7.update 数据
    135 
    136            执行SQL语句(为什么要用SQL语句,我想是为了执行某些复杂的SQL语句吧) 
    137 
    138 ?
    139 String sql="update Table set field = 'test'"
    140 Session session = HibernateSessionFactory.getSession(); 
    141 session.createSQLQuery(sql).executeUpdate(); 
    142 ts.commit(); 
    143  
    144 
    145      
    146 
    147    执行HQL语句   
    148 
    149 ?
    150 String hql="update Table set field = 'test'" 
    151 ?
    152 Session session = HiberanteSessionFactory.getSession(); 
    153 Transaction ts = session.beginTransaction(); 
    154 Query query = session.createQuery(hql); 
    155 query.executeUpdate(); 
    156 ts.commit(); 
    View Code

    2.注意事项:

    xml文件修改:users.hbm.xml【例子】

    布尔类型:

    <property name="Sex" column="Sex" type="bool"  />

    修改为

    <property name="Sex" column="Sex" type="NHibernate.Type.YesNoType, NHibernate"  />

    时间类型:必须引用:Nullables.dll和Nullables.NHibernate.dll

    <property name="UpDate" column="UpDate" type="DateTime"  />

    修改为

    <property name="UpDate" column="UpDate" type="Nullables.NHibernate.NullableDateTimeType,Nullables.NHibernate"  />

    枚举类型:

    <property name="Status">
         <column name="Status"></column>
       </property>

    修改为

    <property name="Status">
         <column name="Status" sql-type="varchar(10)" default="1" not-null="true"></column>
       </property>

     users.hbm.xml必须设置为嵌入的资源:

    选中此文件-属性栏-生成操作  默认都是编译-----》嵌入的资源

    3.配置文件:

    <?xml version="1.0"?>
    <hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
     <session-factory>
      <property name="connection.driver_class">NHibernate.Driver.MySqlDataDriver</property>
      <property name="connection.connection_string">
    Database=school;Data Source=ip;User Id=root;Password=123
      </property>
      <property name="dialect">NHibernate.Dialect.MySQLDialect</property>
      <mapping assembly="MODEL"/>
     </session-factory>
    </hibernate-configuration>

  • 相关阅读:
    解决MySQL报错The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents .....
    不安装Oracle客户端,用plsql连接远程Oracle数据库(绝对解决你的问题)
    Java中的String,StringBuilder,StringBuffer三者的区别
    字符串截取的常用方法
    java 项目 导入成功后jsp页面报错处理方法
    PL/SQL Developer安装详解(32位客户端免安装版)
    oracle 11g如何完全卸载
    Struts2下载文件点取消出现的异常解决
    Web框架们
    Django【进阶篇 】
  • 原文地址:https://www.cnblogs.com/zlp520/p/4345063.html
Copyright © 2011-2022 走看看