分享MyBatis的学习经验和方法(一)

写在前面

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:循环(集合和数组)

下期接着这个继续说

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值