Hibernate实现简单的用户和角色的增、删、改、查

最近在学习hibernate,尝试实现简单的增删改查,映射配置。

现在有两个表,一个user表,一个role表。

现在要用hibernate进行增删改查功能,首先创建项目,导入需要的包,建好大致的结构。

Hibernate实现简单的用户和角色的增、删、改、查_第1张图片
Hibernate实现简单的用户和角色的增、删、改、查_第2张图片

现在分别看代码:

1、hibernate.cfg.xml

新建xml文件,配置好数据库信息


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

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

 

 

 

 

 

  root

  admin

  jdbc:mysql://localhost:3306/interview

  com.mysql.jdbc.Driver

 

  org.hibernate.dialect.MySQLDialect

 

 

  update

 

  true 

 

  true 

 

  true

 

  org.hibernate.connection.C3P0ConnectionProvider

  5

  50

  120

  3000  

 

   

   

  

 


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。

想法是一个用户可以有多个角色,一个角色也可以对应多个用户。详细看注解。


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

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


       

         

             

         

         

             

         

         

             

         

         

             

         

         

             

         

         

             

         


           


           


           

       

     


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

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


       

         

             

         

         

             

         

         

             

         

     

           

     

             

     

           

           

     


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("[email protected]");

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("[email protected]");

        user2.setPassword("123456");

        user2.setCreateDate(new Date());  

        user2.setLastUpdateDate(new Date()); 


        User user3 = new User();   

        user3.setUserName("王五");  

        user3.setEmailAddress("[email protected]");

        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 u2Roles  = new HashSet();   

       u2Roles.add(role);

        user2.setRoles(u2Roles);

        session.save(user2);


        Set u3Roles  = new HashSet();

        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、

Hibernate实现简单的用户和角色的增、删、改、查_第3张图片
Hibernate实现简单的用户和角色的增、删、改、查_第4张图片

2、

Hibernate实现简单的用户和角色的增、删、改、查_第5张图片
Hibernate实现简单的用户和角色的增、删、改、查_第6张图片

3、

Hibernate实现简单的用户和角色的增、删、改、查_第7张图片

4、

Hibernate实现简单的用户和角色的增、删、改、查_第8张图片
Hibernate实现简单的用户和角色的增、删、改、查_第9张图片

5、

Hibernate实现简单的用户和角色的增、删、改、查_第10张图片
Hibernate实现简单的用户和角色的增、删、改、查_第11张图片

6、这里我把第3个addRole放到一起了,也可以单独取权限Id赋值。

这里运行完,系统生成了一个关联表,就是我们再xml文件里配置的user_id表。


Hibernate实现简单的用户和角色的增、删、改、查_第12张图片
Hibernate实现简单的用户和角色的增、删、改、查_第13张图片
Hibernate实现简单的用户和角色的增、删、改、查_第14张图片
Hibernate实现简单的用户和角色的增、删、改、查_第15张图片
Hibernate实现简单的用户和角色的增、删、改、查_第16张图片

你可能感兴趣的:(Hibernate实现简单的用户和角色的增、删、改、查)