最近在学习hibernate,尝试实现简单的增删改查,映射配置。
现在有两个表,一个user表,一个role表。
现在要用hibernate进行增删改查功能,首先创建项目,导入需要的包,建好大致的结构。
现在分别看代码:
1、hibernate.cfg.xml
新建xml文件,配置好数据库信息
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
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.add(role);
user2.setRoles(u2Roles);
session.save(user2);
Set
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表。