0.  M  V  C
M model JDBC/hibernate/mybatis
V view JSP
C contorller struts2


java DataBase
User{id,name,age} t_user(id,name,age)
User user --> 1 c35 18
User user2 <-- 2 c36 19
Connection conn
String sql="insert into t_user values(?,?,?)"
PreparedStatement psta
psta.setXXX(1,user.getId());
psta.setXXX(1,user.getName());
psta.setXXX(1,user.getAge());
psta.executeUpdate();


Connection conn
String sql="select * from t_user where id=?";
PreparedStatement psta
psta.setInt(1,2);
ResultSet res=psta.executeQuery();
User user2=new User();
user2.setId(res.getInt("id"));
..
..
user2
=============================================================================================
1.hibernate 持久层框架 开源
*是一个底层封装了jdbc的orm框架
*orm:Object(java对象) r(关系型数据库) m(mapping映射) 搭建java和数据库间的通信桥梁
1.将java对象和数据库表映射在一起
2.对象中的属性和库表中列映射在一起
3.在java对象和数据库之间,直接通信。
User user=new User(1,"c35",18);
insert(user);
User user2=getUser(2);
=============================================================================================
2.hibernate 开发流程
2.1 导入依赖:
核心jar:hibernate.jar
第三方依赖jar
2.2 建立hibernate配置文件:
名称:hibernate.cfg.xml
位置:src下
<hibernate-configuration>
<session-factory>
<!-- 数据库连接参数 -->
<property name="hibernate.connection.driver_class">oracle.jdbc.OracleDriver</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:xe</property>
<property name="hibernate.connection.username">hr</property>
<property name="hibernate.connection.password">hr</property>
<!-- hibernate自身属性 -->
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<!-- 方言:指定连接的数据种类 -->
<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
<!--
防止j2ee6冲突配置
<property name="javax.persistence.validation.mode">none</property>
-->
<!-- 注册映射 -->
<mapping resource="com/c35/entity/user.hbm.xml"/>
</session-factory>
</hibernate-configuration>
2.3 在映射文件中搭建orm 映射
名称:任意 xxx.hbm.xml
位置:任意
<hibernate-mapping>
<!-- 映射java类和库表 -->
<class name="com.c35.entity" table="t_user35">
<!--映射类的属性和库表的列 -->
<!-- 映射表中的ID列 -->
<id name="id" column="id" type="java.lang.Integer">
<!-- id生成器(生成策略),保证在插入数据时id唯一
increment:递增策略
-->
<generator class="increment"></generator>
</id>
<property name="name" column="name" type="java.lang.String"></property>
<property name="age" column="age" type="java.lang.Integer"></property>
</class>
</hibernate-mapping>
2.4 在配置文件中注册映射
<!-- 注册映射 -->
<mapping resource="com/c35/entity/user.hbm.xml"/>
2.5 测试 api
*Configuration -->加载配置信息
Configuration cfg=new Configuration().configure();//加载src下hibernate.cfg.xml文件
*SessionFactory -->session工厂,用户生成session
SessionFactory sf=cfg.buildSessionFactory();
*Session -->用以执行curd操作(内置了Connection)
*注意:其中Configuration和SessionFactory全局唯一,Session独享。
*Session api: (在做增删改操作时,需要控制事务。)
*查询:session.get(Class,ID);//查询某张表中的id为xx的数据
User user=(User)session.get(User.class, 1);//查询id为1的用户
*增加:
//创建User
User user=new User(null,"c36",19);
//在做增删改操作时,需要控制事务。
Transaction tx=session.beginTransaction();
//插入User
session.save(user);
System.out.println(user.getId());
tx.commit();
//tx.rollback();
*更新:
//在做增删改操作时,需要控制事务。
Transaction tx=session.beginTransaction();
//查询出要更新的数据
User user=(User)session.get(User.class,4);
user.setAge(21);
user.setName("c37");
session.update(user);//更新用户
tx.commit();
//tx.rollback();
*删除:
//在做增删改操作时,需要控制事务。
Transaction tx=session.beginTransaction();
//选择要删除的数据
User user=(User)session.get(User.class,4);
session.delete(user);//删除数据
tx.commit();
//tx.rollback();
*关闭资源:
session.close();
==============================================================================================
2.Session创建方式:
SessionFactory sf=xxx;
*sf.openSession();//创建一个崭新的Session对象
*sf.getCurrentSession();//初次被调用,创建一个Session对象session1,之后的在同一个线程内的调用
//就不再创建新的Session对象了,而是依然使用session1
*注意:当使用getCurrentSession获取session时,需要添加一行配置:
//开启currentSession方法,使得getCurrentSession可用来获得线程唯一的Session
<property name="current_session_context_class">thread</property>
*getCurrentSession获得的Session对象的特点:
1.curd都需要控制事务
2.在事务提交后,会自动close.
==============================================================================================
3.技巧:
<!--
package="com.c35.entity" 指定java实体的包路径【技巧1】
-->
<hibernate-mapping package="com.c35.entity">
<!-- 映射java类和库表
在影射属性和列时,如果属性和列同名,则column可省略【技巧2】
-->
<class name="User" table="t_user35">
<!--映射类的属性和库表的列 -->
<!-- 映射表中的ID列 -->
<id name="id" type="java.lang.Integer">
<!-- id生成器(生成策略),保证在插入数据时id唯一
increment:递增策略
-->
<generator class="increment"></generator>
</id>
<property name="name" type="java.lang.String"></property>
<property name="age" type="java.lang.Integer"></property>
</class>
</hibernate-mapping>
==============================================================================================