MyBatis入门介绍(一)

简介: MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。

自学方法论: 理论 -> 实践 -> 理论 -> 实践-> 理论 -> 实践 反复迭代三遍


MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。


Mybatis架构

1、mybatis配置

SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。

mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。

2、通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂。

3、由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。

4、mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。

5、Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。

6、Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。

7、Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。

mybatis默认使用log4j作为输出日志信息


xml文件详解:

<mapper namespace="test">
</mapper>

namespace :命名空间,用于隔离sql语句,后面会讲另一层非常重要的作用


1、根据id查询用户信息:

<select id="findUserById" parameterType="int" resultType="cn.itcast.mybatis.po.User">
  select * from user where id = #{id}
</select>

parameterType:定义输入到sql中的映射类型

resultType:定义结果映射类型

#{id}表示使用preparedstatement设置占位符号并将输入变量id传到sql。


2、根据用户名查询用户信息

<select id="findUserByUsername" parameterType="java.lang.String" 
  resultType="cn.itcast.mybatis.po.User">
   select * from user where username like '%${value}%' 
</select>

parameterType:定义输入到sql中的映射类型

resultType:定义结果映射类型

${value}表示使用参数将${value}替换,做字符串的拼接

注意:如果是取简单数量类型的参数,括号中的值必须为value


#{}和${}的区别:

#{}占位符:占位

如果传入的是基本类型,那么#{}中的变量名称可以随意写

如果传入的参数是pojo类型,那么#{}中的变量名称必须是pojo中的属性.属性.属性…

${}拼接符:字符串原样拼接

如果传入的是基本类型,那么${}中的变量名必须是value

如果传入的参数是pojo类型,那么${}中的变量名称必须是pojo中的属性.属性.属性…

注意:使用拼接符有可能造成sql注入,在页面输入的时候可以加入校验,不可输入sql关键字,不可输入空格


3、添加用户

<insert id="insertUser" parameterType="cn.itcast.mybatis.po.User">
<!-- selectKey将主键返回,需要再返回 -->
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
  select LAST_INSERT_ID()
</selectKey>
 insert into user(username,birthday,sex,address) 
  values(#{username},#{birthday},#{sex},#{address})
</insert>


添加selectKey实现将主键返回

keyProperty:返回的主键存储在pojo中的哪个属性

order:selectKey的执行顺序,是相对于insert语句来说,由于mysql的自增原理执行完insert语句之后才将主键生成,所以这里selectKey的执行顺序为after

resultType:返回的主键是什么类型

LAST_INSERT_ID():是mysql的函数,返回auto_increment自增列新记录id值


Mysql使用 uuid实现主键

将上面的selectKey标签内容改为如下:

<selectKey resultType="java.lang.String" order="BEFORE" 
keyProperty="id">
select uuid()
</selectKey>

注意这里使用的order是"BEFORE"


4、删除用户

<delete id="deleteUserById" parameterType="int">
delete from user where id=#{id}
</delete>


5、修改用户

<update id="updateUser" parameterType="cn.itcast.mybatis.po.User">
  update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address}
  where id=#{id}
</update>

Mapper接口开发需要遵循以下规范:

1、Mapper.xml文件中的namespace与mapper接口的类路径相同。

2、Mapper接口方法名和Mapper.xml中定义的每个statement的id相同

3、Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同

4、Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同


在SqlMapConfig.xml文件中加载UserMapper.xml文件

<!-- 加载映射文件 -->
<mappers>
  <mapper resource="mapper/UserMapper.xml"/>
</mappers>


hibernate和mybatis区别:

hibernate:它是一个标准的orm框架,比较重量级,学习成本高.

优点:高度封装,使用起来不用写sql,开发的时候,会减低开发周期.

缺点:sql语句无法优化

应用场景:oa(办公自动化系统), erp(企业的流程系统)等,还有一些政府项目,

总的来说,在用户量不大,并发量小的时候使用.

mybatis:它不是一个orm框架, 它是对jdbc的轻量级封装, 学习成本低,比较简单

优点:学习成本低, sql语句可以优化, 执行效率高,速度快

缺点:编码量较大,会拖慢开发周期

应用场景: 互联网项目,比如电商,P2p等

总的来说用户量较大,高并发的项目.

高并发的时候是有很多用户在访问,导致出现系统数据不正确、丢失数据现象


映射文件:

1)传入参数类型通过parameterType属性指定

2)返回结果集类型通过resultType属性指定

3)将字段名和属性名通过resultMap做一一对应关系


目录
相关文章
|
3月前
|
关系型数据库 Java 数据库连接
MyBatis-Plus简介和入门操作
【1月更文挑战第5天】 一、MyBatis-Plus简介 二、 MyBatis-Plus操作 1、准备数据库脚本 2、准备boot工程 3、导入依赖 4、配置文件和启动类 5、功能编码 6、测试和使用
105 1
|
5月前
|
SQL Java 数据库连接
Mybatis入门简介
Mybatis入门简介
57 0
|
3月前
|
SQL Java 数据库连接
JAVAEE框架技术之7-myBatis ORM框架入门基础CRUD
JAVAEE框架技术之7-myBatis ORM框架入门基础CRUD
90 0
JAVAEE框架技术之7-myBatis ORM框架入门基础CRUD
|
1月前
|
SQL JavaScript Java
mybatis-flex入门体验(一)
`shigen`,一个专注于Java、Python、Vue和Shell的博主,分享成长和认知。近期探索了`mybatis-flex`,通过官网学习了代码生成和编码体验。配置数据源和依赖后,利用示例代码生成了符合Lombok+MyBatis Plus规范的实体和Mapper。此外,展示了如何配置SQL打印,并用测试代码演示了查询、多条件查询和更新操作。`mybatis-flex`的亮点在于流畅的查询语法和连表查询功能。后续将分享更多关于连表查询的实践。一起学习,每天进步!
35 0
mybatis-flex入门体验(一)
|
1月前
|
Java 数据库连接 mybatis
|
2月前
|
XML Java 数据库连接
MyBatis入门配置
【2月更文挑战第9天】
MyBatis入门配置
|
3月前
|
Java 数据库连接 API
MyBatis入门操作
MyBatis入门操作
13 0
|
3月前
|
Java 数据库连接 测试技术
【MyBatis】操作数据库——入门
【MyBatis】操作数据库——入门
|
3月前
|
SQL Java 关系型数据库
一文彻底搞懂Mybatis系列(一)之mybatis入门
一文彻底搞懂Mybatis系列(一)之mybatis入门
|
4月前
|
SQL Java 数据库连接
MyBatis Plus 入门
MyBatis Plus 入门
51 0