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>

原文地址:https://www.cnblogs.com/zlp520/p/4345063.html