mybatis

mybatis:持久层框架 对于jdbc操作数据库的过程进行封装,让我们只需要关注sql本身
半自动orm框架 orm对象关系映射
半自动 仍需要我们写sql语句
全自动:查询关联对象或是关联模型时,可以根据对象模型直接获取

能做什么 ?
创建Connection Statement ResultSet
执行sql语句 得到 resultset
处理resultset 把记录集中数据转化为java对象,同时还能把java对象放入list集合
关闭资源
sql语句 和 java代码 解耦合

为什么用?
1、Mybatis就是帮助程序猿将数据存入数据库中 , 和从数据库中取数据 .
2、传统的jdbc操作 , 有很多重复代码块 .比如 : 数据取出时的封装 , 数据库的建立连接等等… , 通过框架可以减少重复代码,提高开发效率 .
3、MyBatis 是一个半自动化的ORM框架 (Object Relationship Mapping) -->对象关系映射

mabatis中的一些重要对象

Resource:作用 读取主配置信息
InputStream inputStream = Resources.getResourceAsStream(config);

SqlSessionFactoryBuilder 负责创建SqlSessionFactory对象
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);

SqlSessionFactory 是重量级对象:创建此对象需要使用很多的资源和时间 项目中有一个就可以了
SqlSessionFactory接口 作用 sqlsession工厂 创建 sqlsession对象
openSession() 获取一个默认 sqlsession对象 默认手工提交事务
openSession(boolean) 获取一个默认 sqlsession对象 创建一个选择提交事务方式对象 对于只执行一条sql可以使用

sqlsession是一个接口 提供了大量sql语句的方法
sqlsession对象不是线程安全的
1、在方法内部执行sql之前 获取sqlsession对象
2、调用sqlsession的方法 执行sql语句
3、关闭sqlsession资源(close)

mabatis代理
通过mybatis提供的代理
mybatis创建了dao接口的实现类对象,完成sql语句的执行 mybatis创建一个对象(proxy)代替你dao实现类的功能
要求
1、mapper中namespace一定是dao接口的全限定名称
2、mapper中标签的id是dao接口方法名称
实现 sqlsession对象的实现方法 getMapper(dao.class)

参数
parameterType 参数内容 dao层的形参
一个简单参数 多个简单参数 对象参数 按位置传参(arg0第一个位置 arg1第二个位置 arg2)不推荐 可读性不好
用map作为参数

占位符 #和$

#占位符 语法:#{}
myvatis处理#{}会创建prepareStatement对象
#{}相当于 ?占位符
特点:
使用prepareStatement对象执行sql语句 效率高
能够避免sql注入 更安全
常作为列的值使用 位于等号右侧使用 #{}位置的值与数据类型有关

${字符} 表示字符串的连接 sql语句的其他内容与字符串的连接方式连接在一起的
创建的是Statement对象
特点:使用Statement执行sql语句 效率更低
${}使用字符串连接的方式 有sql注入风险 有代码安全问题
原样使用的不会区分数据类型
常用表名和列名

封装输出结果
mybatis 执行sql语句 得到resultset 转化为 java对象

resultType 作为select属性 表示 结果类型 有两类 java类型全限定名称 和 别名
过程
1、调用 java类型全限定名称或别名的无参构造方法 创建对象
2、同名的列复制给同名的属性 (set方法)
3、得到java对象 如果返回值是list集合 则把Student对象放入到list集合

自定义别名
mybatis提供简单好记的名称
自定义别名步骤 (settings后)
第一种语法格式
1、在mybatis主配置文件中 使用typeAliase标签声明别名
type 全限定名称 aliase 别名
< typeAliases>
< typeAlias type=“com.example.demo.model.Student” alias=“student”/>
< /typeAliases>
优点 自定义别名
缺点 每一种java类型都需要定义
第二种方式 :
name 包名 会把这个包中的所有类名作为别名(不区分大小写)
< typeAliases>
< package name=“com.example.demo.model”/>
< /typeAliases>
优点:使用方便 一次性给多个类使用别名
缺点:不能自定义 不同包中有同名的类

2、在XML文件中 使用resultType = “别名”

建议不用别名 用全限定名称

resultMap

pom引入依赖包 mybatis mysql junit
application配置数据库 以及 mapper.xml路径
启动类@mapperscan配置启动路径
创建dao接口 定义操作数据库的方法 创建xml文件(mapper) 写sql mapper写sql语句 一个表一个mapper文件

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值