使用技術
- idea開發工具
- MySQL數據庫
- hibernate ORM框架
項目整體結構
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>org.aptech.hdax</groupId>
<artifactId>TestMysqlHiber</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- hibernate核心-->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.10.Final</version>
</dependency>
<!-- MySQL驅動jar-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<!-- Oracle JDBC驅動連接 -->
<dependency>
<groupId>oracle</groupId>
<artifactId>oracle6g</artifactId>
<version>11.12</version>
</dependency>
<!-- junit單元測試 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<!-- lombok插件、簡化getter\setter-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
hibernate.cfg.xml 配置文件
<?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">jdbc:mysql://localhost:3306/ry?serverTimezone=UTC</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<!--顯示查詢語句-->
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<!-- MySQL方言-->
<!-- <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>-->
<property name="dialect">org.hibernate.dialect.MySQL55Dialect</property>
<!-- 引入配置映射文件-->
<mapping resource="mappers/SysUser.hbm.xml"/>
<mapping resource="mappers/SysRole.hbm.xml"/>
<mapping resource="mappers/SysDept.hbm.xml"/>
<!-- <mapping resource="org/aptech/hdax/pojo/Project.hbm.xml"/>-->
</session-factory>
</hibernate-configuration>
實體類:用戶
package org.aptech.hdax.pojo;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.sql.Timestamp;
import java.util.HashSet;
import java.util.Set;
/**
* 用戶實體類
*/
@Getter
@Setter
public class SysUser implements Serializable {
private Long userId;
private SysDept sysDept;//用戶所屬部門
private String loginName;
private String userName;
private String userType;
private String email;
private String phonenumber;
private String sex;
private String avatar;
private String password;
private String salt;
private String status;
private String delFlag;
private String loginIp;
private Timestamp loginDate;
private String createBy;
private Timestamp createTime;
private String updateBy;
private Timestamp updateTime;
private String remark;
//用戶對應角色、多對多
private Set<SysRole> sysRoles = new HashSet<SysRole>();//用戶所屬的角色列表
}
實體類:部門
package org.aptech.hdax.pojo;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.sql.Timestamp;
import java.util.Date;
import java.util.Set;
/**
* 部門實體類
*/
@Getter
@Setter
public class SysDept implements Serializable {
private Long deptId;
//private Long parentId;//自引用
private String ancestors;
private String deptName;
private Integer orderNum;
private String leader;
private String phone;
private String email;
private String status;
private String delFlag;
private String createBy;
private Date createTime;
private String updateBy;
private Date updateTime;
private SysDept parent;//父級部門
//一對多
private Set<SysDept> children;//子級部門集合(自引用)
}
實體類:角色
package org.aptech.hdax.pojo;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.util.Date;
import java.util.Set;
/**
* 角色實體類
*/
@Getter
@Setter
public class SysRole implements Serializable {
private Long roleId;
private String roleName;
private String roleKey;
private Integer roleSort;
private String dataScope;
private String status;
private String delFlag;
private String createBy;
private Date createTime;
private String updateBy;
private Date updateTime;
private String remark;
//角色對應的用戶集合,多對多
private Set<SysUser> sysUsers;
}
映射文件:SysUser.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="org.aptech.hdax.pojo.SysUser" table="sys_user" schema="ry">
<!-- 用戶id主鍵自增、手動賦值-->
<id name="userId" column="user_id">
<generator class="native"></generator>
</id>
<property name="loginName" column="login_name"/>
<property name="userName" column="user_name"/>
<property name="userType" column="user_type"/>
<property name="email" column="email"/>
<property name="phonenumber" column="phonenumber"/>
<property name="sex" column="sex"/>
<property name="avatar" column="avatar"/>
<property name="password" column="password"/>
<property name="salt" column="salt"/>
<property name="status" column="status"/>
<property name="delFlag" column="del_flag"/>
<property name="loginIp" column="login_ip"/>
<property name="loginDate" column="login_date"/>
<property name="createBy" column="create_by"/>
<property name="createTime" column="create_time"/>
<property name="updateBy" column="update_by"/>
<property name="updateTime" column="update_time"/>
<property name="remark" column="remark"/>
<!-- 多對一 默認是延遲加載查詢出是兩條語句、可以用一條語句連表語句查詢-->
<many-to-one name="sysDept" class="org.aptech.hdax.pojo.SysDept" column="dept_id" fetch="join"/>
<!-- 多對多、配置\ 多對多需要有關係表-->
<set name="sysRoles" table="sys_user_role">
<!--key用戶表的外鍵-->
<key column="user_id"></key>
<!-- 用戶誰和誰是多對多? 用戶和角色是多對多-->
<many-to-many class="org.aptech.hdax.pojo.SysRole" column="role_id"/>
</set>
</class>
</hibernate-mapping>
映射文件:SysDept.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="org.aptech.hdax.pojo.SysDept" table="sys_dept" schema="ry">
<id name="deptId" column="dept_id"/>
<!--<property name="parentId" column="parent_id"/>-->
<property name="ancestors" column="ancestors"/>
<property name="deptName" column="dept_name"/>
<property name="orderNum" column="order_num"/>
<property name="leader" column="leader"/>
<property name="phone" column="phone"/>
<property name="email" column="email"/>
<property name="status" column="status"/>
<property name="delFlag" column="del_flag"/>
<property name="createBy" column="create_by"/>
<property name="createTime" column="create_time"/>
<property name="updateBy" column="update_by"/>
<property name="updateTime" column="update_time"/>
<!--多對一-->
<many-to-one name="parent" class="org.aptech.hdax.pojo.SysDept" column="parent_id"/>
<!-- 一對多映射-->
<set name="children" inverse="true">
<key column="parent_id"></key>
<one-to-many class="org.aptech.hdax.pojo.SysDept"/>
</set>
</class>
</hibernate-mapping>
映射文件:SysRole.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="org.aptech.hdax.pojo.SysRole" table="sys_role" schema="ry">
<!--角色id主鍵自增、手動自增-->
<id name="roleId" column="role_id">
<generator class="native"></generator>
</id>
<property name="roleName" column="role_name"/>
<property name="roleKey" column="role_key"/>
<property name="roleSort" column="role_sort"/>
<property name="dataScope" column="data_scope"/>
<property name="status" column="status"/>
<property name="delFlag" column="del_flag"/>
<property name="createBy" column="create_by"/>
<property name="createTime" column="create_time"/>
<property name="updateBy" column="update_by"/>
<property name="updateTime" column="update_time"/>
<property name="remark" column="remark"/>
<!-- 多對多、配置\ 多對多需要有關係表-->
<set name="sysUsers" table="sys_user_role" inverse="true">
<!--key角色表的外鍵-->
<key column="role_id"></key>
<!-- 角色誰和誰是多對多? 角色和用戶是多對多-->
<many-to-many class="org.aptech.hdax.pojo.SysUser" column="user_id"/>
</set>
</class>
</hibernate-mapping>
Test 測試類
package org.aptech.hdax.test;
import org.aptech.hdax.pojo.SysDept;
import org.aptech.hdax.pojo.SysRole;
import org.aptech.hdax.pojo.SysUser;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;
public class TestHiber {
//查詢用戶所屬擁有哪些角色
@Test
public void testuserby(){
//1、讀取配置文件
Configuration config = new Configuration().configure();
//2、構建session工廠
SessionFactory sessionFactory = config.buildSessionFactory();
//3、打開session
Session session = sessionFactory.openSession();
//4、操作事物
Transaction tx = session.beginTransaction();
SysUser sysUser = session.get(SysUser.class,1L);
System.out.println(sysUser.getUserName());
//循環用戶下有哪些角色
for (SysRole sysRole : sysUser.getSysRoles()) {
System.out.println(sysRole.getRoleName());
}
//5、提交事務
tx.commit();
//關閉session
session.close();
}
//查詢角色擁有哪些用戶
@Test
public void testroleby(){
//1、讀取配置文件
Configuration config = new Configuration().configure();
//2、構建session工廠
SessionFactory sessionFactory = config.buildSessionFactory();
//3、打開session
Session session = sessionFactory.openSession();
//4、操作事物
Transaction tx = session.beginTransaction();
SysRole sysRole = session.get(SysRole.class,1L);
System.out.println(sysRole.getRoleName());
//循環角色擁有哪些用戶
for (SysUser sysUser:sysRole.getSysUsers()) {
System.out.println(sysUser.getUserName());
}
//5、提交事務
tx.commit();
//關閉session
session.close();
}
//查詢用戶擁有哪些部門
@Test
public void testdeptby(){
//1、讀取配置文件
Configuration config = new Configuration().configure();
//2、構建session工廠
SessionFactory sessionFactory = config.buildSessionFactory();
//3、打開session
Session session = sessionFactory.openSession();
//4、操作事物
Transaction tx = session.beginTransaction();
//輸出用戶名稱,所在部門名稱
SysUser sysUser = session.get(SysUser.class,1L);
System.out.println(sysUser.getUserName());
System.out.println(sysUser.getSysDept().getDeptName());
//5、提交事務
tx.commit();
//關閉session
session.close();
}
//查詢部門擁有哪些子級部門
@Test
public void testdeptparentby(){
//1、讀取配置文件
Configuration config = new Configuration().configure();
//2、構建session工廠
SessionFactory sessionFactory = config.buildSessionFactory();
//3、打開session
Session session = sessionFactory.openSession();
//4、操作事物
Transaction tx = session.beginTransaction();
//輸出部門名稱
SysDept sysDept = session.get(SysDept.class,101L);
System.out.println(sysDept.getDeptName());
//輸出父級名稱
System.out.println(sysDept.getParent().getDeptName());
//循環輸出子級部門
for (SysDept child:sysDept.getChildren()) {
System.out.println(child.getDeptName());
}
//5、提交事務
tx.commit();
//關閉session
session.close();
}
//查詢部門擁有哪些子級部門
@Test
public void testdeptuseradd(){
//1、讀取配置文件
Configuration config = new Configuration().configure();
//2、構建session工廠
SessionFactory sessionFactory = config.buildSessionFactory();
//3、打開session
Session session = sessionFactory.openSession();
//4、操作事物
Transaction tx = session.beginTransaction();
//查詢部門
SysDept sysDept = session.get(SysDept.class,101L);
//創建一個角色
SysRole sysRole = new SysRole();
sysRole.setRoleId(1L);
//添加user
SysUser sysUser = new SysUser();
sysUser.setSysDept(sysDept);//查詢出101的部門
sysUser.getSysRoles().add(sysRole);//角色爲1的
sysUser.setLoginName("誒皮太殼");
sysUser.setUserName("邯鄲翱翔");
session.save(sysUser);
//循環輸出子級部門
for (SysDept child:sysDept.getChildren()) {
System.out.println(child.getDeptName());
}
//5、提交事務
tx.commit();
//關閉session
session.close();
}
}