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();
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>
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。