(二)详细代码教程——成功在Netbea…
来源:互联网 发布:淘宝怎么做数据分析 编辑:程序博客网 时间:2024/05/18 03:49
首先,新建Project以后,选择Java——Java应用程序:
选择库,然后选择添加库,添加Hibernate4.3.x(当然其他版本也相同,这里使用的是Netbeans帮下载好的自带库)。
importjava.io.Serializable; private static final long serialVersionUID =5548279324472937805L; private int id; private String name; private int age; public Student() { } public int getId() { returnid; } public void setId(int id) { this.id =id; } public String getName() { returnname; } public void setName(String name) { this.name= name; } public int getAge() { returnage; } public void setAge(int age) { this.age =age; }
非常纯粹的Java类。集成
到自己写的Java程序里面
非常方便,当Hibernate
取出数据库中的一行的时
候,就会生成这样一个
Student类,然后你就可
以把这个类导入自己的工
程项目里面来用了。
public static void main(String[] args){ StudentTest st = new StudentTest(); st.createTable(); st.add(); st.get(); }
然后添加类库:鼠标右键点击那个咖啡图标的项目——属性:
选择库,然后选择添加库,添加Hibernate4.3.x(当然其他版本也相同,这里使用的是Netbeans帮下载好的自带库)。
接下来,选择添加JAR/文件夹依次添加其他必须的库:
1、ejb3-persistence.jar (这个库额外从网上下载)
2、hibernate-jpa-2.1-api-1.0.0.Final.jar(这个库在自己下载解压的hibernate文件夹的lib——release——required文件夹里面,文中示例是拷贝到下载文件夹下的)
3、my-sql-connector-java-5.1.39-bin.jar(这个是安装MySQL的时候,勾选Connector.J5.1附带安装上的,Jar文件在相应的文件夹里面。)
接下来就依次讲解各部分代码:
(由于断断续续也在自己研究当中,写了一些奇怪的类,请大家忽视。那是自己测试用的,没有也无所谓。)
MainClass.java主要就是拿来运行Test的。
StudentTest.java里面写了一些启动hibernate,新建表格,并往里面插入数据、检索数据的代码。
而Student.java就是基础类,定义了一个数据表的表头。其实也就是用java语言的格式来定义一个数据库,非常方便。
Student.hbm.xml是配置文件,告诉Hibernate我该去哪个Java文件里面把MySQL返回的数据映射到Object。
最后hibernate.cfg.xml是数据库连接的配置文件,告诉系统我该去连接哪个数据库,用户名和密码分别是啥,有没有啥额外的连接要求,是否开启日志等等。
说了这么多,感觉很麻烦啊,为啥不Send一句SQL语句然后再把recv的数据用字符串分析来区分开呢?因为hibernate就是不想这么做啊!(大误……)
我个人理解,首先这样是方便迁移吧。大家可以先看看这个Student类:
我个人理解,首先这样是方便迁移吧。大家可以先看看这个Student类:
public class Student implementsSerializable {
}
可以看到这个类是个非常纯粹的Java类。集成
到自己写的Java程序里面
非常方便,当Hibernate
取出数据库中的一行的时
候,就会生成这样一个
Student类,然后你就可
以把这个类导入自己的工
程项目里面来用了。
好的,我们建立了这样一个Student类
接下来我们得对这个类进行“映射”。为何要映射?这里搜集了网上的一些说法:有说是因为xml文件方便配置,毕竟java文件一但编译成class了以后就不能再方便地改了(源文件不再自己手里,或者使用者只会用却没编程技术)。——但是我还是有个疑问,只改xml文件不改java类真的行吗?又有说法是因为xml才是标准,大家都要遵循……但是遵循什么,是为了分离而分离吗?
;、返回的^%$#类型是int类型。
于是如何映射呢?我们建立一个:
Student.hbm.xml文件
<?xmlversion="1.0"?> <!--一个class标签对应一个实体类,name属性指定实体类名称,table属性指定关联的数据库表--> <classname="Student"table="stu_tab"> <!-- 主键 --> <id name="id"column="stu_id"> <!-- 主键的生成策略 --> <generatorclass="native"></generator> </id> <!--其他属性,name对应实体类的属性,column对应关系型数据库表的列 --> <propertyname="name"column="stu_name"></property> <propertyname="age"column="stu_age"></property> </class>
<!DOCTYPEhibernate-mapping SYSTEM"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
</hibernate-mapping>
然后我们得对Hibernate进行配置,告诉它我们连接哪个数据库,用户名和密码都是啥:
<?xmlversion='1.0'encoding='utf-8'?> "-//Hibernate/Hibernate Configuration DTD3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <!-- 配置mysql数据库的连接参数 dialect就是“方言”,因为hibernate是要把Java对象转换成关系数据库来描述的, 而关系数据库虽然有一些统一的标准,如SQL-92等,但是实际上各数据库如Oracle, MySQL, MS SQLServer等等为了提高性能或增加功能都提供了一些额外的标准或语法,因此,hiber- nate为了更好适配各种关系数据库,针对每种数据库都指定了一个方言dialect。 你可以看到hibernate里面实际上方言只是一个类,它里面将不同数据类型、SQL语法转 换成hibernate能理解的统一的格式。但注意,如果没有对应的dialect,Hibernate是无法 使用这种数据库进行对象关系转换的。 上次我用了个H2数据库,找到一个H2的dialect,就可以马上用起Hibernate了。 --> <propertyname="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!--驱动程序名 --> <propertyname="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <!--数据库名称 --> <propertyname="hibernate.connection.url">jdbc:mysql://localhost:3306/Mysql?useSSL=true</property> <!--用户名 --> <propertyname="hibernate.connection.username">root</property> <!--密码 --> <propertyname="hibernate.connection.password">password</property> <!--【非必须】让hibernate打印它所生成的SQL代码 print all generated SQL to theconsole --> <propertyname="hibernate.show_sql">true</property> <!--WARN: HHH000402: Using Hibernate built-inconnection pool (not for production use!) Hibernate自带的连接池性能不高,缺乏响应大批量请求以及容错能力,甚至还有BUG, 在项目运用中不值得推荐。所以会WARN,警告我们不要使用build-in连接池。添加下列 代码可解决问题: --> <propertyname="c3p0.min_size">5</property><!--在连接池中可用数据库连接的最小数目--> <propertyname="c3p0.max_size">30</property><!--在连接池中所有数据库连接的最大数目--> <propertyname="c3p0.time_out">1800</property><!--设定数据库连接的超时时间--> <propertyname="c3p0.max_statement">50</property><!--可以被缓存的PreparedStatement的最大数目--> <!--设置默认schema --> <propertyname="hibernate.default_schema">newschema</property> <!--添加Student.hbm.xml映射文件 --> <mappingresource="Student.hbm.xml"/>
<!DOCTYPEhibernate-configuration PUBLIC
<hibernate-configuration>
<session-factory>
</session-factory>
</hibernate-configuration>
我们开始写测试的类StudentTest.java:
在这个类中,我们进行几个功能(大家可以按照需要来增减):
importorg.hibernate.Session; public void createTable() { Configuration cfg = new Configuration().configure(); SchemaExport se = new SchemaExport(cfg); se.create(true, true); } public void get() { Configuration cfg = new Configuration().configure(); StandardServiceRegistryBuilder ssrb = newStandardServiceRegistryBuilder() .applySettings(cfg.getProperties()); ServiceRegistry service = ssrb.build(); SessionFactory factory =cfg.buildSessionFactory(service); Sessionsession = factory.openSession(); Transaction tx = session.beginTransaction(); try{ Student stu = (Student)session.get(Student.class, 1); stu.setName("lisi"); tx.commit(); } catch(Exception e) { tx.rollback(); } finally{ session.close(); } }
public void add() { Configuration cfg = new Configuration().configure(); //如果是hibernate4.0以前的版本,使用如下的方式创建SessionFactory对象 // SessionFactory factory =cfg.buildSessionFactory(); StandardServiceRegistryBuilder ssrb = newStandardServiceRegistryBuilder() .applySettings(cfg.getProperties()); ServiceRegistry service = ssrb.build(); SessionFactory factory =cfg.buildSessionFactory(service); Sessionsession = factory.openSession(); Transaction tx = session.beginTransaction();
try{ //new一个Student类的对象,在未执行session.save(stu1)方法时,它是瞬时对象 Student stu1 = newStudent(); stu1.setName("yuzhiping"); stu1.setAge(22); session.save(stu1); stu1.setAge(43); tx.commit(); } catch(Exception e) { tx.rollback(); } finally{ session.close(); } }
大家可以看到,Create方法
里面没有Student类。我猜想Hiber-
nate可能会把注册在配置文件里面
的所有表头都个给在数据库里面建
立新表。
接着get方法通过Session获取
了表里面的第一个元素,然后对这
个元素的Name进行了修改,修改
成了list。
而add方法在表里面新添加一
行元素。可以看到新加元素比较简
单,直接new一个Student,然后
在session里面save就可以了。
importorg.hibernate.SessionFactory;
importorg.hibernate.Transaction;
importorg.hibernate.boot.registry.StandardServiceRegistryBuilder;
importorg.hibernate.cfg.Configuration;
importorg.hibernate.service.ServiceRegistry;
importorg.hibernate.tool.hbm2ddl.SchemaExport;
public class StudentTest{
//选择用哪个目录下的hibernate.hbm.xml配置文件
}
里面没有Student类。我猜想Hiber-
nate可能会把注册在配置文件里面
的所有表头都个给在数据库里面建
立新表。
接着get方法通过Session获取
了表里面的第一个元素,然后对这
个元素的Name进行了修改,修改
成了list。
而add方法在表里面新添加一
行元素。可以看到新加元素比较简
单,直接new一个Student,然后
在session里面save就可以了。
最后是MainClass.java。用来执行我们写的StudnetTest.java
很简单:
public class MainClass{
}
当然为了能够在正确的schema(数据库)中创建表,我们也写了一个配置文件:
orm.xml
<?xmlversion="1.0"encoding="UTF-8"?>
<entity-mappings
xmlns="http://java.sun.com/xml/ns/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/ormhttp://java.sum.com/xml/ns/persistence/orm_1_0.xsd"
version="1.0">
<persistence-unit-metadata>
<persistence-unit-defaults>
<schema>newschema</schema>
</persistence-unit-defaults>
</persistence-unit-metadata>
</entity-mappings>
最终的效果可以通过MySQLClient命令行查看,也可以通过Workbench查看。这里我用Workbench查看如下:
配置中遇到的各种问题的解决办法汇总
0 0
- (二)详细代码教程——成功在Netbea…
- Linux(1)——在Linux下安装Nodejs(详细教程,包会),并成功创建一个简单的服务器
- 批处理详细教程(二)
- Servlet详细教程(二)
- WebRTC VideoEngine超详细教程(二)——集成OPENH264编解码器
- WebRTC VideoEngine超详细教程(二)——集成OPENH264编解码器
- WebRTC VideoEngine超详细教程(二)——集成OPENH264编解码器
- ffmpeg超详细综合教程(二)——为直播流添加滤镜
- SpringMVC详细示例实战教程(二)
- Nginx详细安装部署教程(二)
- WPE详细教程二
- 炫贴试验(二)文字移动详细代码+…
- 炫贴试验(二)文字移动详细代码+…
- 炫贴试验(二)文字移动详细代码+…
- 炫贴试验(二)文字移动详细代码+…
- 炫贴试验(二)文字移动详细代码+…
- 炫贴试验(二)文字移动详细代码+…
- 炫贴试验(二)文字移动详细代码+…
- NodeJS 安装
- 成功在Netbeans下配置hibernate并…
- Windows下 tensorflow安装
- (一)啥是Hibernate——成功在Netbe…
- 将博客搬至CSDN
- (二)详细代码教程——成功在Netbea…
- Git 与 GitHub 使用
- Git 连接 GitHub
- 单元测试Netbeans 出现 …
- Hexo+Github 博客搭建
- 用JavaSE简单入门MyBatis连接MySQL…
- iOS开发之再探多线程编程:Grand Central Dispatch详解
- hive hql 语句
- MyBatis与Hibernate图文对比