hibernate和Jdbc查询的区别以及hibernate查询普通查询和Hql
来源:互联网 发布:mac照片如何归类 编辑:程序博客网 时间:2024/04/30 05:57
hibernate查询
我们先来看看传统的jdbc的dao是怎么写的
(1)首先创建一个连接池
public class lianjie { static String url="jdbc:sqlserver://localhost:1433;DatabaseName=SuperMarket"; static String user="sa"; static String pass="sa"; //添加一个静态的方法可以直接通过lianjie.ljw()的方式得到一个Connection public static Connection ljw(){ Connection c=null; try { //添加一个驱动(要导进来jar包)Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { //通过驱动包的管理工具得到与数据库的连接 c=DriverManager.getConnection(url, user, pass); System.out.println("数据库连接成功"); } catch (SQLException e) { e.printStackTrace(); System.out.println("数据库连接失败"); } return c; }public static void main(String[] args) { lianjie.ljw(); }}
//jdbc方式的持久化操作(把结果存放在一个一个的对象
Connection c=new lianjie().ljw();Statement s=c.createStatement();String sql="select * from stu where name='"+name+"'";ResultSet r=s.executeQuery(sql);//得到结果集通过游标的方式取出(只有一个结果也要用youbiao)List<Map> list=new ArrayList()();while(r.next()){//结果集的每一个元素是一个Map类型的//存放进对象User user=new User();user.setName(r.getString("name"));user.setPassword(r.getString("name"));//或者是user.setName(r.getString(1));user.setPassword(r.getString(2));list.add(user);}
?方式来jdbc方式的持久化操作
Connection c=new lianjie().ljw();String sql="select * from stu where name=? and password=?";PrepareStatement s=c.prepareStatement(sql);s.setString(1,sso);s.setString(2,ss2);ResultSet r=s.executeQuery();//得到结果集通过游标的方式取出(只有一个结果也要用)List<Map> list=new ArrayList();while(r.next()){ //结果集的每一个元素是一个Map类型的 //存放进对象 User user=new User(); user.setName(r.getString("name")); user.setPassword(r.getString("name")); //或者是 user.setName(r.getString(1)); user.setPassword(r.getString(2)); list.add(user);}========================================== Connection c=new lianjie().ljw(); PreparedStatement pre = null; ResultSet r = null; List list = new ArrayList(); try { pre = c.prepareStatement(sql); for (int i = 0; i < obj.length; i++) { pre.setObject(i + 1, obj[i]); } r = pre.executeQuery(); //可以得到每一个列名 ResultSetMetaData rsmd = r.getMetaData(); while (r.next()) { Map map = new HashMap(); for (int i = 0; i < rsmd.getColumnCount(); i++) { map.put(rsmd.getColumnName(i + 1), r.getObject(i + 1)); } list.add(map); } r.close(); pre.close(); c.close(); ``` =================================================(为什么要使用hibernate框架呢)理由:![这里写图片描述](http://img.blog.csdn.net/20151122230634973)![这里写图片描述](http://img.blog.csdn.net/20151122230952876)hibernate是一个主流的orm框架(对象关系映射机制)通过映射文件来保存映射信息好处是:是持久化操作以面向对象的方式来编程,不用考虑数据的保存形式![这里写图片描述](http://img.blog.csdn.net/20151122231157370)使用hibernate的三个准备和七个步骤(1)三个准备+++++++导入jar包+++++++配置hibernate.cgf.xm
传统的hibernate方法
//读取hibernate配置文件.得到连接池信息Configuration config=new Configuration().configure();//创建sessionfactorySessionfactory sessionfactory=config.buildSessionfaction();//打开sessionSession session=sessionfactory.openSession();//开启一个事务Transaction ts=session.begintransaction();====insert操作 User user=new User(); user.setName("aaa"); session.save(user);====select操作(通过Id来进行查询) User user=(User)session.get(User.class,id);====update操作 User user=(User)session.get(User.class,id); user.setName("addd"); session.update(user);====delete操作 session.delete(user);//提交事务ts.commit();session.close();
注意事项:
//读取hibernate配置文件.得到连接池信息
Configuration config=new Configuration().configure();
//创建sessionfactory
Sessionfactory sessionfactory=config.buildSessionfaction();
//打开session
Session session=sessionfactory.openSession();
========================>等价于
Session session=HibernateSessionFactory.getSession();
若继承了父类之后,若方法的重写或者是调用父类的方法(继承父类的方法在子类是不显示的,但是实现接口或者是抽象类的话必须实现重写方法)
用Super.来实现父类的方法
(2)使用hibernate的HQL语句来进行详细的查询或者模糊的查询(可以实现数据库的所有的操作)
//读取hibernate配置文件.得到连接池信息Configuration config=new Configuration().configure();//创建sessionfactorySessionfactory sessionfactory=config.buildSessionfaction();//打开sessionSession session=sessionfactory.openSession();//开启一个事务Transaction ts=session.begintransaction();============================//Tblfw是对象而不是数据库的表名,as可以省略String hql="select fw from Tblfw as fw";Query query=session.createQuery(hql);List list=query.list();=============================//也可以进行模糊查询String hql="select fw from Tblfw as fw where fw.title like '%adfa%'";Query query=session.createQuery(hql);List list=query.list();=============================//也可以用占位符的方式进行模糊查询(下表从0开始)String hql="select fw from Tblfw as fw where fw.title like ?";Query query=session.createQuery(hql);query.setString(0,"%adfa%");List list=query.list();=============================//也可以用参数名作为占位符的方式进行模糊查询(下表从0开始)String hql="select fw from Tblfw as fw where fw.title like :zh";Query query=session.createQuery(hql);query.setString(“:zh”,"%adfa%");List list=query.list();=============================// 分页查询String hql="select fw from Tblfw as fw order by fw.id";Query query=session.createQuery(hql);int firstResultIndex=pageSize*(PageNo-1);query.setFirstResult(firstResultIndex);query.setMaxResults(pageSize);List list=query.list();=============================// 当查询的结果只有一条的时候String hql="select count(fw) from Tblfw as fw order by fw.id";Query query=session.createQuery(hql);query.setMaxResults(pageSize); int num=query.luniqueResult();
0 0
- hibernate和Jdbc查询的区别以及hibernate查询普通查询和Hql
- Hibernate 中 HQL查询 和SQL查询的区别
- hibernate查询和jdbc查询
- hibernate高级查询技术之“HQL和QBC”的区别
- Hibernate 、Hql查询和Criteria查询
- Hibernate的查询 HQL查询
- hibernate原生sql查询和hql查询的注意点
- Hibernate的Hql查询
- hibernate的HQL查询
- Hibernate的HQL查询
- hibernate的hql查询
- Hibernate的HQL查询
- Hibernate的HQL查询
- hibernate的HQL查询
- Hibernate的HQL查询
- Hibernate通常是三种:hql查询,QBC查询和QBE查询:
- Hibernate通常是三种:hql查询,QBC查询和QBE查询:
- Hibernate通常是三种:hql查询,QBC查询和QBE查询:
- 二叉树首尾点的寻找
- 如何设置一个严格30分钟过期的Session
- HDU 3374 String Problem (KMP+最大最小表示法)
- poj-1597
- (解题报告)入门经典2版———第三章习题1
- hibernate和Jdbc查询的区别以及hibernate查询普通查询和Hql
- [转载]初识Hadoop
- 自己对于instancetype的理解和应用iOS开发的过程
- 【coder-pig教程学习笔记4】xml文件解析
- 基于spring的方式进行读写分离思考
- 算法 -- 0-1背包问题之动态规划
- hibernate4对sql语句的一些基本操作
- 数组深入:数组与内存控制
- 【经典算法】:用递归求1*2*3*...*n