1.Hibernate作为一种框架,在使用方面,确实有很多的方便,直接上步骤,
2. 先把 常用的 jar包导入--------配置一个 hibernare.cfg.xml文件--------创建entitybao(最好与数据库中的 意义对应,列名也对应,)------写impl文件------具体的jsp或者servlet
3.上一波 hibernate.cfg.xml文件的写法
oracle.jdbc.driver.OracleDriver
jdbc:oracle:thin:@localhost:1521:orcl
xiao
123456
1
org.hibernate.dialect.Oracle10gDialect
thread
org.hibernate.cache.internal.NoCacheProvider
true
update
就是 把 dao包和 impl 中部分的代码进行了简化,大大 提高 操作 表的速度,
2.entitys 中的文件
@Entity
@Table(name="person")
public class Person implements Serializable {
@Id
private int id;}
其中 @id 是必须要写的,如果 表名和数据库 中的 名字不一样,那么 加上table的name
import javax.persistence.Entity;
import javax.persistence.Id; 是这个包中的id
3.上一波操作的方法impl
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.xt.hiber.entitys.Person;
public class PersonTest {
Session session=null;
@Before
public void BeforeMethod(){
Configuration cfg=new Configuration().configure();
SessionFactory sessionfactory = cfg.buildSessionFactory();
session=sessionfactory.openSession();
}
@After
public void CloseMethod(){
if(session!=null){
session.close();
}
}
@Test
public void TestAdd(){
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Transaction tx= session.beginTransaction();
try{
Person p1=new Person(2, "李元霸", "1", 20, sdf.parse("1990-12-21"), "山西晋城");
session.save(p1);
Person p1=new Person(2, "李元", "1", 20, sdf.parse("1990-12-21"), "山西晋城");
session.update(p1);
Person p1=new Person();
p1.setId(2);
session.delete(p1);
tx.commit();
}catch(Exception e){
e.printStackTrace();
tx.rollback();
}
}
@Test
public void TestLoad(){
try{
Person p1 = (Person)session.load(Person.class, new Integer(1));
System.out.println("姓名:"+p1.getName());
}catch(Exception e){
e.printStackTrace();
}
}
}
插入数据 save,更新数据update,获得 数据 load,删除 delete
当然简便一点的还有 HQL语言,直接使用 sql 标准 操作 entitys 中的表,
可以改变 数据库中的 表,
package com.xt.test;
import java.text.SimpleDateFormat;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.xt.hiber.entitys.Person;
import com.xt.hiber.entitys.UserInfo;
public class UserInfoTest {
Session session=null;
@Before
public void BeforeMethod(){
Configuration cfg=new Configuration().configure();
SessionFactory sessionfactory = cfg.buildSessionFactory();
session=sessionfactory.openSession();
}
@After
public void CloseMethod(){
if(session!=null){
session.close();
}
}
@Test
public void TestQuery1(){
String uname="z%";
String hql="from UserInfo where uname like '"+uname+"'";
Query query = session.createQuery(hql);
List list= query.list();
if(list!=null&& list.size()>0){
for(UserInfo u : list){
System.out.println(u.getUname());
}
}
}
@Test
public void TestQuery2(){
//sql注入攻击
String uname="zhang' or 1=1 or 1='";
String upwd="asdhjad";
//采用拼接字符串
String hql="select count(*) from UserInfo where uname = '"+uname+"' and upwd='"+upwd+"'";
Query query = session.createQuery(hql);
Object obj = query.uniqueResult();
int cnt=Integer.parseInt(obj.toString());
System.out.println("cnt = "+cnt);
if(cnt>0){
System.out.println("登陆成功!");
}else{
System.out.println("登陆失败,用户名或者密码不正确!");
}
}
@Test
public void TestQuery3(){
//sql注入攻击
String uname="zhang' or 1=1 or 1='";
String upwd="asdhjad";
//hql语句的参数采用占位符的形式
String hql="select count(*) from UserInfo where uname = ? and upwd=?";
Query query = session.createQuery(hql);
query.setString(0, uname);
query.setString(1, upwd);
Object obj = query.uniqueResult();
int cnt=Integer.parseInt(obj.toString());
System.out.println("cnt = "+cnt);
if(cnt>0){
System.out.println("登陆成功!");
}else{
System.out.println("登陆失败,用户名或者密码不正确!");
}
}
@Test
public void TestQuery4(){
//sql注入攻击
String uname="zhang' or 1=1 or 1='";
String upwd="asdhjad";
//hql语句的参数采用参数名称绑定的形式
String hql="select count(*) from UserInfo where uname = :uname and upwd=:upwd";
Query query = session.createQuery(hql);
query.setString("uname", uname);
query.setString("upwd", upwd);
Object obj = query.uniqueResult();
int cnt=Integer.parseInt(obj.toString());
System.out.println("cnt = "+cnt);
if(cnt>0){
System.out.println("登陆成功!");
}else{
System.out.println("登陆失败,用户名或者密码不正确!");
}
}
@Test
public void TestQuery5(){
//sql注入攻击
String uname="zhangsan";
String upwd="123456";
//hql语句的参数采用参数名称绑定的形式
String hql="from UserInfo where uname = :uname and upwd=:upwd";
Query query = session.createQuery(hql);
query.setString("uname", uname);
query.setString("upwd", upwd);
UserInfo uinfo =(UserInfo)query.uniqueResult();
System.out.println("用户名:"+uinfo.getUname());
}
}
当然还有 分页的出现
public void TestQuery1(){
String hql="from Dept";
Query query = session.createQuery(hql);
List
if(list!=null && list.size()>0){
for(Dept d : list){
System.out.println("部门编号:"+d.getDno().trim()+",部门名称:"+d.getDname());
}
}
}
@Test
public void TestQuery2(){
String hql="from Dept order by dno asc";
Query query = session.createQuery(hql);
List
if(list!=null && list.size()>0){
for(Dept d : list){
System.out.println("部门编号:"+d.getDno().trim()+",部门名称:"+d.getDname());
}
}
}
@Test
public void TestQueryPage(){
int pagesize=2;//页大小
int pagecount=0;//总页数
int pageidx=2;//当前第几页
String hql2="select count(*) from Dept";
Query query2 = session.createQuery(hql2);
int rowcount =Integer.parseInt(query2.uniqueResult().toString());
pagecount=rowcount%pagesize==0?rowcount/pagesize:rowcount/pagesize+1;
String hql="from Dept order by dno asc";
Query query = session.createQuery(hql);
query.setFirstResult((pageidx-1)*pagesize);//设置第几页
query.setMaxResults(pagesize);//设置页大小
List
if(list!=null && list.size()>0){
for(Dept d : list){
System.out.println("部门编号:"+d.getDno().trim()+",部门名称:"+d.getDname());
}
}
}
使用 HQL中 是直接 使用的 javabean 中的 名字,不要搞错了
获得 列表 就是
Session.createQuery(HQL).list();
还可以 设置 从第几个开始显示,并且显示几行,