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>

 

你可能感兴趣的:(Hibernate)