- 使用 Spring Initializr 创建 Spring Boot 应用程序
- 在Spring Boot中配置Cassandra
- 在 Spring Boot 上配置 Tomcat 连接池
- 将Camel消息路由到嵌入WildFly的Artemis上
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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>top.linruchang</groupId>
<artifactId>HibernateDemo</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.6.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>6.0.0.Alpha7</version>
</dependency>
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
</dependency>
</dependencies>
<build>
<!--特别注意:如果你是把Article.hbm.xml这些映射文件放到src下的beanentity目录,则需要定义这里,像我一样放到resources也不需要设置这一段-->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
</project>
hibernate.cfg.xml
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<!-- 以/jndi/name绑定到JNDI的SessionFactory实例 -->
<!--<session-factory name="java:hibernate/SessionFactory">-->
<session-factory >
<!-- ===============数据源配置属性=============== -->
<property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="connection.url">jdbc:mysql://localhost:3306/test?useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai</property>
<!-- ===============C3P0连接池配置=============== -->
<!-- 连接池中最少有多少个数据库连接 -->
<property name="hibernate.c3p0.min_size">30</property>
<!-- 连接池中允许的最大数据库连接数 -->
<property name="hibernate.c3p0.max_size">30</property>
<!-- 最大的PreparedStatement的数量 -->
<property name="hibernate.c3p0.max_statements">10</property>
<!--数据库连接不够时,每次增加的连接数-->
<property name="hibernate.c3p0.acquire_increment">10</property>
<!--数据库连接不用时,多长时间释放该连接,以秒为单位-->
<property name="hibernate.c3p0.idle_test_period">10000</property>
<!--连接处理最大时间,如果超过这个时间,会抛出异常,以豪秒为单位-->
<property name="hibernate.c3p0.timeout">5000</property>
<!-- ===============数据库方言=============== -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- ===============功能=============== -->
<!--打印SQL-->
<property name="show_sql">true</property>
<!--格式化SQL语句-->
<property name="format_sql">true</property>
<!--是否自动生成数据库-->
<property name="hibernate.hbm2ddl.auto"/>
<!-- ===============注册实体关系映射文件=============== -->
<mapping resource="mapping/SysUser.hbm.xml"></mapping>
<mapping resource="mapping/Article.hbm.xml"></mapping>
<!--将此映射文件直接放到跟Bean的源码目录包下的写法-->
<!--<mapping resource="top/linruchang/entity/SysUser.hbm.xml"></mapping>-->
<!--<mapping resource="top/linruchang/entity/Article.hbm.xml"></mapping>-->
</session-factory>
</hibernate-configuration>
Article.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>
<class name="top.linruchang.entity.Article" table="article">
<id name="id" type="java.lang.String">
<column name="id" ></column>
<!--插入时,如果你没有设置ID,会帮你自动添加ID-->
<generator class="uuid"></generator>
</id>
<property name="title" type="java.lang.String">
<column name="title"></column>
</property>
<property name="content" type="java.lang.String">
<column name="content"></column>
</property>
<property name="likeNum" type="java.lang.Integer">
<column name="like_num"></column>
</property>
</class>
</hibernate-mapping>
Article.java
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Accessors(chain = true)
public class Article extends BaseEntity {
private static final long serialVersionUID = -4714261187453073302L;
private SysUser sysUser;
/** 文章标题 */
private String title;
/** 文章内容 */
private String content;
private String abbreviationContent;
/** 文章被查看次数 */
private Integer checkNum;
/** 当前文章被点赞数 */
private Integer likeNum;
/** 当前文章不喜欢数 */
private Integer notLikeNum;
/** 文章是否违规:0未违规 1违规 - 违规不可显示 */
private Integer isViolation;
/** 创建者 - 冗余字段 - user表的nickName */
private String createBy;
/**列表文章的图片显示 - 如果指定则使用指定的图片(功能未做),没有指定则使用文章第一张图片,在没有则使用文章中有图标则使用目录分裂的图片*/
private String imgUrl;
/**文章内部图片*/
private String imgUrls;
/**文章内容类型:1富文本 2Markdown 3留空*/
private String type;
/**文章状态;-1违规 0草稿 1发布且公开 2发布且私密*/
private String status;
}
MyTest.java
public class MyTest {
public static void main(String[] args) {
Configuration configure = new Configuration().configure();
//获取sessionFactory
SessionFactory sessionFactory = configure.buildSessionFactory();
//获取数据库连接session
Session session = sessionFactory.openSession();
Article article = session.find(Article.class, "0f67d9f1953c7ab6036ece36cb5e1133");
System.out.println(article);
Article saveArticle = Article.builder()
.checkNum(20)
.likeNum(100)
.content("你好")
.title("爱你似懂非懂舒服的").build();
saveArticle.setId(UUID.fastUUID().toString(true));
Object save = session.save(saveArticle);
System.out.println(save);
// System.out.println(saveArticle.getId());
// System.out.println(save);
//特别注意:这里必须手动提交事务
session.beginTransaction().commit();
session.close();
}
}
一个用户对应多篇文章
SysUser.java
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Accessors(chain = true)
public class SysUser extends BaseEntity {
private static final long serialVersionUID = 2095940921263481761L;
Set<Article> articles;
/** 用户昵称 - 如果没有设置昵称直接使用账户名显示 */
private String nickName;
/** 头像图片地址 */
private String headUrl;
/** 账户 */
private String loginName;
/** 密码 */
private String password;
/** 手机号 */
private String phoneNumber;
/** 邮箱 */
private String email;
/** 性别 */
private Integer gender;
/** 个性签名 */
private String personalMotto;
/** 最近登录时间 - 格式 - yyyyMMddHHmmss */
private String lastLoginTime;
/** 登录状态:0未登录 1单设备登陆 2多设备登陆 */
private Integer loginStatus;
/** 账户禁用状态:0账户可使用 1账户不可使用(封号) */
private Integer disabledStatus;
}
Article.java
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Accessors(chain = true)
public class Article extends BaseEntity {
private static final long serialVersionUID = -4714261187453073302L;
private SysUser sysUser;
private String userId;
/** 文章标题 */
private String title;
/** 文章内容 */
private String content;
private String abbreviationContent;
/** 文章被查看次数 */
private Integer checkNum;
/** 当前文章被点赞数 */
private Integer likeNum;
/** 当前文章不喜欢数 */
private Integer notLikeNum;
/** 文章是否违规:0未违规 1违规 - 违规不可显示 */
private Integer isViolation;
/** 创建者 - 冗余字段 - user表的nickName */
private String createBy;
/**列表文章的图片显示 - 如果指定则使用指定的图片(功能未做),没有指定则使用文章第一张图片,在没有则使用文章中有图标则使用目录分裂的图片*/
private String imgUrl;
/**文章内部图片*/
private String imgUrls;
/**文章内容类型:1富文本 2Markdown 3留空*/
private String type;
/**文章状态;-1违规 0草稿 1发布且公开 2发布且私密*/
private String status;
}
SysUser.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>
<class name="top.linruchang.entity.SysUser" table="sys_user">
<id name="id" type="java.lang.String">
<column name="id"></column>
<!--插入时,如果你没有设置ID,会帮你自动添加ID-->
<generator class="uuid"></generator>
</id>
<property name="headUrl" type="java.lang.String">
<column name="head_url" ></column>
</property>
<property name="loginName" type="java.lang.String">
<column name="login_name" ></column>
</property>
<set name="articles" table="article">
<!-- Article表的外键列名-->
<key column="user_id"></key>
<one-to-many class="top.linruchang.entity.Article"></one-to-many>
</set>
</class>
</hibernate-mapping>
Article.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>
<class name="top.linruchang.entity.Article" table="article">
<id name="id" type="java.lang.String">
<column name="id" ></column>
<!--插入时,如果你没有设置ID,会帮你自动添加ID-->
<generator class="uuid"></generator>
</id>
<!--逻辑外键,即sysUser表的主键ID-->
<property name="userId" type="java.lang.String">
<column name="user_id"></column>
</property>
<property name="title" type="java.lang.String">
<column name="title"></column>
</property>
<property name="content" type="java.lang.String">
<column name="content"></column>
</property>
<property name="likeNum" type="java.lang.Integer">
<column name="like_num"></column>
</property>
<!--<property name="sysUser" type="top.linruchang.entity.SysUser">-->
<!-- <column name="like_num"></column>-->
<!--</property>-->
</class>
</hibernate-mapping>
Article.hbm.xml
@Test
public void test1() {
Configuration configure = new Configuration().configure();
// 获取sessionFactory
SessionFactory sessionFactory = configure.buildSessionFactory();
// 获取数据库连接session
Session session = sessionFactory.openSession();
SysUser sysUser = session.find(SysUser.class, "6d72c93aa292cf2ca2e789919a5e7bdc");
System.out.println(sysUser);
}
MyOrder.java
@Data
@ToString(callSuper = true)
public class MyOrder extends BaseEntity{
MyUser myUser;
String name;
String money;
}
MyUser.java
@Data
@ToString(callSuper = true)
public class MyUser extends BaseEntity{
String name;
}
MyOrder.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>
<class name="top.linruchang.entity.MyOrder" table="my_order">
<id name="id" type="java.lang.String">
<column name="id"></column>
<!--插入时,如果你没有设置ID,会帮你自动添加ID-->
<generator class="uuid"></generator>
</id>
<property name="name" type="java.lang.String">
<column name="name"></column>
</property>
<property name="money" type="java.lang.String">
<column name="money"></column>
</property>
<many-to-one name="myUser" column="user_id" class="top.linruchang.entity.MyUser"></many-to-one>
</class>
</hibernate-mapping>
MyUser.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>
<class name="top.linruchang.entity.MyUser" table="my_user">
<id name="id" type="java.lang.String">
<column name="id"></column>
<!--插入时,如果你没有设置ID,会帮你自动添加ID-->
<generator class="uuid"></generator>
</id>
<property name="name" type="java.lang.String">
<column name="name"></column>
</property>
</class>
</hibernate-mapping>
MyTest.java
public class MyTest {
@Test
public void test3() {
Configuration configure = new Configuration().configure();
//获取sessionFactory
SessionFactory sessionFactory = configure.buildSessionFactory();
//获取数据库连接session
Session session = sessionFactory.openSession();
MyOrder myOrder = session.find(MyOrder.class, "9ac327eda05d11ebb7a6b42e99ea3e61");
MyUser myUser = myOrder.getMyUser();
System.out.println(myOrder);
}
}
@Test
public void test4() {
Configuration configure = new Configuration().configure();
//获取sessionFactory
SessionFactory sessionFactory = configure.buildSessionFactory();
//获取数据库连接session
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
MyOrder myOrder = new MyOrder();
myOrder.setId(UUID.fastUUID().toString(true));
myOrder.setName("热狗");
myOrder.setMoney("5");
MyUser myUser = new MyUser();
myUser.setId(UUID.fastUUID().toString(true));
myUser.setName("立法的方式地方=====");
myOrder.setMyUser(myUser);
//先插入外键表的数据
Object insertUserId = session.save(myUser);
System.out.println(insertUserId);
//随后在插入主表的数据
Object insertOrderId = session.save(myOrder);
System.out.println(insertOrderId);
transaction.commit();
session.close();
}
MyOrder2.java
@Getter
@Setter
public class MyOrder2 extends BaseEntity{
String name;
String money;
Set<MyUser2> myUser2;
@Override
public String toString() {
return "MyOrder2{" +
"id='" + getId() + '\'' +
"name='" + name + '\'' +
", money='" + money + '\'' +
'}';
}
}
MyUser2.java
@Getter
@Setter
public class MyUser2 extends BaseEntity{
String name;
Set<MyOrder2> myOrder2;
@Override
public String toString() {
return "MyUser2{" +
"id='" + getId() + '\'' +
"name='" + name + '\'' +
'}';
}
}
UserOrderRel.java
@Getter
@Setter
public class UserOrderRel extends BaseEntity{
String myUserId;
String myOrderId;
}
MyOrder2.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>
<class name="top.linruchang.entity.MyOrder2" table="my_order">
<id name="id" type="java.lang.String">
<column name="id"></column>
<!--插入时,如果你没有设置ID,会帮你自动添加ID-->
<generator class="uuid"></generator>
</id>
<property name="name" type="java.lang.String">
<column name="name"></column>
</property>
<property name="money" type="java.lang.String">
<column name="money"></column>
</property>
<set name="myUser2" table="user_order_rel">
<key column="my_order_id" ></key>
<many-to-many column="my_user_id" class="top.linruchang.entity.MyUser2"></many-to-many>
</set>
</class>
</hibernate-mapping>
MyUser2.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>
<class name="top.linruchang.entity.MyUser2" table="my_user">
<id name="id" type="java.lang.String">
<column name="id"></column>
<!--插入时,如果你没有设置ID,会帮你自动添加ID-->
<generator class="uuid"></generator>
</id>
<property name="name" type="java.lang.String">
<column name="name"></column>
</property>
<set name="myOrder2" table="user_order_rel">
<key column="my_user_id" ></key>
<many-to-many column="my_order_id" class="top.linruchang.entity.MyOrder2"></many-to-many>
</set>
</class>
</hibernate-mapping>
UserOrderRel.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>
<class name="top.linruchang.entity.UserOrderRel" table="user_order_rel">
<id name="id" type="java.lang.String">
<column name="id"></column>
<!--插入时,如果你没有设置ID,会帮你自动添加ID-->
<generator class="uuid"></generator>
</id>
<property name="myUserId" type="java.lang.String">
<column name="my_user_id"></column>
</property>
<property name="myOrderId" type="java.lang.String">
<column name="my_order_id"></column>
</property>
</class>
</hibernate-mapping>
MyTest.java
public class MyTest {
@Test
public void test5() {
Configuration configure = new Configuration().configure();
SessionFactory sessionFactory = configure.buildSessionFactory();
Session session = sessionFactory.openSession();
MyOrder2 myOrder2 = session.find(MyOrder2.class, "4028b88178e60a910178e60a94c90001");
System.out.println(myOrder2);
System.out.println(myOrder2.getMyUser2());
session.close();
}
}
我有一个 ProductDescription ViewController,它从我放置在许多 ViewController 中的 ProductTable UITableView 调用。 对于 St
首先,是的,我使用的是 DistinctRootEntityResultTransformer。 我有以下(Fluent NHibernate)映射: public FirstObjectMap()
我有两个模型:Book 和 Author。每个Author有很多本书,每本书有很多作者,所以我在Author和Book之间建立了ManyToMany关系,如下所示: class Author(mode
我正在尝试映射两个具有一对一关系的类之间的关系。在互联网上查找后,似乎人们更喜欢使用多对一来映射它。 例如,有一个 Order 类和 Bill 类。比尔持有发票的 FK。 这是我为比尔绘制的 map
假设有以下实体类: public class Player { public virtual int ID { get; set; } public virtual string Name { g
我想尝试一下 dynamodb 我能够保存单个对象。现在我想尝试创建一个多对一的关联。 许多任务应附加到单个用户。 @DynamoDBTable(tableName = "User") public
所以,情况如下: 表ComputerInventory,其中包含{computerInventoryID(主键)、TagID(唯一)、名称等} 表reviewStatus,其中包含{reviewSta
我在使用 hibernate 进行多对一映射时遇到问题。我有两个表,表 A 和表 B。我在这些表之间映射了多对一关系。两个表可以一起使用,也可以单独使用。 用 Java 中的类来表示表,例如: cla
我的实体: @Entity public class Film { @Id @GeneratedValue(strategy = IDENTITY) private long film
我必须制作拼贴项目的域层。我们的标准很少,比如我们必须使用 Hibernate,而且数据库也是固定的。 数据库的相关部分看起来几乎像这样: BusEntity(表 1) 总线 ID 公交车具体信息 总
如果有这两个实体: @Entity @Table(name = "CUSTOMER") public class Customer { @Id @GeneratedValue(stra
我正在尝试找出在多对一关系中检索单个最新结果的最有效方法。 示例: 实体 A - 团队(名称)实体 B - 员工(姓名,已创建) 团队>员工 我想在 Employee 上创建一个获取请求,返回每个团队
假设我有一个MySQL表read,记录了一个userid和一个articleid,记录了用户阅读了哪些文章。我现在想列出已阅读文章 1、2 和 3 的用户。 我知道以下是不可能的,但它说明了这个想法:
我的两个实体之间存在多对一关系。现在我希望当没有更多的 child 时将 parent 移除。 我的情况: 类(class)联系人 类(class)组织 一个组织有几个联系人,每个联系人都有一个组织。
我有下表: A 和 B A 有一个复合 PK:id int,类型 string。 B 只有 A 的 PK 之一:id int。 如何使用 B 的 id 和常量 type='typeB' 定义从 A 到
我正在为我的项目使用 Hibernate 3 映射一些实体,并简单地解释说我有这样的东西: Student 实体(tstudent 表) UniversityStudent 实体(tuniversit
我有一个成员表:成员(id, name, gender, head_id) 我想要的是建立以户主(家庭成员)为基础的家庭关系。就像这样:一个成员属于一个家庭(由成员定义) 也许我可以将其拆分为 2 个
示例 父类 @OneToMany(mappedBy = "parent") private List childs; 子类 @ManyToOne(cascade = CascadeType.ALL)
我有以下化学过程数据集,由 5 个连续输入向量组成,产生 1 个输出。每个输入每分钟采样一次,而输出操作系统每 5 采样一次。 虽然我相信输出取决于之前的 5 个输入向量,但我决定为我的设计寻找 LS
我正在将我的应用程序从原则 1 转换为原则 2.4我确实从数据库自动映射,但缺少一些关系: 表:产品产品 ID、标题、价格 表:位置产品id , 产品id , 位置id , 数量 因此每个 Locat
我是一名优秀的程序员,十分优秀!