Hibernate的xml方法配置和操作代码
一、gradle中包:
compile group: 'org.hibernate', name: 'hibernate-core', version: '5.2.12.Final'
compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.40'
二、项目中导入hibernate
1、向gradle配置文件中引入一中的两个包
2、点击按钮,在facets中添加hibernate,
这时,右下角会出现一个
持久化选项卡,点击该选项卡:
右键点击B7_main选项,
点击Generate Persisitence Mapping,点击By Database Schema,

(需要自己新建一个po层),选择自己需要的数据库,表以及关系,然后ok即可
它会自动生成一个hibernate.cfg.xml的配置文件,将其拖入resources目录下即可
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.url"><![CDATA[jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8]]></property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.username"></property>
<property name="connection.password"></property>
<mapping resource="User.hbm.xml"/>
<!-- DB schema will be updated if needed -->
<!-- <property name="hbm2ddl.auto">update</property> -->
</session-factory>
</hibernate-configuration>
其中mapping标签必须放在property标签下,不能混着放,每次更新gradle后记得要重新配置数据库的链接密码。
还会自动关系映射出一个和user表对应的类:User(存放于po层)
package com.weikun.po; /**
* Created by Administrator on 2018/3/25.
*/
public class User {
private int id;
private String username;
private String password; public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} @Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false; User user = (User) o; if (id != user.id) return false;
if (username != null ? !username.equals(user.username) : user.username != null) return false;
if (password != null ? !password.equals(user.password) : user.password != null) return false; return true;
} @Override
public int hashCode() {
int result = id;
result = 31 * result + (username != null ? username.hashCode() : 0);
result = 31 * result + (password != null ? password.hashCode() : 0);
return result;
}
}
之后就可以在dao层通过控制User类下的属性方法来映射操控底层数据库的数据了。
还会自动生成和映射到user表的配置文件user.hbm.xml
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.weikun.po.User" table="user" schema="test">
<id name="id">
<column name="id" sql-type="int(11)"/>
</id>
<property name="username">
<column name="username" sql-type="varchar(200)" length="200"/>
</property>
<property name="password">
<column name="password" sql-type="varchar(20)" length="20"/>
</property>
</class>
</hibernate-mapping>
其中<id>标签是指主键,如果用注解的话是@id来标注主键。
联合主键的配置文件代码如下:
<composite-id>
<key-property name="username">
<column name="username" sql-type="varchar(10)" length="10"/>
</key-property>
<key-property name="sex">
<column name="sex" sql-type="varchar(10)" length="10"/>
</key-property>
</composite-id>
三、dao层的操作代码
package com.weikun.dao; import com.weikun.po.User;
import com.weikun.po.User5;
import com.weikun.po.User5PK;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test; import java.util.List; /**
* Created by Administrator on 2018/3/25.
*/
public class UserDAOImpl {
private Configuration configuration=null;
private SessionFactory sessionFactory=null; public UserDAOImpl(){
configuration=new Configuration().configure("hibernate.cfg.xml");//1、将配置文件加载到配置类的对象中 sessionFactory=configuration.buildSessionFactory();//2、使用配置对象创建对话工厂 }
@Test
public void queryByAll(){ Session session=null;
session=sessionFactory.openSession();//3、使用对话工厂打开会话
List<User> list=session.createQuery("from User ").list();//sql--H QL4、执行回话的具体行为
list.forEach(user->System.out.printf("%s-%s\n",user.getUsername(),user.getPassword())); session.close();//5、关闭会话
} @Test
public void queryById(){
Session session=null;
session=sessionFactory.openSession();
User user=session.get(User.class,288);//get
System.out.printf("%s-%s",user.getUsername(),user.getPassword());
session.close(); }
@Test
public void update(){
Session session=null;
session=sessionFactory.openSession();
Transaction transaction=session.beginTransaction();
User user=new User();
user.setId(285);
user.setUsername("MENG");
user.setPassword("8888");
try{
session.update(user);
transaction.commit();
}catch(Exception e){
transaction.rollback();
e.printStackTrace();
}
session.close(); }
@Test
public void del(){
Session session=null;
session=sessionFactory.openSession();
Transaction transaction=session.beginTransaction();
User user=new User();
user.setId(286);
try{
session.delete(user);
transaction.commit();
}catch(Exception e){
transaction.rollback();
e.printStackTrace();
}
session.close();
}
@Test
public void add5(){
Session session=null;
session=sessionFactory.openSession();
Transaction transaction=session.beginTransaction();
User5 user5=new User5();
user5.setUsername("rose1");
user5.setSex("f");
user5.setAge(199);
try{
session.save(user5);
transaction.commit();
}catch(Exception e){
transaction.rollback();
e.printStackTrace();
} session.close();
}
@Test
public void add(){
Session session=null;
session=sessionFactory.openSession();
Transaction transaction=session.beginTransaction();
User user=new User();
user.setPassword("yu");
user.setUsername("YUYUYU");
try{
session.save(user); transaction.commit();
}catch(Exception e){
transaction.rollback();
e.printStackTrace();
} session.close(); }
}
先创建一个配置文件Configuration
private Configuration configuration=null;
再创建一个SessionFactory工厂
private SessionFactory sessionFactory=null;
public UserDAOImpl(){
configuration=new Configuration().configure("hibernate.cfg.xml");//1、将配置文件加载到配置类的对象中
sessionFactory=configuration.buildSessionFactory();//2、使用配置对象创建对话工厂
}
在构造器中实例化配置对象,创建对话工厂。
使用sessionFactory开一个回话session
除了查询以外,其他的增删改都需要使用事务管理,使用session开始一个事务
session=sessionFactory.openSession();
Transaction transaction=session.beginTransaction();
需要做一个trycatch,try中处理事务,catch中进行事务回滚,最后关闭事务
try{
session.save(user);
transaction.commit();
}catch(Exception e){
transaction.rollback();
e.printStackTrace();
}
session.close();
Hibernate的xml方法配置和操作代码的更多相关文章
- 转:HIBERNATE一些_方法_@注解_代码示例---写的非常好
HIBERNATE一些_方法_@注解_代码示例操作数据库7步骤 : 1 创建一个SessionFactory对象 2 创建Session对象 3 开启事务Transaction : hibernate ...
- Hibernate 注解时 hibernate.hbm.xml的配置方法 以及与SSH整合里的配置方式
①纯Hibernate开发: 当你在Bean中写入注解后,需要告诉hibernate哪些类使用了注解. 方法是在hibernate.hbm.xml文件中配置 <!DOCTYPE hibernat ...
- Spring整合Hibernate的XML文件配置,以及web.xml文件配置
利用Spring整合Hibernate时的XML文件配置 applicationContext.xml <?xml version="1.0" encoding=" ...
- hibernate.hbm.xml文件配置入门小结(1)
在Hibernate中,各表的映射文件xxx.hbm.xml可以通过工具生成,例如在使用MyEclipse开发时,它提供了自动生成映射文件的工具. hibernate.hbm.xml文件的基本结构如下 ...
- hibernate.cfg.xml常见配置
转载自:http://blog.csdn.net/qiaqia609/article/details/9456489 <!--标准的XML文件的起始行,version='1.0'表明XML的版本 ...
- hibernate4中使用Session doWork()方法进行jdbc操作(代码)
Hibernate3.3.2版本中getSession().connection()已被弃用,hibernate4中官方推荐使用Session doWork()方法进行jdbc操作 首先看看Work接 ...
- hibernate4.3.5,Final hibernate.cfg.xml的配置
今天是接触hibernate的第二天,用来练习的是hibernate最新的版本hibernate-release-4.3.5.Final 要使用hibernate,则先要引入它的jar包,要引入的ja ...
- Hibernate框架 主配置文件 Hibernate.cfg.xml 映射配置 说明
1 主配置文件 Hibernate.cfg.xml 主配置文件中主要配置:数据库连接信息.其他参数.映射信息! 常用配置查看源码: hibernate-distribution-3.6.0.Final ...
- 【Hibernate学习笔记-4】在hibernate.cfg.xml中配置C3P0数据源
jar包 hibernate.cfg.xml <?xml version="1.0" encoding="GBK"?> <!DOCTYPE h ...
随机推荐
- HDU 4268 Alice and Bob(贪心+Multiset的应用)
题意: Alice和Bob有n个长方形,有长度和宽度,一个矩形能够覆盖还有一个矩形的条件的是,本身长度大于等于还有一个矩形,且宽度大于等于还有一个矩形.矩形不可旋转.问你Alice最多能覆盖Bo ...
- Photon + Unity3D 线上游戏开发 学习笔记(一)
大家好. 我也是学习Photon + unity3D 的新手 有什么说错的地方大家见谅哈. 我的开发环境是 unity3D 4.1.3 , Visual Studio 是2010 版本号的 p ...
- 杭电(hdu)ACM 4548 美素数
美素数 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total Submis ...
- String与StringBuffer的差别
String 是一个常量,即一旦创建不可更改 输出结果为:helloworldjeok 看似.string变量name的值改变了,事实上此name非彼name. 输出结果为: sex:hello wo ...
- 道里云SDN云网络技术:使云能够“众筹”
容器云来了! 容器云的网络规模将比虚拟机云的情况扩大10-100倍,容器云与虚拟机云互联需求也将使云网络管控复杂度成数倍增长.SDN业界迎来了空前挑战.本报告分享道里云公司SDN技术:怎样将云的 ...
- Python笔记(八)
#-*-coding:utf-8-*- # Python内置函数 print abs(-45) # 绝对值函数 print divmod(7,2) # 返回一个包含商和余数的元组 # input(&q ...
- 基于nginx的最基础的TCP代理,经过测试可通!
测试操作系统为win7,nginx版本为1.9.4. 在本机上编写java程序一个socket服务类SocketServer,监听端口为8889, (增加了一个SocketServerThread线程 ...
- HD-ACM算法专攻系列(21)——Wooden Sticks
题目描述: AC源码: 此题考查贪心算法,解题思路:首先使用快速排序,以w或l按升序排序(注意相等时,应按另一值升序排序),这样就将二维变量比较,变为了一维的,排好序的一边就不需要去管了,只需要对未排 ...
- SQL Server 获取两个日期间的日期
declare @start datetime declare @end datetime set @start = '2018-01-25' set @end = '2018-02-03' sele ...
- java实现简单回文算法
算法要求 编写一个程序,判断一个字符串是否为"回文".回文串:字符串字符从前往后与从后往前一致(中心对称). 算法思路 首先将字符串等分左右两块,然后依次对称比较每一对字符是否相同 ...
按钮,在facets中添加hibernate, 