(六)Hibernate的增删改查操作(3)
一、在Hibernate中使用原生SQL语句
- sql语句面向的是数据库,所以sql语句中对应的不再是bean了,比如sql="select * from user" 在hql中*是无效的,但是在sql中可以使用,且user指的是数据库中的user表。
案例一:
package action; import java.util.List; import org.hibernate.SQLQuery; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.transform.Transformers; import bean.User; import util.HibernateUtil; /** * hibernate支持原生SQL语句操作 * * @author 半颗柠檬、 * */ public class Query_SQL { public static void main(String[] args) { Query_SQL.testQuery(); // hibernate支持原生SQL语句的查询操作 // Query_SQL.insert(); // insert语句 } private static void testQuery() { Session session = null; Transaction tran = null; SQLQuery sqlQuery = null; String sql = ""; try { session = HibernateUtil.getSession(); tran = session.beginTransaction(); // HQL语句不能使用* , 而原生sql语句可以,且user对应的是数据库中的表名而不是bean的类名 sql = " select * from user where username like :username "; sqlQuery = session.createSQLQuery(sql); sqlQuery.setString("username", "%user%"); sqlQuery.setFirstResult(0); sqlQuery.setMaxResults(2); // 查询结果默认返回数组 List<Object[]> objList = sqlQuery.list(); System.out.println(objList.size()); /** * 查询结果返回一个bean */ sql = " select * from user where username like :username "; sqlQuery = session.createSQLQuery(sql); sqlQuery.setString("username", "%user%"); // addScalar(String)方法作用: // 指定查询结果包含哪些数据列---没有被addScalar选出的列将不会包含在查询结果中。 sqlQuery.addScalar("username"); sqlQuery.addScalar("userid"); // 把结果转为bean,注意bean的字段名要和数据库的字段名一致,区分大小写 //如果数据库的字段和bean中的属性名不一致,这里的数据库中的is_admin和bean中的isadmin不一致,可以通过在sql语句中添加别名sql="select is_admin as isadmin"来使得 //两者一致 sqlQuery.setResultTransformer(Transformers.aliasToBean(User.class)); List<User> userList = sqlQuery.list(); for (User user : userList) { System.out.println("username=" + user.getUsername() + "\t userid=" + user.getUserid()); } tran.commit(); } catch (Exception e) { e.printStackTrace(); tran.rollback(); } finally { HibernateUtil.closeSession(); } } private static void insert() { Session session = null; SQLQuery sqlQuery = null; Transaction tran = null; String sql = ""; try { session = HibernateUtil.getSession(); tran = session.beginTransaction(); sql = "insert into user(userid,username,password) values(?,?,?)"; sqlQuery = session.createSQLQuery(sql); sqlQuery.setParameter(0, 8); sqlQuery.setParameter(1, "user6"); sqlQuery.setParameter(2, "123"); int count = sqlQuery.executeUpdate(); System.out.println("插入了" + count + "条数据"); tran.commit(); } catch (Exception e) { e.printStackTrace(); tran.rollback(); } finally { HibernateUtil.closeSession(); } } }
代码在下面章节