1、SQL基础:
数据类型
MySQL与Java一样,也有数据类型。MySQL中数据类型主要应用在列上。
常用类型:
l int:整型
l double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99;
l decimal:泛型型,在表单钱方面使用该类型,因为不会出现精度缺失问题;
l char:固定长度字符串类型;
l varchar:可变长度字符串类型;
l text:字符串类型;
l blob:字节类型;
l date:日期类型,格式为:yyyy-MM-dd;
l time:时间类型,格式为:hh:mm:ss
l timestamp:时间戳类型;
javabean实体内容:
private int id;
private String name;
private int age;
private Date birthday;
private String desc;
private byte[] photo;
映射文件内容:
<class name="User" table="t_user">
<idname="id"type="int"column="id">
<generatorclass="native"/>
</id>
<propertyname="name"type="string"column="name"/>
<propertyname="age"type="int"column="age_"/>
<propertyname="birthday"type="date"column="birthday_"/>
<propertyname="desc"type="text"column="desc_" length="5000"></property>
<propertyname="photo"type="binary"length="102400"/>
</class>
2、多对一和一对多的表结构和Forum.hbm.xml和Topic.hml.xml配置文件
(外键在多方)多方(Topic)配置文件如下:
<!-- forum属性,本类与Forum的多对一 -->
<many-to-one name="forum" class="Forum" column="forumId"></many-to-one>
Topic表结构:
其中forumId为外键列,它引用了forum表的id
一方(Forum)配置文件如下:
<!--topics属性,表示本类与Topic的一对多关系 -->
<set name="topics">
<key column="forumId"></key>
<one-to-many class="Topic" /><!-- 关联对方的实体 -->
</set>
forum表:
其中lastTopicId是Forum与topic之间一对一的关系
一对多和多对一总结:两张表中都是自己的属性,但是在多方加入外键引用一方的Id
3、多对多的表结构和xx.hbm.xml配置文件
user.hbm.xml
<!-- roles属性,本类与Role的多对多 -->
<set name="roles" table="itcast_user_role" lazy="false">
<key column="userId"></key> //本类的
<many-to-many class="Role" column="roleId"></many-to-many> //对方类的
</set>
user表:
role.hbm.xml
<!-- users属性,本类与User的多对多 -->
<set name="users" table="itcast_user_role">
<key column="roleId"></key>
<many-to-many class="User" column="userId"></many-to-many>
</set>
role表:
role_user表:
多对多表结构总结:user和role表中都是自己的属性,在第三张表中引用二者的主键。
4、一对一的表结构和xx.hbm.xml配置文件
<many-to-one name="lastTopic" class="Topic" column="lastTopicId"
unique="true"></many-to-one>
单向关联(谁记住谁)只能通过forum找到topic,通过topic找不到forum
topic表