写在前面
hello 大家好,我是一名00后新晋程序猿 目前大三 !一个超级会写bug的程序猿!欢迎大佬评论留言学习!
一、了解Mybatis
MyBatis叫半自动化的ORM,所谓的半自动化就是需要开发人员书写 SQL语句,性能高,利于sql语句的优化,所以大中型公司会用; hibernate叫全自动化的ORM,所谓全自动化化就是不用开发人员书写 SQL语句,性能低,不利于sql语句优化,所以中小型公司会用!
ORM包含两层概念: 1.Java中的对象(class)和数据库中哪张表对应; 2.对象中哪个成员变量和数据库表中的哪个字段也有对应关系;
使用mybatis时sql语句放在xml文件中 数据库表着重关注点: 1.主键 2.外键 建表的六大约束: 1.主键约束 2.外键约束 3.唯一性约束 4.非空约束 5.默认值约束 6.检查性约束
mybatis开发步骤: 1.新建工程,并导入jar包,不能缺少数据库驱动包 2.编写mybatis的配置文件(mybatis-config.xml)
3.创建实体类(User) 4.dao层——sql映射文件,里面放sql语句(实体类Mapper.xml) 5.编写测试类 6.对mybatis中出现的公共代码进行抽取,工具类(MybatisUtil.java) 下面三个接口是mybatis中的三个核心接口类: SqlSessionFactoryBuilder——建造者,建造火腿肠工厂的工人 SqlSessionFactory——会话工厂,相当于火腿肠工厂 SqlSession——最核心的接口,会话,将来通过这个会话发送sql语句 给数据库执行,相当于火腿肠!
二、创建一个tb_user的表
create table tb_user(
id INT PRIMARY KEY not null auto_increment,
userName varchar(30),
gender varchar(2),
age INT,
birthday date
);
insert into tb_user values(default, '张三', '男', 20,
'2020-01-06');
insert into tb_user values(default, '李四', '男', 23,
'2018-04-06');
insert into tb_user values(default, '王五', '女', 18,
'2008-02-26');
insert into tb_user values(default, '赵六', '女', 17,
'2012-11-26');
insert into tb_user values(default, '前期', '男', 32,
'2003-08-06')
三、基于Mapper接口方式:
1.映射文件的namepspace的值必须要与当前的dao层对应的接口的全 路径相同
2.映射文件的名称也要与dao层接口的类的名称相同 3.update、select、delete、insert标签的id属性的值必须要与对应的 dao层接口的中方法名相同,且不能有重载;
<select>——查询
id:与方法名称相同,并且唯一
parameterType:入参类型(完整的类名,或别名)
resultType:返回值类型(完整的类名,或别名)
查询可以传递多个参数,有三种方式:
1.使用实体类
2.使用Map
3.@Param
根据用户名查询以及年龄这两个条件查询用信
insert:添加
delete:删除
update:更新
association标签:映射多对一(一对一)
collection标签:映射一对多(多对多)
mapper.xml的举例 修改删除相同的操作
<select id="findCount" parameterType="map" resultType="fligh" >
SELECT
count(*)
FROM
flight f
<where>
<if test="departureCity !=null">
and f.departureCity=#{departureCity}
</if>
<if test="arrivalCity !=null">
and f.arrivalCity=#{arrivalCity}
</if>
</where>
</select>
<insert id="add" parameterType="flight">
insert into flight(
flightNo,
departureCity,
arrivalTime
)values(
#{flightNo},
#{departureCity},
#{arrivalTime}
)
</insert>
resultMap:
查询的数据如何和一个Java对象怎么对应 1.解决成员变量名和数据表中字段名不一致情况 2.解决关联关系(一对一,多对一,一对多,多对多) 注意点:resultType和resultMap只能二选一
举例说明
<resultMap type="Flight" id="flightMap">
<id property="id" column="Id"/>
<result property="flightNo" column="flightNo"/>
<result property="departureTime" column="departureTime"/>
<result property="arrivalTime" column="arrivalTime"/>
<association property="departureCity" javaType="City"
resultMap="com.java1412.dao.CityMapper.cityMap" ></association>
<association property="arrivalCity" javaType="City"
resultMap="com.java1412.dao.CityMapper.cityMap" ></association>
</resultMap>
设置二级缓存的步骤:
1.在mybatis-config.xml文件中操做
<settings>
<!-- 开启二级缓存 -->
<setting name="cacheEnabled" value="true" />
</settings
2.在映射文件中开启缓存
<cache eviction="FIFO" flushInterval="60000"
size="512" readOnly="true"/>
eviction : 表示缓存的清空策略,FIFO先进先出
flushInterval: 缓存的刷新时间间隔
size :缓存空间的大小
readOnly : 只读
3.可以在select标签中单独配置useCache OGNL表达式:对象图导航语言,有点类似于EL表达式
if:判断
trim:替换where和set,其实就是打包了where和set的功能
prefix:前缀
suffix:后缀
prefixOverrides:前缀覆盖
suffixOverrides:后缀覆盖
where:给sql添加条件where,自动去掉第一个and或or
set:给更新语句添加set关键字,自动去掉更新字段的最后一个,
choose(when、otherwise):相当于java中switch-casedefault,只能做等值判断而且只能选择其中一个
foreach:循环(集合和数组)
下期接着这个继续说