hibernate和Jdbc查询的区别以及hibernate查询普通查询和Hql

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();
//创建sessionfactory
Sessionfactory sessionfactory=config.buildSessionfaction();
//打开session
Session session=sessionfactory.openSession();
//开启一个事务
Transaction ts=session.begintransaction();

====insert操作
 User user=new User();
 user.setName("aaa");
 session.save(user);


====select操作(通过Id来进行查询)
 User user=(Usersession.get(User.class,id);



====update操作
 User user=(Usersession.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();
//创建sessionfactory
Sessionfactory sessionfactory=config.buildSessionfaction();
//打开session
Session 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值