Hibernate實現簡單的用戶和角色的增、刪、改、查

最近在學習hibernate,嘗試實現簡單的增刪改查,映射配置。

現在有兩個表,一個user表,一個role表。

現在要用hibernate進行增刪改查功能,首先創建項目,導入需要的包,建好大致的結構。

現在分別看代碼:

1、hibernate.cfg.xml

新建xml文件,配置好數據庫信息


<!DOCTYPE hibernate-configuration PUBLIC

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

?"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

?<hibernate-configuration>

?<!-- 配置會話工廠 hibernate 核心 管理數據庫連接池 -->

?<session-factory>

? <!-- 1.配置數據庫連接參數 -->

? <!-- 1.1配置jdbc四個基本連接參數 -->

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

? <property name="hibernate.connection.password">admin</property>

? <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/interview</property>

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

? <!-- 1.2配置 hibernate使用的方言 -->

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

? <!-- 2.配置其他相關屬性 -->

? <!-- 2.1自動建表 -->

? <property name="hibernate.hbm2ddl.auto">update</property>

? <!-- 2.2在日志中輸出sql -->

? <property name="hibernate.show_sql">true</property>?

? <!-- 2.3格式化sql -->

? <property name="hibernate.format_sql">true</property>?

? <!-- 開啟事務 -->

? <property name="hibernate.connection.autocommit">true</property>

? <!-- 配置c3p0數據庫連接池 -->

? <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>

? <property name="hibernate.c3p0.min_size">5</property>

? <property name="hibernate.c3p0.max_size">50</property>

? <property name="hibernate.c3p0.timeout">120</property>

? <property name="hibernate.c3p0.idle_test_period">3000</property> ?

? <!-- 3.加載映射文件 -->

? <mapping resource="com/mytest/model/User.hbm.xml"/>?

? <mapping resource="com/mytest/model/Role.hbm.xml"/>?

?</session-factory>?

?</hibernate-configuration>


2、HibernateUtils.java

創建HibernateUtils類,創建sessionFactory,讀取hibernate.cfg.xml文件,代碼中的方法是hibernate4.x的寫法,每個版本有所不同,請自行百度搜索。


packagecom.mytest.util;

importorg.hibernate.Session;

importorg.hibernate.SessionFactory;

importorg.hibernate.boot.registry.StandardServiceRegistryBuilder;

importorg.hibernate.cfg.Configuration;

importorg.hibernate.service.ServiceRegistry;

publicclassHibernateUtils{

/*

*讀取Hibernate.cfg.xml文件

*/

privatestaticfinalSessionFactorysessionFactory=buildSessionFactory();

privatestaticSessionFactorybuildSessionFactory(){

Configurationcfg=newConfiguration().configure("com/mytest/action/hibernate.cfg.xml");

ServiceRegistryserviceRegistry=newStandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build();

returncfg.buildSessionFactory(serviceRegistry);

}

publicstaticSessionFactorygetSessionFactory(){

returnsessionFactory;

}

}


3、User.java、Role.java

新建user bean類,不多解釋


packagecom.mytest.util;

importjava.util.Date;

importjava.util.HashSet;

importjava.util.Set;

publicclassUser{

privateIntegeruserId;

privateStringuserName;

privateStringemailAddress;

privateStringpassword;

privateDatecreateDate;

privateDatelastUpdateDate;

privateSetroles=newHashSet();

publicUser(){

super();

}

publicIntegergetUserId(){

returnuserId;

}

publicvoidsetUserId(IntegeruserId){

this.userId=userId;

}

publicStringgetUserName(){

returnuserName;

}

publicvoidsetUserName(StringuserName){

this.userName=userName;

}

publicStringgetEmailAddress(){

returnemailAddress;

}

publicvoidsetEmailAddress(StringemailAddress){

this.emailAddress=emailAddress;

}

publicStringgetPassword(){

returnpassword;

}

publicvoidsetPassword(Stringpassword){

this.password=password;

}

publicDategetCreateDate(){

returncreateDate;

}

publicvoidsetCreateDate(DatecreateDate){

this.createDate=createDate;

}

publicDategetLastUpdateDate(){

returnlastUpdateDate;

}

publicvoidsetLastUpdateDate(DatelastUpdateDate){

this.lastUpdateDate=lastUpdateDate;

}

publicSetgetRoles(){

returnroles;

}

publicvoidsetRoles(Setroles){

this.roles=roles;

}

}


packagecom.mytest.util;

importjava.util.HashSet;

importjava.util.Set;

importjavax.persistence.GeneratedValue;

importjavax.persistence.Id;

importjavax.persistence.ManyToMany;

publicclassRole{

privateIntegerroleId;

privateStringroleName;

privateStringdescription;

privateSetusers=newHashSet();

publicRole(){

super();

}

publicIntegergetRoleId(){

returnroleId;

}

publicvoidsetRoleId(IntegerroleId){

this.roleId=roleId;

}

publicStringgetRoleName(){

returnroleName;

}

publicvoidsetRoleName(StringroleName){

this.roleName=roleName;

}

publicStringgetDescription(){

returndescription;

}

publicvoidsetDescription(Stringdescription){

this.description=description;

}

publicSetgetUsers(){

returnusers;

}

publicvoidsetUsers(Setusers){

this.users=users;

}

}


4、User.hbm.xml、Role.hbm.xml

重點就是映射文件,新建兩個xml文件,配置實體和表的映射,這里我用的是many-to-many。

想法是一個用戶可以有多個角色,一個角色也可以對應多個用戶。詳細看注解。


<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC

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

? ? ? ? "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">


<hibernate-mapping package="com.mytest.model">

? ? ? ? <class name="com.mytest.util.User" table="user">

? ? ? ? ?<id name="userId" column="userId" type="integer">

? ? ? ? ? ? ?<generator class="increment"></generator>

? ? ? ? ?</id>

? ? ? ? ?<property name="userName" ?type="string">

? ? ? ? ? ? ?<column name="userName"></column>

? ? ? ? ?</property>

? ? ? ? ?<property name="emailAddress" ?type="string">

? ? ? ? ? ? ?<column name="emailAddress"></column>

? ? ? ? ?</property>

? ? ? ? ?<property name="password" ?type="string">

? ? ? ? ? ? ?<column name="password"></column>

? ? ? ? ?</property>

? ? ? ? ?<property name="createDate" ?type="date">

? ? ? ? ? ? ?<column name="createDate"></column>

? ? ? ? ?</property>

? ? ? ? ?<property name="lastUpdateDate" ?type="date">

? ? ? ? ? ? ?<column name="lastUpdateDate"></column>

? ? ? ? ?</property>

<!--類User中的集合名為roles。關聯表名為:user_role-->

? ? ? ? ?<set name="roles" ?table="user_role"> ?

<!--將字段user_id加入user_role表中,作為外鍵,并指向User對應的表中字段-->

? ? ? ? ? ? <key column="user_id"/>

<!--集合roles成員的類型為Role;將字段role_id加入user_role表中-->

? ? ? ? ? ? <many-to-many class="com.mytest.util.Role" column="role_id" />

? ? ? ? </set>

? ? ?</class>

</hibernate-mapping>


<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC

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

? ? ? ? "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">


<hibernate-mapping package="com.mytest.model">

? ? ? ? <class name="com.mytest.util.Role" table="role">

? ? ? ? ?<id name="roleId" column="roleId" type="integer">

? ? ? ? ? ? ?<generator class="increment"></generator>

? ? ? ? ?</id>

? ? ? ? ?<property name="roleName" ?type="string">

? ? ? ? ? ? ?<column name="roleName"></column>

? ? ? ? ?</property>

? ? ? ? ?<property name="description" ?type="string">

? ? ? ? ? ? ?<column name="description"></column>

? ? ? ? ?</property>

? ? ? <!--類Role中的集合名為users。關聯表名為:user_role-->

? ? ? ? ? <set name="users" table="user_role" > ?

? ? ? <!--將字段role_id加入user_role表中,作為外鍵,并指向Role對應的表中字段-->

? ? ? ? ? ? <key column="role_id" not-null="true"/> ?

? ? ?<!--集合users成員的類型為User;將字段user_id加入user_role表中-->

? ? ? ? ? ? <many-to-many column="user_id" class="com.mytest.util.User" />

? ? ? ? ? </set>?

? ? ?</class>

</hibernate-mapping>


5、Test.java

最后建一個測試類,寫好增刪改查的方法


packagecom.mytest.action;

importjava.util.Date;

importjava.util.HashSet;

importjava.util.Iterator;

importjava.util.List;

importjava.util.Set;

importorg.hibernate.Query;

importorg.hibernate.Session;

importorg.hibernate.SessionFactory;

importcom.mytest.util.HibernateUtils;

importcom.mytest.util.Role;

importcom.mytest.util.User;

publicclassTest{

privateSessionFactorysessionFactory=HibernateUtils.getSessionFactory();

/**

* 1、增加User張三

*/

publicvoidaddUser(){

Sessionsession=sessionFactory.openSession();

session.beginTransaction();

Useruser=newUser();

user.setUserId(1);

user.setUserName("張三");

user.setEmailAddress("zhang3@sina.com");

user.setPassword("123456");

user.setCreateDate(newDate());

user.setLastUpdateDate(newDate());

session.save(user);

session.getTransaction().commit();

session.close();

}

/**

* 2、增加Role

*/

publicvoidaddRole(){

Sessionsession=sessionFactory.openSession();

session.beginTransaction();

Rolerole=newRole();

role.setRoleId(1);

role.setRoleName("Admin");

role.setDescription("擁有最高權限");

session.save(role);

Rolerole2=newRole();

role2.setRoleId(2);

role2.setRoleName("Editor");

role2.setDescription("擁有編輯者權限");

session.save(role2);

Rolerole3=newRole();

role3.setRoleId(3);

role3.setRoleName("Reader");

role3.setDescription("擁有只讀權限");

session.save(role3);

session.getTransaction().commit();

session.close();

}

/**

* 3、查詢用戶張三的信息

*/

publicvoidselectUser(){

Sessionsession=sessionFactory.openSession();

session.beginTransaction();

Queryquery=session.createQuery("from User where userId= '1'");

Listlist=query.list();

for(Useruser:list){

System.out.println("用戶ID:"+user.getUserId());

System.out.println("用戶姓名:"+user.getUserName());

System.out.println("郵箱:"+user.getEmailAddress());

System.out.println("密碼:"+user.getPassword());

System.out.println("創建日期:"+user.getCreateDate());

System.out.println("最后更新日:"+user.getLastUpdateDate());

}

session.getTransaction().commit();

session.close();

}

/**

* 4、更新用戶張三的名字和密碼

*/

publicvoidupdateUser(){

Sessionsession=sessionFactory.openSession();

session.beginTransaction();

Useruser=(User)session.get(User.class,1);

user.setPassword("abcdefg");

session.update(user);

session.getTransaction().commit();

System.out.println("成功更新"+"【"+user.getUserName()+"】"+"的信息!");

System.out.println("用戶ID:"+user.getUserId());

System.out.println("用戶姓名:"+user.getUserName());

System.out.println("郵箱:"+user.getEmailAddress());

System.out.println("密碼:"+user.getPassword());

System.out.println("創建日期:"+user.getCreateDate());

System.out.println("最后更新日:"+user.getLastUpdateDate());

session.close();

}

/**

* 5、刪除張三信息

*/

publicvoiddeleteUser(){

Sessionsession=sessionFactory.openSession();

session.beginTransaction();

Useruser=(User)session.get(User.class,"1");

session.delete(user);

session.getTransaction().commit();

System.out.println("成功刪除"+"【"+user.getUserName()+"】"+"的信息!");

session.close();

}

/**

* 6、新建李四、王五并賦予角色為Admin

*/

public void addUserAndRole() { ?

Session session = sessionFactory.openSession(); ?

? ? session.beginTransaction(); ?

? ? ? ? User user2 = new User();?

? ? ? ? user2.setUserName("李四"); ?

? ? ? ? user2.setEmailAddress("li4@sina.com");

? ? ? ? user2.setPassword("123456");

? ? ? ? user2.setCreateDate(new Date()); ?

? ? ? ? user2.setLastUpdateDate(new Date());?


? ? ? ? User user3 = new User();???

? ? ? ? user3.setUserName("王五"); ?

? ? ? ? user3.setEmailAddress("wang5@sina.com");

? ? ? ? user3.setPassword("123456");

? ? ? ? user3.setCreateDate(new Date()); ?

? ? ? ? user3.setLastUpdateDate(new Date());?


? ? ? ? Role role = new Role();?

? ? ? ? role.setRoleName("Admin"); ?

? ? ? ? role.setDescription("擁有最高權限");? ? ?

? ? ? ? session.save(role);?? ? ? ??


? ? ? ? Role role2 = new Role();?

? ? ? ? role2.setRoleName("Editor"); ?

? ? ? ? role2.setDescription("擁有編輯者權限");

? ? ? ? session.save(role2);?


? ? ? ? Role role3 = new Role();?

? ? ? ? role3.setRoleName("Reader"); ?

? ? ? ? role3.setDescription("擁有只讀權限");

? ? ? ? session.save(role3);? ? ? ?


? ? ? ? Set<Role> u2Roles ?= new HashSet<Role>();? ?

? ? ? ?u2Roles.add(role);

? ? ? ? user2.setRoles(u2Roles);

? ? ? ? session.save(user2);


? ? ? ? Set<Role> u3Roles ?= new HashSet<Role>();

? ? ? ? u3Roles.add(role);

? ? ? ? user3.setRoles(u3Roles);

? ? ? ? session.save(user3);


? ? ? ? session.getTransaction().commit(); ?

? ? ? ? session.close();

? ? ? ? System.out.println("成功分配給"+ user2.getUserName()+"【"+role.getRoleName()+"】"+"權限!");

? ? ? ? System.out.println("成功分配給"+ user3.getUserName()+"【"+role.getRoleName()+"】"+"權限!");

? }

/**

* 7、根據角色主鍵Admin查詢該角色下所有的用戶信息

*/

publicvoidselectUserByRole(){

Sessionsession=sessionFactory.openSession();

session.beginTransaction();

Queryquery=session.createQuery("SELECT "

+"u.userId,"

+"u.userName,"

+"u.emailAddress,"

+"u.password,"

+"u.createDate,"

+"u.lastUpdateDate "

+"FROM User u WHERE u.userId IN (SELECT ur.user_id FROM user_role ur WHERE ur.role_id = '1'");

Listlist=query.list();

for(Useruser:list){

System.out.println("用戶ID:"+user.getUserId());

System.out.println("用戶姓名:"+user.getUserName());

System.out.println("郵箱:"+user.getEmailAddress());

System.out.println("密碼:"+user.getPassword());

System.out.println("創建日期:"+user.getCreateDate());

System.out.println("最后更新日:"+user.getLastUpdateDate());

}

session.getTransaction().commit();

session.close();

/*List list = query.list();

Iterator it= list.iterator();

while(it.hasNext()){

User user=(User)it.next();

System.out.println("用戶ID:"+ user.getUserId());

System.out.println("用戶姓名:"+user.getUserName());

System.out.println("郵箱:"+user.getEmailAddress());

System.out.println("密碼:"+user.getPassword());

System.out.println("創建日期:"+ user.getCreateDate());

System.out.println("最后更新日:"+ user.getLastUpdateDate());

}*/

}

/**

* 主函數

*/

publicstaticvoidmain(String[]args){

newTest().addUser();

newTest().addRole();

newTest().selectUser();

newTest().updateUser();

newTest().deleteUser();

newTest().addUserAndRole();

newTest().selectUserByRole();

}

}


執行結果:

1、


2、


3、


4、


5、


6、這里我把第3個addRole放到一起了,也可以單獨取權限Id賦值。

這里運行完,系統生成了一個關聯表,就是我們再xml文件里配置的user_id表。


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,767評論 18 399
  • 一. Java基礎部分.................................................
    wy_sure閱讀 3,837評論 0 11
  • 本文包括:1、Hibernate的持久化類2、Hibernate 持久化對象的三個狀態(難點)3、Hibernat...
    廖少少閱讀 1,484評論 0 13
  • 這部分主要是開源Java EE框架方面的內容,包括Hibernate、MyBatis、Spring、Spring ...
    雜貨鋪老板閱讀 1,433評論 0 2
  • 01 之前看過一句話說,分手以后還會聯系的只有兩種情況,一種是沒睡過,一種是沒睡夠。 話糙理不糙,想一想確實也是這...
    桃酥酥酥酥閱讀 1,205評論 0 4