您的位置:首页 > 其它

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

2015-11-23 00:54 441 查看
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=(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();
//创建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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: