hibernate和Jdbc查询的区别以及hibernate查询普通查询和Hql
2015-11-23 00:54
441 查看
hibernate查询
我们先来看看传统的jdbc的dao是怎么写的
(1)首先创建一个连接池
//jdbc方式的持久化操作(把结果存放在一个一个的对象
?方式来jdbc方式的持久化操作
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/25/f191673b84a54beb21844f730bb2c347)
传统的hibernate方法
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/25/291be8c2997d9c50128d2dafa930c14e)
注意事项:
//读取hibernate配置文件.得到连接池信息
Configuration config=new Configuration().configure();
//创建sessionfactory
Sessionfactory sessionfactory=config.buildSessionfaction();
//打开session
Session session=sessionfactory.openSession();
========================>等价于
Session session=HibernateSessionFactory.getSession();
若继承了父类之后,若方法的重写或者是调用父类的方法(继承父类的方法在子类是不显示的,但是实现接口或者是抽象类的话必须实现重写方法)
用Super.来实现父类的方法
我们先来看看传统的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();
相关文章推荐
- 主元素majority-number
- BZOJ1444 : [Jsoi2009]有趣的游戏
- (解题报告)入门经典2版———第三章习题1
- 数据库分表使用思考
- HDU 3374 String Problem (KMP+最大最小表示法)
- 正则表达式 效率
- 设计模式小结
- 开源项目托管GitHub
- 如何设置一个严格30分钟过期的Session
- 二叉树首尾点的寻找
- STUN和TURN技术浅析
- 正则表达式高级2.1
- DOM
- css
- web
- ion-content中存在ion-list,在ion-list外固定其他控件位置不滚动
- ubuntu安装php-cgi
- 【经典算法】:二分查找
- responsiveslides 插件(图片轮播插件)
- css3实现逐渐变大的圆填充div背景的效果