mybatis第二天
2016-03-25 21:11
260 查看
数据库的设计原则:
三范式:
1、列不可再分(如,将一列地址字段----四川省成都市成华区,应该分为多个字段,包含省、市、区等)
2、行不可重复(数据的唯一性)
3、不可有与自身无关的数据存在(写外键,可通过外键查询到的数据不要写成表的字段)
事务脚本模式:一种设计理念,一个事件会触发一些列反应,而事务将保证这一事务的原子要么全部成功,要么全部失败
一个完整的事务包含4个特点:
原子性(atomicity):事务的原子性确保动作要么全部完成,要么完全不起作用
一致性(consistency):一旦所有事务动作完成,事务就被提交。也就是说要么都成功,要么都不成功
隔离性(isolation):多个事物同时处理一个数据的时候,每个事物都应该与其他事务隔离开来,防止数据损坏
持久性(durability):一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响。应该被持久化到数据库中
1:脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问 这个数据,然后使用了这个数据。
张三原来有3000块钱,又存款2000(这个时间比较长)。同一时间,张三老婆看到的张三卡里的钱还是只有3000,取款了2800,张三悲剧了,着就是脏读
2. 不可重复读 :是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据---并且修改。那么,在第一个事务中的两 次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的
3. 幻读 : 是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。 同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象 发生了幻觉一样
SqlSeesion操作的是配置文件,只要配置文件中写了相应的方法,就算接口没有书写该方法,也可以直接调用。
<mapper namespace="全路径名"></mapper>是xml文件映射的接口
select中的属性:
<insert id="saveUserBean" parameterType="UserBean" useGeneratedKeys="true" keyProperty="u.id">
id是对应接口内的方法名称 parameterType是全路径名(<typeAliases>使用这个标签去了别名的),可不写
查询语句中的属性:
resultType:从这条语句中返回的期望类型的类的完全限定名或别名。注意集合情形,那应该是集合可以包含的类型,而不能是集合本身。
resultMap:命名引用外部的 resultMap。
resultMap的书写:
<resultMap id="husbandAndWifeMap" type="HusbandBean"> id为别名 type为对应的实体bean
<result property="id" column="id" javaType="java.lang.Integer"></result>
<result property="husbandName" column="husband" javaType="java.lang.String"></result>
<association property="wife" column="id" select="com.lovo.my.dao.IWifeMapper.queryWifeBeanByHusbandId" javaType="WifeBean"/>
</resultMap>
association元素中的select为其他xml的相应的方法
批量删除的语法规则:delete from t_user where id in (1,2,3,4...)
<delete id="batchDeleteUserBean">
delete from t_user where id in (
<foreach collection="list" item="id" separator="," >
#{id}
</foreach>
)
</delete>
动态条件查询语句的拼装:
<sql id="item">
<if test="userName!=null and userName.length()!=0">
and user_name like '%${userName}%'
</if>
<if test="sex!=null and sex.length()!=0">
and sex=#{sex}
</if>
</sql>
<select id="selectByPage" resultMap="userMap">
select * from t_user where 1=1
<include refid="item"></include>
limit ${index},${rows}
</select>
resultMap是自定义的映射关系的id
分页方法需要一个CutPagBean的实体bean
内含属性有:当前页码,每页显示多少行,总页数,总记录数,当前页的list数据集合
分页需要两个方法:第一个方法是查询到满足条件的数据的总数据数,第二个方法才是查询当前页码的数据集合
三范式:
1、列不可再分(如,将一列地址字段----四川省成都市成华区,应该分为多个字段,包含省、市、区等)
2、行不可重复(数据的唯一性)
3、不可有与自身无关的数据存在(写外键,可通过外键查询到的数据不要写成表的字段)
事务脚本模式:一种设计理念,一个事件会触发一些列反应,而事务将保证这一事务的原子要么全部成功,要么全部失败
一个完整的事务包含4个特点:
原子性(atomicity):事务的原子性确保动作要么全部完成,要么完全不起作用
一致性(consistency):一旦所有事务动作完成,事务就被提交。也就是说要么都成功,要么都不成功
隔离性(isolation):多个事物同时处理一个数据的时候,每个事物都应该与其他事务隔离开来,防止数据损坏
持久性(durability):一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响。应该被持久化到数据库中
1:脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问 这个数据,然后使用了这个数据。
张三原来有3000块钱,又存款2000(这个时间比较长)。同一时间,张三老婆看到的张三卡里的钱还是只有3000,取款了2800,张三悲剧了,着就是脏读
2. 不可重复读 :是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据---并且修改。那么,在第一个事务中的两 次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的
3. 幻读 : 是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。 同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象 发生了幻觉一样
SqlSeesion操作的是配置文件,只要配置文件中写了相应的方法,就算接口没有书写该方法,也可以直接调用。
<mapper namespace="全路径名"></mapper>是xml文件映射的接口
select中的属性:
<insert id="saveUserBean" parameterType="UserBean" useGeneratedKeys="true" keyProperty="u.id">
id是对应接口内的方法名称 parameterType是全路径名(<typeAliases>使用这个标签去了别名的),可不写
查询语句中的属性:
resultType:从这条语句中返回的期望类型的类的完全限定名或别名。注意集合情形,那应该是集合可以包含的类型,而不能是集合本身。
resultMap:命名引用外部的 resultMap。
resultMap的书写:
<resultMap id="husbandAndWifeMap" type="HusbandBean"> id为别名 type为对应的实体bean
<result property="id" column="id" javaType="java.lang.Integer"></result>
<result property="husbandName" column="husband" javaType="java.lang.String"></result>
<association property="wife" column="id" select="com.lovo.my.dao.IWifeMapper.queryWifeBeanByHusbandId" javaType="WifeBean"/>
</resultMap>
association元素中的select为其他xml的相应的方法
批量删除的语法规则:delete from t_user where id in (1,2,3,4...)
<delete id="batchDeleteUserBean">
delete from t_user where id in (
<foreach collection="list" item="id" separator="," >
#{id}
</foreach>
)
</delete>
动态条件查询语句的拼装:
<sql id="item">
<if test="userName!=null and userName.length()!=0">
and user_name like '%${userName}%'
</if>
<if test="sex!=null and sex.length()!=0">
and sex=#{sex}
</if>
</sql>
<select id="selectByPage" resultMap="userMap">
select * from t_user where 1=1
<include refid="item"></include>
limit ${index},${rows}
</select>
resultMap是自定义的映射关系的id
分页方法需要一个CutPagBean的实体bean
内含属性有:当前页码,每页显示多少行,总页数,总记录数,当前页的list数据集合
分页需要两个方法:第一个方法是查询到满足条件的数据的总数据数,第二个方法才是查询当前页码的数据集合
相关文章推荐
- PAT (Advanced Level) Practise 1096 Consecutive Factors (20)
- 网站分页前后台代码
- 最常用和最难用的控件——ListView
- Xcode7(iOS9 beta1)网络请求失败,配置info.plist文件解决--iOS开发
- Spark 性能相关参数配置详解-压缩与序列化篇
- 创建自定义控件
- 让你的网站在移动端健步如飞
- PriorityQueue
- 3.3详解四种基本布局
- 3.1如何编写程序界面&3.2常见控件使用方法
- 若无心事挂枝头,便是人间好时节
- getter、setter
- python--类方法、对象方法、静态方法
- 5.1 类、超类和子类
- UI图标使用规范
- 4.3 用户自定义类
- 4.1 面向对象程序设计概述
- (15.1.15) 工具型产品如何建立自己的商业化模式?
- Objective-C内存管理
- 火狐浏览器伪造任意IP地址