持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第23天,点击查看活动详情
1、MyBatis概述
MyBatis是最近几年非常流行的数据访问层(Dao层)框架,能够简单高效的实现对数据层访问。
2、MyBatis和JDBC的比较
(1)JDBC:java原生的关系型数据库的访问方式
A 每次操作数据库都需要获取连接,关闭连接,在大量访问数据库时,频繁的关闭连接消耗性能。
B 需要手动编写sql,有学习成本
C 需要手动赋值sql参数,查询结果需要手动封装到javabean中。
D sql语句写死在程序中,需要修改sql语句必须修改源文件。
(2)MyBatis
是一种半自动对象-表映射关系的Dao层框架,可以自动的进行对象的封装,但是sql语句仍然需要自己来写。 结合了JDBC和Hibernate框架的优点,可以手写sql语句灵活实现数据访问,自动封装数据,较少复杂代码。
3、MyBatis框架的结构
4、MyBatis的入门案例
(1)创建Java项目,并导入mybatis开发的相关jar包
(2)启动mysql数据库的服务,准备库、表以及数据; 定义javabean类为User类,和use表对应,形成映射关系
(3)编写配置文件SqlMapConfig.xml,默认放在src目录下。
(4)编写映射文件UserMapper.xml,默认放在src目录下。
(5)创建测试类,测试代码
5、MyBatis的参数传递
需要在映射文件XXMapper.xml中通过#{}进行值的接收 (1)值的传递---Map传递
(2)值的传递—javabean传递
(3)值的传递—单值传递
6、MyBatis框架的增删改查操作(动态sql语句)
<!-- 命名空间,保证值唯一,标识UserMapper.xml文件的,值一般包+xml的文件名命名组成 -->
<mapper namespace="com.lddx.mapper.UserMapper">
<!-- 修改操作 -->
<!-- 根据id修改年龄 -->
<update id="update01">
update user set age=#{age} where id=#{id};
</update>
<!--
思考:现在是根据id修改年龄 update user set age=#{} where id=#{};
后面如果想根据id同时修改年龄和姓名 update user set age=#{},name=#{} where id=#{}
两种不同的修改要求,需要写2个sql语句的配置,比较麻烦
MyBatis框架提供了一种动态sql语句,可以解决入上问题
-->
<!-- 修改操作,动态sql语句的写法 -->
<update id="update02">
update user
<set>
<if test="age>=0">age=#{age},</if>
<if test="name!=null">name=#{name}</if>
</set>
where id=#{id};
</update>
<!-- 查询操作,静态sql语句的写法 ,需要写3个sql语句的配置,比较麻烦
只根据id做查询 select * from user where id=#{};
想根据id和name作为查询条件:select * from user where id=#{} and name=#{};
想根据id,name和age作为条件查询:select * from user where id=#{} and name=#{} and age=#{};
-->
<select id="select01" resultType="com.lddx.bean.User">
select * from user
<where>
<if test="id!=0">id=#{id}</if>
<if test="name!=null"> and name=#{name}</if>
<if test="age>=0"> and age=#{age}</if>
</where>
;
</select>
<!-- 插入操作,动态sql语句的写法
insert into user(id) values(#{});
insert into user(name) values(#{});
insert into user(id,name) values(#{},#{});
insert into user(name,age) values(#{},#{});
insert into user(id,name,age) values(#{},#{},#{});
-->
<insert id="insert01">
insert into user
<trim prefix="(" suffix=")">
<if test="id!=0">id,</if>
<if test="name!=null">name,</if>
<if test="age>=0">age</if>
</trim>
values
<trim prefix="(" suffix=")">
<if test="id!=0">#{id},</if>
<if test="name!=null">#{name},</if>
<if test="age>=0">#{age}</if>
</trim>
;
</insert>
<!-- 删除操作,动态sql语句的写法
delete from user where id=#{};
delete from user where id=#{} and name=#{}
...
select * from user where id=#{} and name=#{};
-->
<delete id="delete01">
delete from user
<where>
<if test="id!=0">id=#{id}</if>
<if test="name!=null"> and name=#{name}</if>
<if test="age>=0"> and age=#{age}</if>
</where>
;
</delete>
</mapper>