Hibernate韩顺平讲课笔记

合集下载

韩顺平循序渐进学java从入门到精通(全知识点笔记整理)

韩顺平循序渐进学java从入门到精通(全知识点笔记整理)

韩顺平笔记第1讲内容介绍.项目演示.原理剖析1. 课程包括:面向对象编程,图形界面,数据库编程,文件流,网络编程,的多线程2. 历史:1990 启动绿色计划 1992 创建语言—>1994 参加硅谷大会演示功能震惊世界 1995 正式发布第一个版本,目前最新的是7.03. 开发工具:记事本,,,,4. 包括:(运行环境)的工具:编译器解释执行器的类库:3600多个,常用的150多个5. 第一个程序:功能:显示―‖:表示类是公共的,一个文件中只有一个类 :表示这个是一个类:类名(公共类的类名,必须和文件名一样){一个主函数,程序的入口 ( []) {执行语句("!"); } }6. 源程序(文件)——>字节码文件(文件)——>由解释执行器()将字节码文件加载到虚拟机()——>字节码文件()就会在虚拟机中执行); } }第2讲变量.数据类型1. 在里面占4个字节,占8个字节2. 基本数据类型:整数:(一个字节:-128127 四个字节:-247483647两个字节:-3276832767 八个字节:)小数(浮点):布尔:字符:(两个字节,可以存放汉字, 1 ='中';)引申到字符串(类)3.在中对进行运算的时候,直接是当做码对应的整数4.数据不能从高精度到低精度的转换<<<<<3.4;是过不去的,在中小数默认是(双精度)的应该写成是3.4f;不过可以强制转换:()1.2; ()1.95. 1 1.2; a先是往高精度转换,然后赋给b,就报错改成1 1.2; 或者 1 1.2f; 就解决了第4讲流程控制1. 语句中,条件表达式的数据类型应该和后面的类型一致2. 语句中,可用的数据类型主要是:第5讲类与对象1. 面向对象编程-类与对象类名首字母大写类里面的元素叫类的成员变量/属性2. 类的定义包名;类名父类接口名{成员变量;构造方法;成员方法;}3. 如何创建对象:先声明再创建1;1 ();一步到位 1 ();4. 引用传递类似于指针一样第8讲类变量1. 属于类的对象的而不是属于类的2. 5不能在类的外部使用,只能在类定义时候使用!3. 可以用类名直接访问静态变量第9讲类方法封装1.类变量是该类的所有对象共享的对象,一改全改了2.定义语法:访问修饰符数据类型变量名3. 9{1;{("");;}会自动执行一次,也只有一次9(){("");;}( []){9 t1 9();(9);9 t2 9();(i);}}4.类方法(静态方法、静态函数):属于所有对象实例的5中:类变量()原则上用类方法()去访问;类方法中不能访问非静态变量,就是非类变量,但是普通的成员方法可以访问静态变量(类变量)使用:类名.类方法名对象名.类方法名6.非类变量就是实例变量,属于每个对象自己的7面向对象编程的三(四)大特征:封装、继承、多态(、抽象)8.抽象:把一类事物的共有的属性和行为提取出来,形成一个物理模板,此研究问题的方法就是抽象9.封装:把抽象出来的数据和对数据的操作封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作(成员方法),才能对数据进行操作。

Hibernate课堂笔记

Hibernate课堂笔记

Hibernate部分学习笔记讲师:梁建全liangjq@目录Hibernate部分学习笔记 (1)Day01 (5)一、Hibernate基本概念 (5)1、Hibernate是什么,有什么作用和好处 (5)2、Hibernate实现原理 (5)3、Hibernate框架主要结构 (5)二、Hibernate基本应用 (6)1、Hibernate使用步骤 (6)三、映射类型 (9)1、Hibernate映射类型主要有以下几种: (9)四、主键生成 (10)Day02 (11)一、Hibernate框架的基本特性 (11)1、Hibernate一级缓存 (11)A.一级缓存的特点 (11)B.一级缓存的好处 (11)C.使用建议 (11)2、Hibernate对象持久性 (13)3、Hibernate延迟加载 (14)A.针对于以下方法,Hibernate默认使用延迟加载机制: (14)B.Session的get和load方法区别: (14)C.延迟实现原理 (15)D.Hibernate框架如何动态生成一个代理类 (15)E.使用建议 (15)二、Hibernate综合练习 (15)前期案例:任务列表示例重构(采用Struts2+Hibernate) (15)A.Hibernate前期准备 (15)B.为了更好使用一级缓存,采用ThreadLocal封装Session (16)C.采用Hibernate重构ProjectDAO (17)D.为了支持延迟加载API,采用拦截器实现OpenSessionInView模式 (18)Day03 (20)一、什么是关联映射,有什么好处 (20)二、一对多关联映射 (20)示例:d_order和d_item存在一对多的业务关系 (20)一对多关系映射的实现步骤: (20)三、多对一关联映射 (21)多对一关系映射实现步骤: (21)四、关联操作 (22)1、关联查询 (22)2、利用lazy属性控制延迟加载 (22)3、级联操作(采用关系级联方式进行添加、删除、更新操作) (22)A.在关联属性映射部分添加cascade属性,可以指定以下属性 (22)B.Inverse属性的作用 (22)C.级联添加 (23)D.级联删除 (23)Day04 (24)一、如何使用Myeclipse生成映射文件和实体类? (24)1、如何根据DB生成实体类和映射文件 (24)A.利用Myeclipse追加Hibernate框架步骤: (24)B.利用Myeclipse根据表生成实体类和映射文件 (26)二、多对多关系映射 (29)三、继承关系映射 (30)1、继承关系映射(1) (30)A.首先将Book继承自Product类 (30)B.修改Book.hbm.xml描述信息 (30)2、继承关系映射(2)---理解 (31)Day05 (33)一、其他映射 (33)1、List集合映射 (33)2、formula子查询映射 (33)3、Component组件映射 (34)4、联合主键映射 (35)案例:采用联合主键映射+组件映射对t_person表进行操作。

韩顺平 hibernate笔记

韩顺平 hibernate笔记

◆hibernate是什么?1.hibernate 是一个框架(framework)2.hibernate 是一个orm框架[]●orm (object relation mapping) 对象关系映射框架o object -> 业务层(只对对象操作)r relation-> 关系数据库m mapping 对象关系映射文件3.hibernate 处于我们项目的持久层位置(正因为如此,所以有人又把hibernate称为持久层框架)4.hibernate 实际上就是对jdbc进行了轻量级的封装.5.hibernate 的基础还是我们java 反射机制●除了hiberante 这个orm框架,还有一些:apache ojb / toplink / ibatis / ejb cmpApache OJB ()Cayenne ()Jaxor ()Hibernate()iBatis ()jRelationalFramework ()mirage ()SMYLE ()TopLink ()把对象持久化: 把对象的信息保存到数据库或者是文件.总结: hibernate 是对jdbc进行轻量级封装的orm 框架,充当项目的持久层.◆为什么需要hibernate?◆快如入门案例:hiberante 可以用在j2se 项目,也可以用在j2ee (web项目中)struts是web框架,所以用在web项目我们使用手动配置hibernate方式开发一个hibernate 项目,完成crud操作。

开发流程1.创建一个项目2.画出一个简单项目框架示意图3.引入hibernate 开发包(从网上下载google hibernate ),完后我们4.开发hibernate 有三种方法(开发顺序)我们使用第二种开发项目创建employe 表.create table employee(id number primary key,name varchar2(64) not null,email varchar2(64) not null,hiredate date not null)创建一个序列,将来用于主键的自增长:--创建一个序列create sequence emp_seqstart with 1increment by 1minvalue 1nomaxvaluenocyclenocache5.开发domain对象和对象关系映射文件对象关系映射文件:作用是用于指定domain对象和表的映射关系. ,该文件的取名有规范: domain对象.hbm.xml,一般我们放在和domain对象同一个文件夹下(包下)我们的Employee.hbml.xml配置文件:<!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN""/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.hsp.domain"><class name="Employee" table="employee"><!-- id元素用于指定主键属性--><id name="id" column="id" type="ng.Integer"><!-- 该元素用于指定主键值生成策略hilo native increment sequence uuid --><generator class="sequence"><param name="sequence">emp_seq</param></generator></id><!-- 对其它属性还有配置--><property name="name" type="ng.String"><column name="name" not-null="false" /></property><property name="email" type="ng.String" ><column name="email" not-null="false"/></property><property name="hiredate" type="java.util.Date"><column name="hiredate" not-null="false" /></property></class></hibernate-mapping>6.手动配置我们的hibernate.cfg.xml文件,该文件用于配置连接的数据库的类型,driver, ,用户名,密码,url ....同时管理对象关系映射文件,该文件的名称,我们一般不修改.hibernate.cfg.xml配置文件<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><!-- hibernate 设计者,给我们提供了一写常用的配置--><!-- 配置使用的driver --><property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property> <property name="ername">scott</property><property name="connection.password">tiger</property><property name="connection.url">jdbc:oracle:thin:@127.0.0.1:1521:orclhsp</property> <!-- 配置dialect方言,明确告诉hibernate连接是哪种数据库--><property name="dialect">org.hibernate.dialect.OracleDialect</property><!-- 显示出对于sql --><property name="show_sql">true</property><!-- 指定管理的对象映射文件--><mapping resource="com/hsp/domain/Employee.hbm.xml"/></session-factory></hibernate-configuration>7.测试文件TestMain.javapackage com.hsp.view;import com.hsp.util.*;import java.util.Date;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.*;import com.hsp.domain.Employee;public class TestMain {/*** @param args*/public static void main(String[] args) {//查询[load]->hql语句(hibernate query language)}public static void delEmp() {//删除//获取一个sessionSession session=MySessionFactory.getSessionFactory().openSession();Transaction ts=session.beginTransaction();//删除1.先获取该雇员,然后删除Employee emp=(Employee) session.load(Employee.class, 3);session.delete(emp);mit();session.close();}public static void updateEmp() {// TODO Auto-generated method stub//修改用户//获取一个会话Session session=MySessionFactory.getSessionFactory().openSession();Transaction ts=session.beginTransaction();//修改用户1. 获取要修改的用户,2.修改//load是通过主键属性,获取该对象实例.<--->表的记录对应Employee emp=(Employee) session.load(Employee.class, 3);emp.setName("韩顺平8");//update...emp.setEmail("abc@");mit();session.close();}public static void addEmployee() {//我们使用hibernate完成crud操作[这里我们只见对象,不见表]//现在我们不是用service ,直接测试.//1。

最新韩顺平java笔记整理幻灯片课件

最新韩顺平java笔记整理幻灯片课件

servlet/jsp开发工具
普通的文本编辑器notepad,uedit32 集成开发工具jcreator,jbuilder,eclipse,editplus,netbean
servlet/jsp运行环境
Tomcat是一个免费的开源的servlet容器,它是Apache基金会的 Jakarta项目中的一个核心项目,由Apache,Sun和其它一些公司 及个人共同开发而成。
java.io.OutputStream
javax.servlet.ServletOutput
ng.Throwable
javax.servlet.UnavailableException
ng.Exception javax.servlet.ServletException
servlet中操作数据库
servlet操作数据库注意事项 需要将连接数据库的jar包,拷贝到tomcat服务器 具体有两种方法: 1)将jar包拷贝到tomcat目录下的lib文件夹里 2)在webapps目录的WEB-INF文件下建立一个lib文件夹,然后将 jar包拷贝到该文件夹下
4.因为session的各个属性要占用服务器的内存,因此软件公司都 是在迫不得已的情况下才使用
cookie vs session
1.存在的位置 cookie保存在客户端,session保存在服务器端 2.安全性 比较而言,cookie的安全性比session要弱 3.网络传输量 cookie通过网络在客户端与服务器端传输,而session保存在服务 器端,不需要传输
2.开发servlet(引入Tomcat文件夹下lib文件夹里的servlet-api.jar )
3.部署你的servlet(servlet开发流程)

java韩顺平30天笔记

java韩顺平30天笔记

java韩顺平30天笔记《Java韩顺平30天笔记》是一本由韩顺平编写的Java学习笔记,旨在帮助初学者快速入门Java编程语言。

下面我将从多个角度全面地回答你关于这本书的问题。

首先,这本书的作者是韩顺平,他是一位在Java编程领域有着丰富经验的专家。

他以通俗易懂的语言和实例讲解,使得读者能够轻松理解Java的基础知识和核心概念。

《Java韩顺平30天笔记》的主要特点是系统性和实用性。

它按照学习的顺序和难度,分为30个章节,每天学习一章,共计30天。

通过每天的学习和实践,读者可以逐步掌握Java的基础语法、面向对象编程、异常处理、集合框架、多线程编程等重要知识点。

这本书的内容涵盖了Java编程的方方面面。

它从最基础的Hello World程序开始,逐步介绍了变量、运算符、流程控制语句、数组、方法、面向对象的概念、继承、多态等核心知识。

此外,它还介绍了常用的Java标准库,如集合框架、IO流、异常处理等。

书中还包含了大量的实例和练习题,帮助读者巩固所学知识。

除了内容丰富实用,这本书的风格也值得一提。

韩顺平采用了通俗易懂的语言,避免了过多的专业术语和复杂的概念解释。

他通过生动的例子和图表,将抽象的概念转化为具体的实践,帮助读者更好地理解和应用所学知识。

然而,需要注意的是,《Java韩顺平30天笔记》虽然是一本很好的入门教材,但它并不能涵盖Java编程的所有方面。

Java是一门广泛应用于软件开发的编程语言,其应用领域非常广泛,包括Web开发、移动应用开发、大数据处理等。

因此,如果你想深入学习Java并应用于实际项目中,可能需要进一步学习其他相关的书籍和教材。

总结起来,《Java韩顺平30天笔记》是一本适合初学者入门的Java学习笔记。

它的系统性和实用性使得读者能够在30天内快速掌握Java的基础知识。

然而,要想深入学习和应用Java,可能需要进一步学习其他相关的书籍和教材。

希望我的回答能够对你有所帮助。

韩顺平循序渐进学java从入门到精通课件笔记第七十讲到第七十三讲

韩顺平循序渐进学java从入门到精通课件笔记第七十讲到第七十三讲

由于对数据库操作后有很多重复代码•这样可以把操作封装成一个类,这个类可以完成对表的操作.第七十一讲:初步理解模式的概念(mv):增加项目的可维护性,尤其在做一个大项目的时候,如果没有一个好的方案的话,那么就会很悲剧了•软件开发也是一个渐进的过程•程序结构图说明潭架图用于描叙程序中有多少文件和他们之间的调用关系讲解为什么定义对象为全局变量堆区 代码区1数据区 栈区1 1狂—V -ASID*写成一个ming 版的学生管理系统 * 1 ,查询任务 *2 ,添加学生 */package com.testl; import java.awt.*; import java.awt.eve nt.*; import java.sql.*;import javax.swi ng.*;public class Studen tMa nageme nt exte nds JFrame impleme nts Acti on Listener {//定义一些控件 JPanel jp1 , jp2 ;之对指称 个朗一指反在个耶存还麻 露了薔泄團泄笳St内然导内点的脣 囂码护式是缺不 的一代维大在赶可 最加r de遂间彌nio 和是EJLabel jl ;JButton jb1 , jb2 , jb3 , jb4JTable jt ;JTextField jtfConn ecti on ct =n ullPreparedStateme nt ps =n ullStuModel sm = null ;public static void main( Stri ng[] args) {StudentManagement ta= _ new StudentManagement();}public Stude ntMa nageme nt(){jp1 =new JPa nel();jl =new JLabel( "请输入名字:");jtf =n ew JTextField(20);jb1 =new JButton( "查询");//注册监听jb1 .addActi on Liste ner( this );//把各个控件加入到jp1;j p.add(jl );j p.add(jtf );j p.add(jb1 );jp2 =new JPa nel();jb2 =new JButton( "添加");jb3 = new JButton( "修改");jb4 = new JButton( "删除");//注册监听jb2 .addActionListener( this );jb3 .addActionListener( this );jb4 .addActionListener( this ); JScrollPa ne jsp = n ulljp2 .add( jb2 ); jp2 .add( jb3 ); jp2 .add( jb4 );//创建一个数据模型对象 sm = new StuModel();//初始化JTable jt =new JTable( sm);//初始化jspjsp =new JScrollPane( jt );}@Overridepublic void acti on Performed(Acti on Eve nt e) {//TODO Auto-ge nerated method stub//判断是那个按钮被点击 //如果相应与监听在同一个类中也可以用下面方法if (e.getSource()== jb1 ) {//System.out.pri ntln("//因为把表的数据封装到 StuModel 中,我们就可以比较简单地完成查询任务String name= this . jtf .getText().trim();//写一个sql 语句 Stri ngsql ="select * from stude nt where stuName='" +n ame+//构建新的数据模型类并更新//吧jsp 放进到JFramethi s .add( jsp );thi s .add( jp1 ,BorderLayout. NORT H); thi s .add( jp2 ,BorderLayout. SOUT H); thi s .setSize(500,400); thi s .setLocatio n(200, 200); thi s .setDefaultCloseOperati on( JFrame. thi s .setVisible( true );EXIT_ON_CLOSE );用户希望查询");测试用的sm = new StuModel(sql);jt .setModel( sm);}//当用户点击添加else if (e.getSource()== jb2 ){//合理应该为模式的状态,否则,还没有插完就会执行下面的语句,导致无法更新.StuAddDialog sad = new StuAddDialog( this ,"添加学生",true );//重新再获得新的数据模型sm = new StuModel();jt .setModel( sm);}else if (e.getSource()== jb3 ){System. out .print( "aaaa");int rownum = this . jt .getSelectedRow();if (rownum==-1){//提示JOptionPane. showMessageDialog (this ,"请选择一行"); return ; //代表不要再往下面走了,谁调用就返回给谁}//显示修改对话框new StudentUpdateDialog( this ,"修改对话框",true , sm,rownum);}//当前用户点击删除else if (e.getSource()== jb4 ){//得到该学生的id//getSelectedRo 会返回用户点击的行//如果一行都没选,则会返回-1int rownum= this . jt .getSelectedRow();if (rownum==-1){//提示JOptionPane. showMessageDialog (this ,"请选择一行");return ; //代表不要再往下面走了,谁调用就返回给谁}//得到学生的编号 String stuld=(Stri ng) sm.getValueAt(row num, 0);//System.out.pri nt(stuId);//测试用的//连接数据库,完成删除任务 try {//加载驱动Class. forName ( "com.microsoft.sqlserver.jdbc.SQLServerDriver"//System.out.pri nt("1");// 测试用的//得到连接atabaseName=spdb1" , "sa" , "h123");//System.out.pri nt("2");// ps=ct .prepareStatement( stuid='" +stuld+ ""');//System.out.pri nt("3");// ps .executeUpdate(); }catch (Excepti on ex) {ex.pri ntStackTrace(); } fin allytry {if ( ps != null ) ps .close(); if ( ct != null ) ps .close(); } catch (SQLException e1) {// TODO Auto-ge nerated catch block e1.pri ntStackTrace(); }}sm = new StuModel(); jt .setModel( sm);ct =DriverMa nager. getC onn ection ("jdbc:sqlserver://127.0.0.1:1433;d);测试用的"delete from stude nt where测试用的*这是我的一个Student表的模型*可以把对student表的各种操作封装到该模型中*/ package com.testl;import java.sql.*;import java.util.Vector;import javax.swi ng.JTable;import javax.swi ng.table.AbstractTableModel;public class StuModel exte nds AbstractTableModel{Vector rowData, colu mnN ames; JTable jt=n ull;//定义操作数据库需要的东西PreparedStateme nt ps=n ull;Connection ct=n ull;ResultSet rs =n ull;public void in it(Stri ng sql){if(sql ==n ull){sql ="select * from stude nt";}〃中间处理jt =new JTable();colu mnN ames=new Vector();〃设置列名columnNames.add("学号");columnNames.add("名字");columnNames.add("性别");columnNames.add("年龄");columnNames.add("籍贯"); columnNames.add("系别");//rowData可以存放多行rowData =new Vector();{//加载驱动Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");//System.out.print("1");〃测试用的//得到连接ct=DriverMa nager.getCo nn ecti on("jdbc:sqlserver://127.0.0.1:1433;databaseName=spdb1","s a","h123");//System.out.print("2");〃测试用的ps=ct.prepareStateme nt(sql);//System.out.print("3");〃测试用的rs=ps.executeQuery();//System.out.print("4");〃测试用的while(rs. next()){Vector hang =new Vector();han g.add(rs.getStri ng(1));han g.add(rs.getStri ng(2));han g.add(rs.getStri ng(3));han g.add(rs.get In t(4));han g.add(rs.getStri ng(5));han g.add(rs.getStri ng(6));〃加入到rowDatarowData.add(ha ng);}//System.out.print("5");〃测试用的}catch(Excepti on e){e.pri ntStackTrace();}fin ally{try {if(rs!=null) rs.close();if(ps!=n ull) ps.close();if(ct!=null) ct.close();} catch (SQLException e) {// TODO Auto-ge nerated catch block e.pri ntStackTrace();}}〃通过传递的sql语句来获得数据模型public StuModel(String sql){in it(sql);}//构造函数,初始化我们的数据模型public StuModel(){this.i nit(n ull);}public void addStu(Stri ng sql){〃根据用户输入的sql语句完成添加任务•}@Overridepublic String getColu mnN ame(i nt colu mn) { // TODO Auto-ge nerated method stubreturn (Stri ng)this.colu mnN ames.get(colu mn); }@Override〃得到共有多少列public int getColu mnCoun t() {// TODO Auto-ge nerated method stub//System.out.print("getColumnCount");// 测试所用return this.colu mnN ames.size();学习必备 欢迎下载}@Override 〃得到共有多少行 public in t getRowCou nt() {// TODO Auto-ge nerated method stub return this.rowData.size(); }@Override〃得到某行某列的数据public Object getValueAt(i nt row In dex, int colu mnln dex) {// TODO Auto-ge nerated method stubreturn ((Vector)this.rowData.get(rowl ndex)).get(colu mnln dex); }非模式的窗口public StuAddDialog(Frame own er,Stri ng title,packa ge com.test1; import java.awt.*;import java.awt.eve nt.*; import java.sql.*;import javax.swi ng.*;public class StuAddDialog// 定义我需要的swing 组件 exte ndsJDialog impleme nts Actio nListe ner{JLabel jl1 , jl2 ,jl3 ,jl4 , jl5 ,jl6 ;JButt on jb ,jb2JJTextField jtf1 ,jtf2,jtf3 , jtf4,jtf5 , jtf6 ;JPa nel jp1 ,jp2 , jp3 ;//构造函数 Frame 代表父窗口口 ,title 代表窗口的名字,model 指定是模式窗口 ,还是super (owner,title, model); //调用父类构造方法,达到模式对话框效果jl1 =new JLabel( jl2 =new JLabel( jl3 =new JLabel( jl4 =new JLabel( jl5 =new JLabel( jl6 =new JLabel("学号“); "姓名“); "性别"); "年龄"); 籍贯"); 系别");boolea n model)jtf1 =ne w JTextField(); jtf2 =new JTextField();jtf3 =new JTextField();jtf4=ne w JTextField();jtf5 =new JTextField();jtf6 =new JTextField();jb1 =new JButton ( "添加"); jb2 =new JButton ( "取消");jp1 =new JPa nel(); jp2 =new JPa nel(); jp3 =new JPa nel();//设置布局 jp1 .setLayout( jp2 .setLayout(// 添加组件j p .add( jl 1 j p .add( jl 2 j p .add( jl 3 j p .add( jl 4 j p .add( jl5j p.add( jl6jp 2 .add( jtf 1 jp 2 .add( jtf2jp 2 .add( jtf3 jp 2 .add(jtf4jp 2 .add( jtf5jp 2.add( jtf6jp 3 .add( jb1jp 3 .add( jb2this .add( jp1 ,BorderLayout. this .add( jp2 ,BorderLayout.new GridLayout(6,1)); new GridLayout(6,1));WEST); CENTER);this .add( jp3 ,BorderLayout. SOUTH);//注册监听jb1 .addActi on Liste ner( this );//展现this .setSize(300,200); this .setLocatio n(200, 300); this .setVisible( true );@Override public void acti on Performed(Acti on Eve nt e) {//TODO Auto-ge nerated method stubif (e.getSource()== jb1 ) {//对用户点击添加按钮后的响应动作 //连接数据库 Conn ecti on ct =n ull ;PreparedStateme nt ps =n ulltry {//加载驱动Class .forName ( "com.microsoft.sqlserver.jdbc.SQLServerDriver"//获取连接getConnection ("jdbc:sqlserver://127.0.0.1:1433;d,"sa" , "h123");预编译的都是通过添加参数的方式来赋值int i=ps.executeUpdate(); if (i==1) {System. out .print( "添加成功 ok");}ps.setStri ng(1. this .jtf1 .getText()); ps.setStri ng(2. this .jtf2 .getText()); ps.setStri ng(3. this .jtf3 .getText());ps.set In t(4, In teger.parseInt (thi ps.setStri ng(5. this .jtf5 .getText());ps.setStri ng(6. this .jtf6.getText()););.jtf4 .getText())); ct=DriverMa nager. atabaseName=spdb1" // ps=ct.prepareStateme nt("in sert into stude nt values (????? ?)"\ ■ J ■ J ■ J ■ J ■ J ■ /else{System. out .print( "添加失败");}} catch (Exception e1) {// TODO Auto-ge nerated catch blocke1.pri ntStackTrace();}fin ally{try {ps.close();ct.close();} catch (SQLException e1) {// TODO Auto-ge nerated catch block e1.pri ntStackTrace();}}/***修改学生界面*/package com.testl;import java.awt.*;import java.awt.eve nt.*;import java.sql.*;import javax.swi ng.*;public class StudentUpdateDialog __________ extends JDialogimpleme nts Acti on Liste ner{//定义我需要的swing组件JLabel jl1 , jl2 , jl3 , jl4 , jl5 , jl6jtf1 =new JTextField();jtf2 =ne w JTextField(); jtf3 =new JTextField();jtf4 =new JTextField();jtf5=ne w JTextField();jtf6 =ne w JTextField();jtf1 .setText((String)sm.getValueAt(rownum, 0)); jtf1 .setEditable( false );jtf2 .setText((Stri ng)sm.getValueAt(row num, 1)); jtf3 .setText((String)sm.getValueAt(rownum, 2)); jtf4.setText(sm.getValueAt(rownum, 3)+"");jtf5 .setText((Stri ng)sm.getValueAt(row num, 4)); jtf6.setText((Stri ng)sm.getValueAt(row num, 5));jb1 =new JButton ( "修改"); jb2 =new JButton ( "取消");jp1 =new JPa nel(); jp2 =new JPa nel(); jp3 =new JPa nel();非模式的窗口public Stude ntUpdateDialog(Frame own er,Str ing title,model,StuModel sm,int rown um)JButton jb1 , jb2 ; JTextField jtfl , jtf2 JPanel jp1 , jp2 , jp3,jtf3 ,jtf4 ,jtf5 ,jtf6//构造函数 Frame 代表父窗口口 ,title代表窗口的名字,model 指定是模式窗口 ,还是boolea nsuper (owner,title, model); //调用父类构造方法,达到模式对话框效果jl1 =new JLabel( jl2 =new JLabel( jl3 =new JLabel( jl4 =new JLabel( jl5 =new JLabel( jl6 =new JLabel("学号“); "姓名“); "性别"); "年龄"); 籍贯"); 系别");//初始化数据//注册监听jb1 .addActi on Liste ner( this );//展现 this .setSize(300,200); this .setLocatio n(200, 300); this .setVisible( true );}@Overridepublic void acti on Performed(Acti on Eve nt e) {//设置布局 jp1 .setLayout( new GridLayout(6,1)); jp2 .setLayout(new GridLayout(6,1));jp 1 .add( jl 1jp1 .add( jl2 jp 1 .add( jl3 jp1 .add( jl4 ); jp1 .add( jl5 ); jp1 .add( jl6 );jp 2 .add( jtf 1 jp 2 .add( jtf2jp 2 .add( jtf3jp 2 .add( jtf4jp 2 .add( jtf5jp 2 .add( jtf6jp 3 .add( jb1jp 3 .add( jb2this .add( jp1 ,BorderLayout. WEST); this .add( jp2 ,BorderLayout. CENTER); this.add( jp3 ,BorderLayout.SOUTH);//添加组件II TODO Auto-ge nerated method stubif (e.getSource()== jb1 ){//对用户点击添加按钮后的响应动作II连接数据库Conn ecti on ct = n ull ;PreparedStateme nt ps = nulltry {II加载驱动Class. forName ( "com.microsoft.sqlserver.jdbc.SQLServerDriver" );II获取连接ct=DriverManager. getConnection ("jdbc:sqlserver://127.0.0.1:1433;d atabaseName=spdb1" , "sa" , "h123");II预编译的都是通过添加参数的方式来赋值ps=ct.prepareStateme nt( "update stude nt setstuName=?,stuSex=?,stuAge=?,stuJg=?,stuDept=? where stuld=?" );ps.setStri ng(1. this .jtf2 .getText());ps.setStri ng(2. this .jtf3 .getText());ps.set In t(3, Integer. parseInt (this . jtf4 .getText()));ps.setStri ng(4. this .jtf5 .getText());ps.setStri ng(5. this .jtf6 .getText());ps.setStri ng(6. this .jtfl .getText());int i=ps.executeUpdate();if (i==1){System. out .print( }else{System. out .print( } "修改成功ok"); "修改失败");} catch (Exception e1) {II TODO Auto-ge nerated catch blockel.pri ntStackTrace();fin ally{try {ps.close();ct.close();} catch (SQLException e1) {// TODO Auto-ge nerated catch blockel.pri ntStackTrace();}}}}}第七十二讲node 12模式程序框架组图F面将前面的model1模式改成model2模式Model2模式的最大特点是:界面和后台操作是分离的,代码复用性高,可读性好,可维护性高缺点是:复杂性高•现在大部分公司采用的是model2模式.* Model2 模式*写成一个ming版的学生管理系统* 1,查询任务*2,添加学生*/package com.test2;import java.awt.*;import java.awt.eve nt.*;import java.sql.*;import javax.swi ng.*;public class Stude ntMa nageme nt exte nds JFrame impleme nts Action Liste ner {//定义一些控件JPanel jp1,jp2;JLabel jl;JButton jb1,jb2,jb3,jb4;JTable jt ;JTextField jtf;JScrollPa ne jsp =n ull;StuModel sm=null;public static void main( Stri ng[] args) {Stude ntMa nageme nt ta=new Stude ntMa nageme nt();}public Stude ntMa nageme nt(){jp1= new JPa nel();jl=new JLabel("请输入名字:");jtf= new JTextField(20);jb1= new JButton("查询");〃注册监听jb1.addAct ion Liste ner(this);〃把各个控件加入到jp1;jp1.add(jl);jpl.add(jtf);jpl.add(jbl);jp2=new JPa nel();jb2=new JButton("添加");jb3 =new JButton("修改");jb4 =new JButton(” 删除");〃注册监听jb2.addAct ion Liste ner(this);jb3.addAct ion Liste ner(this);jb4.addAct ion Liste ner(this);jp2.add(jb2);jp2.add(jb3);jp2.add(jb4);〃创建一个数据模型对象sm =new StuModel();〃初始化JTablejt=new JTable(sm);〃初始化jspjsp=new JScrollPa ne(jt);〃吧jsp放进到JFramethis.add(jsp);this.add(jp1,BorderLayout.NORTH);this.add(jp2,BorderLayout.SOUTH);this.setSize(500,400);this.setLocatio n(200, 200);this.setDefaultCloseOperatio n(JFrame.EXIT_ON_CLOSE);this.setVisible(true);}@Overridepublic void action Performed(Acti onEvent e) {// TODO Auto-ge nerated method stub〃判断是那个按钮被点击〃如果相应与监听在同一个类中也可以用下面方法.if(e.getSource()==jb1){〃因为把表的数据封装到StuModel中,我们就可以比较简单地完成查询任务Stri ng n ame=this.jtf.getText().trim();//写一个sql语句Stri ng sql ="select * from stude nt where stuName='"+name+""';//构建新的数据模型类并更新sm =new StuModel(sql);jt.setModel(sm);}〃当用户点击添加else if(e.getSource()==jb2){//合理应该为模式的状态,否则,还没有插完就会执行下面的语句,导致无法更新.StuAddDialog sad =new StuAddDialog(this,"添加学生”,true);〃重新再获得新的数据模型sm =new StuModel(); jt.setModel(sm);} else if(e.getSource()==jb3){System.out.pri nt("aaaa");int row num =this.jt.getSelectedRow();if(row num==-1){〃提示JOptionPane.showMessageDialog(this,"请选择一行”); return;//代表不要再往下面走了,谁调用就返回给谁}//显示修改对话框new StudentUpdateDialog(this,"修改对话框",true,sm,rownum);}〃当前用户点击删除else if(e.getSource()==jb4){//得到该学生的id//getSelectedRo会返回用户点击的行//如果一行都没选,则会返回-1in t row num=this.jt.getSelectedRow();if(row num==-1){〃提示JOptionPane.showMessageDialog(this,"请选择一行"); return;//代表不要再往下面走了,谁调用就返回给谁}//得到学生的编号String stuld=(String)sm.getValueAt(rownum, 0);//System.out.print(stuId);// 测试用的StuModel temp=new StuModel();//创建一个sql语句String sql ="delete from stude nt where stuId=?";Strin g[] paras ={stuld}; if(!temp.updateStude nt(sql, paras)){〃提示JOptionPane.showMessageDialog(this,"删除失败"); }sm =new StuModel();//解决一次无用的查询jt.setModel(sm);}}}* 这是我的一个Student 表的模型/***可以把对student 表的各种操作封装到该模型中*/ package com.test2;import java.sql.*;import java.util.Vector;import javax.swi ng.JTable;import javax.sw in g.table.*;public class StuModel exte nds AbstractTableModel{Vector rowData , colu mnN ames ;JTable jt =n ull ;//定义操作数据库需要的东西PreparedStateme nt ps =n ull ;Conn ecti on ct =n ull ;ResultSet rs = null ;Stri ng driver ="com.microsoft.sqlserver.jdbc.SQLServerDriver"Stri ng url ="jdbc:sqlserver://127.0.0.1:1433;databaseName=spdb1"Stri ng user ="sa";Stri ng password = "h123";//添加,删除,修改学生由于添加的参数不确定,因此用数组来传递参数public Boolea n updateStude nt( String sql,Stri ng [] paras ){boolea n b= true ;try{//1加载驱动Class. forName (driver );//2得到连接ct =DriverManager. getConnection ( url , user , password );//3创建ps对象ps =ct .prepareStatement(sql);//给ps的?赋值for ( int i=0;i<paras. length ;i++){//sql 中给int 传入String 类型,dbms会自动转的.ps .setString(i+1, paras[i]);}//4执行操作if ( ps .executeUpdate()!=1){b= false ;}}catch (Excepti on e){b= false ;e.pri ntStackTrace();}fin ally{try {if ( ps != null ) ps .close(); if ( ct != null ) ct .close();} catch (SQLException e) { e.pri ntStackTrace();}}return b;}public void in it(Stri ng sql){if (sql == null ){sql = "select * from stude nt"} //中间处理jt = new JTable();colu mnN ames =new Vector();//设置列名//rowData 可以存放多行rowData = new Vector();try{//加载驱动Class. forName ( "com.microsoft.sqlserver.jdbc.SQLServerDriver" );//System.out.pri nt("1");〃测试用的//得到连接ct =DriverMa nager. getC onn ecti on atabaseName=spdb1" , "sa" , "h123");//System.out.pri nt("2");//("jdbc:sqlserver://127.0.0.1:1433;d 测试用的ps=ct .prepareStatement(sql);//System.out.pri nt("3");〃测试用的rs =ps .executeQuery();//System.out.pri nt("4");〃测试用的while ( rs .next()){Vector hang = new Vector();//加入到rowData rowData .add(ha ng);}//System.out.pri nt("5");// } catch (Excepti on e){e.pri ntStackTrace();} fin ally{try {}//构造函数,初始化我们的数据模型public StuModel() 测试用的if ( rs != null if ( ps != null if ( ct != null )rs .close(); ) ps .close(); ) ct .close();} catch (SQLException e) {// TODO Auto-ge nerated catch blocke.printStackTrace();}//通过传递的sql语句来获得数据模型public StuModel(Str ing sql){ini t(sql);{this .init( null );}public void addStu(Stri ng sql){//根据用户输入的sql语句完成添加任务.}@Overridepublic String getColu mnN ame( int colum n) {return (String) this . columnNames .get(column);}@Override//得到共有多少列public int getColum nCou nt() {//System.out.pri nt("getColu mn Cou nt");// 测试所用return this . columnNames .size();}@Override//得到共有多少行public int getRowCou nt() {return this . rowData .size();}@Override//得到某行某列的数据public Object getValueAt( int rowln dex, int colu mnln dex) { return ((Vector) this . rowData .get(rowIndex)).get(columnlndex);package com.test2;import java.awt.*;import java.awt.eve nt.*;import java.sql.*;import javax.sw in g.*;public class StuAddDialog exte nds JDialog impleme nts Acti on Liste ner{ //定义我需要的swing 组件JLabel jl1 , jl2 ,jl3 , jl4 , jl5 ,jl6 ;JButt on jb1 ,jb2JJTextField jtf1 ,jtf2 , jtf3 ,jtf4 ,jtf5 , jtf6 ;JPa nel jp1 , jp2,jp3 ;//构造函数Frame代表父窗口口,title 代表窗口的名字,model指定是模式窗口,还是非模式的窗口public StuAddDialog(Frame own er,Stri ng title,jtf1 =new JTextField( );jtf2 =new JTextField( );jtf3 =new JTextField( );jtf4 =new JTextField( );jtf5=newJTextField();jtf6 =new JTextField( );jb1 =new JButton ( "添加");jb2 =new JButton ( "取消");jp1 =new JPa nel();jp2 =new JPa nel();jp3 =new JPa nel();//设置布局jp1 .setLayout( new GridLayout(6,1));boolea n model)super (owner,title, model); //调用父类构造方法,达到模式对话框效果jl1 =new JLabel( "学号“);jl2 =new JLabel( "姓名“);jl3 =new JLabel( "性别");jl4 =new JLabel( jl5 =new JLabel( jl6 =new JLabel( "年龄"); "籍贯"); "系别");学习必备欢迎下载//注册监听jb1 .addActi on Liste ner(this );//展现this .setSize(300,200);this .setLocatio n(200, 300);this .setVisible( true ); }@Overridepublic void acti on Performed(Acti on Eve nt e) {if (e.getSource()== jb1 ){jp2 .setLayout( new GridLayout(6,1)); jp 1 .add( jl1 jp 1 .add( jl2 jp 1 .add( jl3 jp 1 .add( jl4 jp 1 .add( jl5 jp 1 .add( jl6 jp 2 .add( jtf 1 jp 2 .add( jtf 2 jp 2 .add( jtf 3 jp 2 .add( jtf 4 jp 2 .add( jtf 5 jp 2 .add( jtf 6 jp 3 .add( jb 1 jp 3 .add( jb 2 //添加组件 ); ); ); ); ); ); ); ); ); ); ); ); this this this ); ); .add( jp1 ,BorderLayout. .add( jp2 ,BorderLayout. .add( jp3 ,BorderLayout.WEST); CENTER); SOUTH); //希望添加StuModel temp = new StuModel();学习必备 欢迎下载String sql= "insert into student values (?,?,?,?,?,?)"Stri ngjtf5 .getText(), jtf6 .getText()}; if (!temp.updateStudent(sql, paras)){//提示JOptionPane.showMessageDialog (this ,"添加失败");}//关闭对话框,关闭添加对话框this .dispose 。

韩顺平 hibernate 第3讲

韩顺平 hibernate 第3讲
由Domain Object->mapping-db 需要配置 <property name="hbm2ddl.auto">create</property> hbm2ddl.auto其中有四个属性分别有validate,update,create,create-drop
<property name="hbm2ddl.auto">create</property> hbm2ddl.auto其中有四个属性分别有validate,update,create,create-drop。 在sessionFactory 建立的时候自动检查数据库表结构,或者将数据库schema的DDL导到数据库中, 使用create-drop时,在显示关闭 sessionFactory时,将drop掉数据库的schema, create顾名思义,每次都会根据映射文件创建新表. update是数据库中表已经存在了,如果配置文件改变了(增加了一个属性,相当于再数据库中加了一个字 段)那么update会自动在数据库中加上这个字段, validate相当于每次插入数据之前都会验证数据库中的表结构和hbm文件的结构是否一致
hibernate从入门到精通
主讲 韩顺平
主讲:韩顺平 email:hanshunping@
hibernate从入门到精通
主讲 韩顺平
HQL和Criteria
HQL(Hibernate Query Language)-官方推荐
面向对象的查询语言,与SQL不同,HQL中的对象名是区分大小写的(除了JAVA类 和属性其他部分不区分大小写);HQL中查的是对象而不是表,并且支持多态;HQL 主要通过Query来操作,Query的创建方式: Query q = session.createQuery(hql); from Person from User user where =:name from User user where =:name and user.birthday < :birthday

韩顺平 课件 笔记 j2ee视频实战教程jsp第6讲

韩顺平 课件 笔记 j2ee视频实战教程jsp第6讲

第六讲预告:原因:1不在基础,不再简单2,之前那么简单主要是打基础3,此后将网上商城.mvc需求分析:前台用户:这个图可以明确用户在使用这个系统时可以做什么事. 系统管理员:需求分析→用例图(uml rose) [请自己看书学习]→功能模块→设计表1div+css2table +css3以上两种的混合思路是:一点点地加入表,接受容易并且也不容易晕~为了让大家更好地学习技术,先模仿一个购物网,[模仿写网站]→[创新]从无→有做项目的步骤:1.界面[模仿]2.数据库表的设计[难点:因为您可以看到各个网站的界面,但是看不到别人的数据库,所以只能根据界面来推出数据库表],很难只有通过长期的写项目才能写出来…<作出用户表和商品表>[其他的表后面再设计]3.建立web 工程..myShopping4.开始写主界面[index.jsp][界面用dreamweaver来做,使用死去活来法,先写静态网页,将来再变活~~~~]5.在dreamweaver中我们建立html界面,然后在myeclipse中建立jsp界面.将html代发拷到jsp中即可,在开发界面的时候,我们使用table+css布局…..Head的边框要写100%,因为是相对index.jsp的框而言的在table+css布局中常用的一个技巧是在行的某列中嵌入一个表格,可以做精确的布局..出不说说css是什么…Css是层叠样式表:就是用来控制网页的字体,颜色,大小,北京,边框,…….为了让head好看一点,初步使用cssHead.html已经ok了,怎样把刚才写的界面引入到index.jsp中呢?滚动广告:先会用,在会做…flash+javascript+照相[ps]用的步骤很简单,1把资源文件拷贝到指定位置2在要显示广告的位置加入一句话,非常重要的一句话<script language="javascript" src="../banner.js"></script>5.准备把我们静态的页面向动态的页面修改…详细请见下一讲…。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1. hibernate 是个框架framework
是orm框架,orm(object relation mapping)对象关系映射框架。

hibenate处于我们项目的持久层位置(所以又称为持久层框架);
2. hibernate实际上是对jdbc进行轻量级的封装。

hibernate 定义:是对jdbc进行轻量级的orm框架封装,充当项目的持久层。

3. hibernate的学习的内容:
A: hibernate api
B:hibernate.cfg.xml(这个是hibernate的核心配置文件)、
C:对象关系映射文件
4. 使用hibernate的好处
5. hibernate的基础还是JAVA的反射机制。

注意:在把hibernate的jar包粘贴到lib文件下后,要引入到项目中去,
引入成功后,在Referenced Librares中能看到引入的这些jar包。

6 hibernate的开发方式有三种:
注意:什么是pojo (plan old/ordinary java object 简单的java 对象)
注意:hibernate基本原理图
使用先建数据库的方式开发hibernante,下面是开发流程
1 创建一个项目 javaProject
2 创建一个简单项目框架示意图
3.在Myeclipse中引入hibernate开发包。

4.创建employe表
5. 创建一个domain对象和对象关系映射文件
注意:对象关系映射文件作用是用于指定domain对象和表的映射关系,该文件的取名是哟规定:domain对象.hbm.xml。

一般我们放在和domain对象同一个文件夹(包)下。

A:创建domain对象
B:创建对象关系映射文件。

domain对象.hbm.xml
6.手动配置我们的hibernate.cfg.xml配置文件,该文件用于配置连接数据库的类型、diver、用户名、密码、url、该文件的名称。

我们一般不修改。

hibernate.xml文件是用户配置domain对象和表的映射关系。

7.创建测试TestMain()
8. pojo对象必须序列化,序列化可以唯一标识一个对象,序列化后可以在网络上传播实例化其实就是实现一个接口就可以啦,如下所示:
9 TestMain.java里面的删除代码
要想在hibernate上自动创建表,在hibernate.cfg.xml中加入下面这一句话
再在Employee.hbm.xml中改变下面的语句
什么是pojo类,它有什么要求?
NHibernate产品支持.net程序操作
除了hibernate这个orm框架外,还有什么框架?
Ibatis、 ejb cmp、apache OJB、jaxor、toplink等等。

注:事务提交和回滚:一组业务整体处理的行为叫一个事务。

这一组的业务都能成功处理,我们就可以把这个事务提交来保存你已做的行为结果。

但如果一组中有任何的差错出现的话,我们就认为这事务不成功,需要回滚来撤消之前的操作。

举例:你去银行转账,转账我们有两步吧,从你账户中取出钱再往他账户中加钱。

那这两步银行是必须要确保正确无误的进行的。

要被看做成一个事务。

其中任何一步出错就算是转账失败,但可能你这时是已经从你账户中扣了钱了,又没往他账户里加钱?怎么办算了?你不肯吧。

所以银行会事务回滚,不保存你刚才的操作,即恢复到你没转账之前的状态。

相关文档
最新文档