如何使用hibernate与mysql数据库进行连接

如何使用hibernate与mysql数据库进行连接,第1张

方法/步骤

首先,我们把hibernate最基本的数据库连接,使用mysql。

见一个java工程,见一个包名为book, 在book的包下加一个java类Book.java,其代码如下: package book

public class Book { private Integer idprivate String nameprivate

String writerpublic Integer get hibernate最基本的数据库连接,使用mysql。

见一个java工程,见一个包名为“book”

然后在在book的包下加一个java类Book.java,其代码如下:

package book public class Book {private Integer id private

String name private String writer public Integer getId() {

return id }public void setId(Integer id) {this.id = id

}public String getName() {return name }public void

setName(String name) {this.name = name }public String

getWriter() {return writer }public void setWriter(String

writer) {this.writer = writer }}

温馨提示:下图仅供欣赏,不作为教学。

然后在book包下建一个book.hbm.xml,其代码如下:

<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="book"default-lazy="false">

<class name="Book"> <id name="id"> <generator

class="increment"/> </id> <property name="name"

></property> <property name="writer"

></property> </class> </hibernate-mapping>

温馨提示:下图仅供欣赏,不作为教学。

这个事与数据库里面的字段名形成映射关系,自己在mysql建立book表时与之对应,id是自增长的,

然后在工程的根目录下建一个hibernate.cfg.xml.其代码如下:<?xml version='1.0'

encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC

"-//Hibernate/Hibernate Configuration DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration> <session-factory>

<property

name="connection.driver_class">com.mysql.jdbc.Driver</property>

<property

name="connection.url">jdbc:mysql://localhost/mydb</property>

<property name="connection.username">root</property>

<property name="connection.password">root</property>

<property

name="dialect">org.hibernate.dialect.MySQLDialect</property>

<property name="show_sql">true</property> <!--

<property

name="hbm2ddl.auto">${hibernate.hbm2ddl.auto}</property>-->

<!-- <property

name="current_session_context_class">thread</property>-->

<mapping resource="book/Book.hbm.xml" />

</session-factory> </hibernate-configuration>

温馨提示:下图仅供欣赏,不作为教学。

这是连接mysql数据库的,用户名和密码改为你mysql数据库的

<property name="show_sql">true</property>这是在后台打印sql语句

<mapping resource="book/Book.hbm.xml" />这是找到映射文件。

温馨提示:下图仅供欣赏,不作为教学。

然后些个测试类:代码如下:

package test import org.hibernate.Session import

org.hibernate.SessionFactory import org.hibernate.Transaction

import org.hibernate.cfg.Configuration import book.Book public

class MainTest {/*** @param args*/public static void

main(String[] args) {try {Configuration cfg=new

Configuration()。configure();SessionFactory

sf=cfg.buildSessionFactory();Session session = sf.openSession();

Transaction ts=session.beginTransaction();Book b=new Book();

b.setName("hibernate");b.setWriter("div");session.save(b);//

Book b=(Book) session.get(Book.class,1);// if(b!=null){//

b.setName("xujun");// System.out.println("书名为:"+b.getName());//

System.out.println("作者为:"+b.getWriter());// session.delete(b);//

}ts.commit();session.close();sf.close();} catch

(Exception e) {e.printStackTrace();}}}

mysql表的字段如下:

把数据库建好后就可以测试。对了,关键的还没有说,还得把antlr.jar,cglib.jar,asm.jar,asm-attrs.jar,commons-colletions.jar,commons-logging.jar,ehcache.jar,

jta.jar,dom4.jar,log4.jar,hibernate3.jar引入到lib目录下

您好,increment:代理主键,适合于所有数据库,由hibernate维护主键自增,和底层数据库无关,但是不适合于2个或以上hibernate进程。

identity:代理主键,适合于mysql或ms

sql

server等支持自增的dbms,主键值不由hibernate维护。

sequence:代理主键,适合于oracle等支持序列的dbms,主键值不由hibernate维护,由序列产生。

native:代理主键,根据底层数据库的具体特性选择适合的主键生成策略,如果是mysql或sqlserver,选择identity,如果是oracle,选择sequence。

hilo:代理主键,hibernate把特定表的字段作为hign值,生成主键值

uuid.hex:代理主键,hibernate采用uuid

128位算法生成基于字符串的主键值

assign:适合于应用程序维护的自然主键。

想要实现安全的自增只能使用hibernate维护得自增属性identity,或者使用开发者自己维护id值assign。如果使用identify,经过测试发现使用无论开发者是否给对象的id赋值,hibernate在保存对象时会自动给id赋值(为mysql表中id最大值+1);如果使用assign,用户在保存对象前必须给对象的id赋值,值必须大于等于0,如果等于0时,那么数据表id记录会使用mysql数据库维护的最大id+1,如果大于0时,则表id则为用户设置的对象的id值。

经过实验得出,想要实现mysql的sql语句句式以及最终效果,需要设置hibernate配置文件的id自增属性为assign,如果知道id的话则设置对象的id为已知的id,否则设置id的值为0,。

如果id自增属性为assign,那么hibernate保存对象后,对象的id仍然为保存前设置的值;

如果id自增属性为identity,那么hibernate保存对象后,对象的id为数据库中该条记录的id的值。

不是。

一、两者最大的区别

针对简单逻辑,Hibernate与MyBatis都有相应的代码生成工具,可以生成简单基本的DAO层方法。

针对高级查询,MyBatis需要手动编写SQL语句,以及ResultMap,而Hibernate有良好的映射机制,开发者无需关心SQL的生成与结果映射,可以更专注于流程。

二、开发难度对比

Hibernate的开发难度大于MyBatis,主要由于Hibernate比较复杂,庞大,学习周期比较长。

MyBatis则相对简单,并且MyBatis主要依赖于生气了的书写,让开发者刚进更熟悉。

三、sql书写比较

Hibernate也可以自己写sql来指定需要查询的字段,但这样就破坏了Hibernate开发的简洁性,不过Hibernate具有自己的日志统计。

MyBatis的sql是手动编写的,所以可以按照要求指定查询的字段,不过没有自己的日志统计,所以要借助Log4j来记录日志。

四、数据库扩展性计较

Hibernate与数据库具体的关联在XML中,所以HQL对具体是用什么数据库并不是很关心

MyBatis由于所有sql都是依赖数据库书写的,所以扩展性、迁移性比较差。

五、缓存机制比较

Hibernate的二级缓存配置在SessionFactory生成配置文件中进行详细配置,然后再在具体的表对象映射中配置那种缓存。

MyBatis的二级缓存配置都是在每个具体的表对象映射中进行详细配置,这样针对不同的表可以自定义不同的缓冲机制,并且MyBatis可以在命名空间中共享相同的缓存配置和实例,通过Cache-ref来实现。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7222978.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-03
下一篇 2023-04-03

发表评论

登录后才能评论

评论列表(0条)

保存