一个完整的hibernate的one-to-many的例子

前段时间一直在研究hibernate的one-to-many,看了不少资料也在本论坛上求教过,但由于本人对Hibernate研究的时间不是很长,所以花了不少时间和精力.昨天终于弄出来了,现在与大家分享,希望对初学者有帮助!

1、设置数据库,本人使用的数据库是Oracle 9i
   设置hibernate.properties
   ## Oracle

   hibernate.dialect net.sf.hibernate.dialect.Oracle9Dialect
   #hibernate.dialect net.sf.hibernate.dialect.OracleDialect
   hibernate.connection.driver_class oracle.jdbc.driver.OracleDriver
   hibernate.connection.username sa
   hibernate.connection.password sa
   hibernate.connection.url jdbc:oracle:thin:@xxx.xxx.xxx.xxx:1521:myoracle

2、假设一个用户可以同时有几个帐户,能通过帐户对应到用户,即为一个双向的one-to-many.这是引用我在论坛上发表的文章的回复,很谢谢geniouc给我的参考。

3、javaBean: customer & account
  
  1.   public class Customer {
  2.   private String cid;
  3.   private String custName;
  4.   private Set accounts= new HashSet();
  5.  
  6.   public Customer(){
  7.   }
  8.   public String getCid() {
  9.     return cid;
  10.   }
  11.   public void setCid(String cid) {
  12.     this.cid = cid;
  13.   }
  14.   public String getCustName() {
  15.     return custName;
  16.   }
  17.   public void setCustName(String custName) {
  18.     this.custName = custName;
  19.   }
  20.  
  21.   public Set getAccounts(){
  22.      return accounts;
  23.   }
  24.  
  25.   public void setAccounts(Set accounts){
  26.      this.accounts = accounts;
  27.   }
  28.  
  29. }
  30.  
  31.   public class Account {
  32.   private long aid;
  33.   private String accNumber;
  34.   private Customer customer;
  35.  
  36.   public Account(){
  37.   }
  38.   public long getAid() {
  39.     return aid;
  40.   }
  41.   public void setAid(long aid) {
  42.     this.aid = aid;
  43.   }
  44.   public String getAccNumber() {
  45.     return accNumber;
  46.   }
  47.   public void setAccNumber(String accNumber) {
  48.     this.accNumber = accNumber;
  49.   }
  50.  
  51.   public Customer getCustomer(){
  52.      return customer;
  53.   }
  54.  
  55.   public void setCustomer(Customer customer){
  56.      this.customer = customer;
  57.   }
  58. }


4、xml配置文件中:(关系的建立)
Account.hbm.xml
  1. <?xml version="1.0"?>
  2. <!DOCTYPE hibernate-mapping
  3.     PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
  4.     "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
  5. <hibernate-mapping> 
  6.     <class name="one2many.Account" table="Account"
  7.         <id name="aid" type="long" column="aid" unsaved-value="0"
  8.             <generator class="increment"/> 
  9.         </id>
  10.         <property name="accNumber" type="string"/>
  11.         <many-to-one name="customer" column="cidForCustomer"/> 
  12.     </class>
  13. </hibernate-mapping>

Customer.hbm.xml
  1. <?xml version="1.0"?>
  2. <!DOCTYPE hibernate-mapping
  3.     PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
  4.     "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
  5. <hibernate-mapping>
  6.     <class name="one2many.Customer" table="Customer">
  7.     <id name="cid" type="string" column="cid"
  8.             <generator class="assigned"/> 
  9.         </id>
  10.     <property name="custName" type="string"/>        
  11.  
  12.      <set name="accounts" lazy="true" inverse="true" cascade="all" >
  13.      <key column="cidForCustomer"/>
  14.      <one-to-many class="one2many/Account"/>
  15.      </set>
  16.  
  17.     </class
  18. </hibernate-mapping>

5、测试程序,Test.java

  1. package one2many;
  2.  
  3. import net.sf.hibernate.*;
  4. import net.sf.hibernate.cfg.*;
  5.  
  6. public class Test {
  7. public static void main(String[] args) throws HibernateException {
  8.  
  9.      Configuration conf= new Configuration();
  10.      conf.addClass(Account.class);
  11.      conf.addClass(Customer.class);
  12.      SessionFactory sessionFactory = conf.buildSessionFactory();
  13.  
  14.      Customer cust = new Customer();
  15.      cust.setCid("aa");
  16.      cust.setCustName("Kelvin");
  17.  
  18.      Account acc = new Account();
  19.      acc.setAccNumber("acc");
  20.      acc.setCustomer(cust);
  21.  
  22.      Account acc1 = new Account();
  23.      acc1.setAccNumber("acc1");
  24.      acc1.setCustomer(cust);
  25.  
  26.      cust.getAccounts().add(acc);
  27.      cust.getAccounts().add(acc1);
  28.  
  29.      Session session = sessionFactory.openSession();
  30.      Transaction tx= session.beginTransaction();
  31.      session.save(cust);
  32.  
  33.      tx.commit();
  34.      session.close();
  35.  
  36.      sessionFactory.close();
  37.  }
  38. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
假设我们有两张表,一张是用户表(user),另一张是角色表(role),它们之间有一对多的关系,即一个用户可以拥有多个角色。 我们需要查询出所有用户及其对应的角色信息,可以使用mybatis-plus的wrapper进行多表联查。 首先,我们创建一个UserVO类,用于存放查询结果: ``` public class UserVO { private Long id; private String name; private List<Role> roles; // 省略getter和setter } ``` 接下来,我们创建一个Mapper接口,定义查询方法: ``` public interface UserMapper extends BaseMapper<User> { List<UserVO> selectUserWithRoles(); } ``` 在Mapper接口中,我们使用@Select注解定义查询语句,使用@Results注解定义结果映射关系。 ``` @Select("SELECT u.id, u.name, r.id AS role_id, r.name AS role_name " + "FROM user u LEFT JOIN user_role ur ON u.id = ur.user_id " + "LEFT JOIN role r ON ur.role_id = r.id") @Results({ @Result(column = "id", property = "id"), @Result(column = "name", property = "name"), @Result(column = "id", property = "roles", many = @Many(select = "com.example.mapper.RoleMapper.selectById")) }) List<UserVO> selectUserWithRoles(); ``` 在查询语句中,我们使用左连接查询user表、user_role表和role表。在结果映射中,我们使用@Many注解定义roles属性与RoleMapper接口中的selectById方法关联。 最后,在RoleMapper接口中添加selectById方法,用于根据角色id查询角色信息。 ``` public interface RoleMapper extends BaseMapper<Role> { Role selectById(Long id); } ``` 这样,我们就完成了多表联查的操作,可以使用UserMapper接口中的selectUserWithRoles方法查询所有用户及其对应的角色信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值