1.orm思想
orm思想为对象关系映射*
1>让实体类和数据库表进行一一对应关系
对jdbc的封装
 
实体类与数据库表对应
 
实体类属性和表里字段对应
 
2>不需要直接操作数据库表,而操作表对应实体类对象
 
2.配置实体类和数据库表一一对应关系<映射关系>
使用配置文件实现映射关系
 
2.HelloWorld
2.1倒入相关依赖
 
 
 
<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
   <groupId>org.hibernate</groupId>
   <artifactId>hibernate-core</artifactId>
   <version>5.4.10.Final</version>
</dependency>
<dependency>
   <groupId>org.projectlombok</groupId>
   <artifactId>lombok</artifactId>
   <version>1.18.20</version>
</dependency>
 
2.2配置hibernate.cfg.xml
核心配置: session-factory
SessionFactory:针对单个数据库映射编译的内存镜像文件,将数据库转换成为Java可识别的镜像文件。
构建sessionFactory非常耗费资源,所以通常一个工程只需要创建一个
基本配置如下(resource: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>
 
   </session-factory>
</hibernate-configuration>
 
xml配置有先后顺序
配置<session-factory>(//后的注解都应删除)
 
 
 
 
  <session-factory>
<!-- 数据源配置-->
       <property name="connection.username">root</property>//用户名
       <property name="connection.password">xiuluoA1</property>//数据库密码
       <property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>//连接驱动
       <property name="connection.url">jdbc:mysql://localhost:3306/First?serverTimezone=UTC&useSSL=false</property>//url地址
<!--        C3P0 数据库连接池-->
       <property name="hibernate.c3p0.acquire_increment">10</property>//连接池扩容时自增的数量
       <property name="hibernate.c3p0.idle_test_period">1000</property>//设置失效时间(以秒为单位)
       <property name="hibernate.c3p0.timeout">5000</property>//设置超时时间
       <property name="hibernate.c3p0.max_size">30</property>//最大连接数
       <property name="hibernate.c3p0.min_size">5</property>//最小连接数
       <property name="hibernate.c3p0.max_statements">10</property>//设置执行sql语句对象的最大数
<!--        数据库方言  -->
       <property name="dialect">org.hibernate.dialect.MySQLDialect</property>//规定生成sql为mysql语句
       <property name="show_sql">true</property>//打印sql语句
       <property name="format_sql">true</property>//格式化sql语句
<!--        生成数据表-->
<!--        <property name="hibernate.hbm2ddl.auto"></property>//是否自动生成数据库表-->
 
   </session-factory>
 
 
2.3创建实体类:
 
 
 
import lombok.Data;
@Data
public class User {
   private int id;
   private String timeflag;
}
 
2.4创建实体关系映射文件(User.hbt.xml)
 
 
 
 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
       "-//Hibernate/Hibernate -//Hibernate/Hibernate Mapping DTD 3.0//EN"
       "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
       <class name="com.example.demo.pojo.User">
           <id name="id" column="id" type="int"  >
<!--                <column name="id"></column>//表里的字段-->
<!--                <generator class="identity"/>//主键自增-->
           </id>
           <property name="timeflag" type="java.lang.String">
               <column name="timeflag"></column>
           </property>
 
 
       </class>
</hibernate-mapping>
 
2.4实体关系映射文件注册到Hibernate的配置文件中(hibernate.cfg.xml)
 
 
 
<mapping resource="com/example/demo/pojo/User.hbt.xml"></mapping>
 
3.1 使用 hibernateAPI操作数据库
test测试
 
 
 
public class Test {
    public static void main(String[] args) {
 
        //创建Configuration(该configuration应选取hibernate包下)
        Configuration configuration=new Configuration().configure();
        //获取SessionFactory
        SessionFactory sessionFactory =configuration.buildSessionFactory();
        //获取Sessiond对象
        Session session =sessionFactory.openSession();
        User user =new User();
        user.setTimeflag((String.valueOf(System.currentTimeMillis())));
        session.save(user);
        session.beginTransaction().commit();
        session.close();
    }
}
 
3.应用新建一张表并插入10条数据
3.1 pom.xml(相关依赖以及过滤器)
 
 
 
 
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <parent>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-parent</artifactId>
       <version>2.5.4</version>
       <relativePath/> <!-- lookup parent from repository -->
   </parent>
   <groupId>com.example</groupId>
   <artifactId>demo</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <name>demo</name>
   <description>Demo project for Spring Boot</description>
   <properties>
       <java.version>1.8</java.version>
   </properties>
   <dependencies>
       <dependency>
           <groupId>mysql</groupId>
           <artifactId>mysql-connector-java</artifactId>
       </dependency>
       <dependency>
           <groupId>org.hibernate</groupId>
           <artifactId>hibernate-core</artifactId>
           <version>5.4.10.Final</version>
       </dependency>
       <dependency>
           <groupId>org.projectlombok</groupId>
           <artifactId>lombok</artifactId>
           <version>1.18.20</version>
       </dependency>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter</artifactId>
       </dependency>
 
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-test</artifactId>
           <scope>test</scope>
       </dependency>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-web</artifactId>
       </dependency>
   </dependencies>
 
   <build>
       <plugins>
           <plugin>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-maven-plugin</artifactId>
           </plugin>
       </plugins>
       <resources>
           <resource>
               <directory>src/main/java</directory>
               <includes>
                   <include>**/*.xml</include>
               </includes>
               <filtering>true</filtering>
           </resource>
           <resource>
               <directory>src/main/resources</directory>
               <includes>
                   <include>**/*.xml</include>
                   <include>**/*.properties</include>
               </includes>
           </resource>
       </resources>
   </build>
 
 
</project>
 
 
3.2 hibernate.cfg.xml
 
 
 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
       "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
       "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
   <hibernate-configuration>
   <session-factory>
       <!-- 数据源配置-->
       <property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
 
       <property name="connection.username">root</property>
       <property name="connection.password">xiuluoA1</property>
       <property name="connection.url">jdbc:mysql://localhost:3306/First?serverTimezone=UTC&useSSL=false</property>
       <!--        数据库方言  -->
           <!--方言这里出现问题,原为 MySQLDialect,运行后出现sql语法错误-->
 
       <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
 
       <property name="show_sql">true</property>
       <property name="format_sql">true</property>
       <!--        生成数据表-->
               <property name="hibernate.hbm2ddl.auto">create</property>
<!--        注册mapping-->
       <mapping resource="com/example/demo/pojo/User.hbt.xml"/>
   </session-factory>
 
</hibernate-configuration>
 
这里要了解生成数据表的每种参数代表的实际运行操作<property name="hibernate.hbm2ddl.auto">create</property>
3.3 User.java
 
 
 
 
package com.example.demo.pojo;
 
import lombok.Data;
 
@Data//在实体类上添加@Data注解,可以省去代码中大量的 get()、 set()、 toString() 等方法,提高代码的简洁:为类提供读写功能,从而不用写get、set方法。
//使得注解生效需要倒入依赖,同时下载lombok插件
public class User {
   private int id;
   private String timeflag;
}
 
 
3.4 User.hbt.xml
 
 
 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
       "-//Hibernate/Hibernate -//Hibernate/Hibernate Mapping DTD 3.0//EN"
       "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
       <class name="com.example.demo.pojo.User" table="test1">
           <id name="id" column="id" type="int"  >
               <generator class="increment"/>
           </id>
           <property name="timeflag" type="java.lang.String">
               <column name="text"></column>
           </property>
 
       </class>
</hibernate-mapping>
 
3.5 test.java
 
 
 
 
package com.example.demo.test;
 
import com.example.demo.pojo.User;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
 
import java.sql.Date;
 
public class Test {
   public static void main(String[] args) {
 
       //创建Configuration(该configuration应选取hibernate包下)
       Configuration configuration=new Configuration().configure();
       //获取SessionFactory
       SessionFactory sessionFactory =configuration.buildSessionFactory();
       //获取Sessiond对象
       Session session =sessionFactory.openSession();
 
       for (int i=0;i<10;i++){
           User user =new User();
            user.setTimeflag((String.valueOf(System.currentTimeMillis())));
            session.save(user);}
        session.beginTransaction().commit();
        session.close();
   }
 
}
 
 
3.6包结构
 
 
4.Hibernate HQL(未完待续)
4.1基本概述
HQL: Hbernate Query Language 是Hibernate 框架提供的一种查询机制,与sql类似。
HQL是面向对象的查询语句,让开发者以面向对象的思想编写查询语句,是种对JAVA很友好的方式。
不参与数据库的直接交互,属于中间语言:Java-->HQL-->Hibernate-->SQL-->DB
HQL只能查询修改删除不能新增
 
 
 
 
 
 
posted on 2022-07-13 17:32  比企苦  阅读(60)  评论(0)    收藏  举报