Hibernate表映射关系

https://github.com/Amant-huangqi/test_hibernate

1.一对多关系

表间关系:城市表与用户表

1.表结构:在“多”的一方即用户表设置外键
CREATE TABLE `city` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `city_name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `city_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_user` (`city_id`),
  CONSTRAINT `fk_user` FOREIGN KEY (`city_id`) REFERENCES `city` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
2.域模型:
public class Users {

    private Integer id;
    private String name;
    //在“多”的一方使用对象表示
    private Citys city;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Citys getCity() {
        return city;
    }
    public void setCity(Citys city) {
        this.city = city;
    }
public class Citys {

    private Integer id;
    private String cityName;
    //在“一”的一方使用 数组表示 “多”
    private Set<Users> users=new HashSet<Users>(0);
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getCityName() {
        return cityName;
    }
    public void setCityName(String cityName) {
        this.cityName = cityName;
    }
    public Set<Users> getUsers() {
        return users;
    }
    public void setUsers(Set<Users> users) {
        this.users = users;
    }

}
4.映射文件

Users.hbm.xml

<hibernate-mapping>
    <class name="com.hq.pojo.Users" table="user" catalog="test_hibernate"> 
        <id name="id" type="java.lang.Integer">
            <column name="id"></column>
            <generator class="native"></generator>
        </id>
        <property name="name" type="java.lang.String">
            <column name="name"></column>
        </property>
        <!-- <property name="cityId" type="java.lang.Integer">
            <column name="city_id"></column>
        </property> -->
        <many-to-one name="city" class="com.hq.pojo.Citys" column="city_id"  cascade="save-update"></many-to-one>
    </class>
</hibernate-mapping>

citys.hbm.xml

<hibernate-mapping>
    <class name="com.hq.pojo.Citys" table="city" catalog="test_hibernate">
        <id name="id" type="java.lang.Integer">
            <column name="city_id"></column>
            <generator class="native"></generator>
        </id>
        <property name="cityName" type="java.lang.String">
            <column name="city_name"></column>
        </property>

        <set name="Users" cascade="save-update" inverse="true">
            <key column="city_id"></key>
            <one-to-many class="com.hq.pojo.Users" />
        </set>
    </class>
</hibernate-mapping>
5.测试方法
public class CitysDaoImplTest {

    private ICitysDao citysDao = new CitysDaoImpl();

    // @Test
    public void save() {
        Citys city = new Citys();
        city.setCityName("北京");
        Users user1 = new Users();
        user1.setName("11");
        user1.setCity(city);
        city.getUsers().add(user1);
        boolean flag = citysDao.save(city);
        if (flag) {
            System.out.println("保存成功");
        } else {
            System.out.println("保存失败");
        }

    }

    @Test
    public void delete() {
        Citys city = citysDao.findCitysById(1);
        if (city != null) {
            boolean flag = citysDao.delete(city);
            if (flag) {
                System.out.println("删除成功");
            } else {
                System.out.println("删除失败");
            }
        } else {
            System.out.println("数据为空");
        }

    }

    //@Test
    public void update(){
        Citys city = citysDao.findCitysById(1);
        city.setCityName("123");
        boolean flag = citysDao.update(city);
        if (flag) {
            System.out.println("更新成功");
        } else {
            System.out.println("更新失败");
        }

    }

}
public class TestUsersDao {

    private IUsersDao usersDao = new UsersDaoImpl();
    private ICitysDao citysDao = new CitysDaoImpl();

    /**
     * 在一对多关系中修改 外键
     *    一定要拿到旧的更新新的
     * Ex: 修改User表中的city_id
     */
    //@Test
    public void update(){
        Users user=usersDao.getUsersById(1);
        Citys city=citysDao.findCitysById(2);
        user.setCity(city);
        usersDao.update(user);
    }

    @Test
    public void delete(){
        Users user=usersDao.getUsersById(2);
        usersDao.delete(user);
    }

}

2.一对一关系

表间关系:身份证表和用户表

1.表结构
CREATE TABLE `card` (
  `card_num` bigint(11) NOT NULL,
  `card_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `user_id` int(11) NOT NULL,
  PRIMARY KEY (`user_id`),
  CONSTRAINT `fk_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2.映射文件
<hibernate-mapping>
    <class name="com.hq.pojo.Card" table="card" catalog="test_hibernate">
        <id name="userId" type="java.lang.Integer">
            <column name="user_id"></column>
            <generator class="foreign">
                <param name="property">user</param>
            </generator>
        </id>
        <property name="cardNum" type="java.lang.Long">
            <column name="card_num"></column>
        </property>

        <property name="endTime" type="java.util.Date">
            <column name="card_time"></column>
        </property>

        <one-to-one name="user" class="com.hq.pojo.Users"></one-to-one>
    </class>
</hibernate-mapping>
3.域模型
public class Card {

    private Long cardNum;
    private Date endTime;
    private Integer userId;//主键
    private Users user; //外键


    public Long getCardNum() {
        return cardNum;
    }
    public void setCardNum(Long cardNum) {
        this.cardNum = cardNum;
    }

    public Date getEndTime() {
        return endTime;
    }
    public void setEndTime(Date endTime) {
        this.endTime = endTime;
    }
    public Integer getUserId() {
        return userId;
    }
    public void setUserId(Integer userId) {
        this.userId = userId;
    }
    public Users getUser() {
        return user;
    }
    public void setUser(Users user) {
        this.user = user;
    }



}
4.测试类
public class CardsDaoImplTest {

    private ICardsDao cardsDao = new CardsDaoImpl();

    @Test
    public void test() {
        Card card=cardsDao.findCardById(1);
        System.out.println(card.getCardNum());
        System.out.println(card.getEndTime());
        System.out.println(card.getUser().getName());//外键关联对象
        System.out.println(card.getUserId());//主键
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值