前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mybatis的学习

mybatis的学习

作者头像
用户10325771
发布2023-03-14 15:42:55
1.3K0
发布2023-03-14 15:42:55
举报
1 主键返回

1.1 自增主键返回
代码语言:javascript
复制
 mysql自增主键,执行insert提交之前自动生成一个自增主键。
 通过mysql函数获取到刚插入记录的自增主键:
 LAST_INSERT_ID()   
 是insert之后调用此函数。
 修改insertUser定义: 

1.2 非自增主键返回

使用mysql的uuid()函数生成主键,需要修改表中id字段类型为string,长度设置成35位。 执行思路: 先通过uuid()查询到主键,将主键输入 到sql语句中。 执行uuid()语句顺序相对于insert语句之前执行。

2 #{}、${}
2.1 #{}

{}表示一个占位符号,#{}接收输入参数,类型可以是简单类型,pojo、hashmap。 如果接收简单类型,#{}中可以写成value或其它名称。 {}接收pojo对象值,通过OGNL读取对象中的属性值,通过属性.属性.属性…的方式获取对象属性值。

2.2 ${}

{}表示一个拼接符号,会引用sql注入,所以不建议使用{}。 {}接收输入参数,类型可以是简单类型,pojo、hashmap。 如果接收简单类型,{}中只能写成value。

3 mybatis和hibernate本质区别和应用场景

hibernate:是一个标准ORM框架(对象关系映射)。入门门槛较高的,不需要程序写sql,sql语句自动生成了。 对sql语句进行优化、修改比较困难的。 应用场景:适用与需求变化不多的中小型项目,比如:后台管理系统,erp、orm、oa。。

mybatis:专注是sql本身,需要程序员自己编写sql语句,sql修改、优化比较方便。mybatis是一个不完全 的ORM框架,虽然程序员自己写sql,mybatis 也可以实现映射(输入映射、输出映射)。 应用场景:适用与需求变化较多的项目,比如:互联网项目。 企业进行技术选型,以低成本 高回报作为技术选型的原则,根据项目组的技术力量进行选择。

4 mybatis开发dao的方法
4.1 原始dao开发方法(程序员需要写dao接口和dao实现类)
4.11 思路

程序员需要写dao接口和dao实现类。 需要向dao实现类中注入SqlSessionFactory,在方法体内通过SqlSessionFactory创建SqlSession

4.12 dao接口

4.13 dao接口实现类

4.1.4 测试代码

4.2.5 总结问题
  1. dao接口实现类方法中存在大量模板方法,设想能否将这些代码提取出来,大大减轻程序员的工作量。
  2. 调用sqlsession方法时将statement的id硬编码了
  3. 调用sqlsession方法时传入的变量,由于sqlsession方法使用泛型,即使变量类型传入错误,在编译阶段也不报错,不利于程序员开发
4.2 mapper代理方法(程序员只需要mapper接口(相当 于dao接口))
4.2.1 mapper代理开发规范

程序员还需要编写mapper.xml映射文件 程序员编写mapper接口需要遵循一些开发规范,mybatis可以自动生成mapper接口实现类代理对象

  1. 在mapper.xml中namespace等于mapper接口地址
  2. mapper.java接口中的方法名和mapper.xml中statement的id一致
  3. mapper.java接口中的方法输入参数类型和mapper.xml中statement的parameterType指定的类型一致
  4. mapper.java接口中的方法返回值类型和mapper.xml中statement的resultType指定的类型一致。

总结: 以上开发规范主要是对下边的代码进行统一生成: User user = sqlSession.selectOne(“test.findUserById”, id); sqlSession.insert(“test.insertUser”, user); ………

4.2.2 在SqlMapConfig.xml中加载mapper.xml

4.2.3 测试

5 SqlMapConfig.xml

mybatis的全局配置文件SqlMapConfig.xml,配置内容如下:

  • properties(属性)
  • settings(全局配置参数)
  • typeAliases(类型别名)
  • typeHandlers(类型处理器)
  • objectFactory(对象工厂)
  • plugins(插件)
  • environments(环境集合属性对象)
  • transactionManager(事务管理)
  • dataSource(数据源)
  • mappers(映射器)

注意:这里的配置有些用到的配,用不到的可以不写,但是顺序一定要一样

不然会报如下错误:

6 自定义别名
6.1 单个自定义别名

引用

6.2 批量定义别名

7 mapper映射
7.1 通过resource加载单个映射文件
代码语言:javascript
复制
<mapper resource="mapper/UserMapper.xml"/>
7.2 通过mapper接口加载单个mapper

7.3 批量加载mapper(推荐使用)

8 输出映射
8.1 resultType

使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功。 如果查询出来的列名和pojo中的属性名全部不一致,没有创建pojo对象。 只要查询出来的列名和pojo中的属性有一个一致,就会创建pojo对象。

8.2 resultMap
8.2.1 resultMap使用方法

如果查询出来的列名和pojo的属性名不一致,通过定义一个resultMap对列名和pojo属性名之间作一个映射关系。 1、定义resultMap 2、使用resultMap作为statement的输出映射类型

8.2.2 将下面的sql使用user完成映射

SELECT id id_,username username_ FROM USER WHERE id=#{value} User类中属性名和上边查询列名不一致。

定义:

使用:

9 动态sql

mybatis核心 对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接、组装。

9.1 需求

用户信息综合查询列表和用户信息查询列表总数这两个statement的定义使用动态sql。 对查询条件进行判断,如果输入参数不为空才进行查询条件拼接

9.2 mapper.xml

9.3 sql片段
9.3.1 定义

9.3.2 引用sql片段

9.4 foreach

向sql传递数组或List,mybatis使用foreach解析

9.4.1 需求

在用户查询列表和查询总数的statement中增加多个id输入查询。 sql语句如下,两种方法: SELECT * FROM USER WHERE id=1 OR id=10 OR id=16 SELECT * FROM USER WHERE id IN(1,10,16)

9.4.2 mapper.xml

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-03-04),如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 主键返回
    • 1.1 自增主键返回
      • 1.2 非自增主键返回
      • 2 #{}、${}
        • 2.1 #{}
          • 2.2 ${}
          • 3 mybatis和hibernate本质区别和应用场景
          • 4 mybatis开发dao的方法
            • 4.1 原始dao开发方法(程序员需要写dao接口和dao实现类)
              • 4.11 思路
              • 4.12 dao接口
              • 4.13 dao接口实现类
              • 4.1.4 测试代码
              • 4.2.5 总结问题
            • 4.2 mapper代理方法(程序员只需要mapper接口(相当 于dao接口))
              • 4.2.1 mapper代理开发规范
              • 4.2.2 在SqlMapConfig.xml中加载mapper.xml
              • 4.2.3 测试
          • 5 SqlMapConfig.xml
          • 6 自定义别名
            • 6.1 单个自定义别名
              • 6.2 批量定义别名
              • 7 mapper映射
                • 7.1 通过resource加载单个映射文件
                  • 7.2 通过mapper接口加载单个mapper
                    • 7.3 批量加载mapper(推荐使用)
                    • 8 输出映射
                      • 8.1 resultType
                        • 8.2 resultMap
                          • 8.2.1 resultMap使用方法
                      • 9 动态sql
                        • 9.1 需求
                          • 9.2 mapper.xml
                            • 9.3 sql片段
                              • 9.3.1 定义
                              • 9.3.2 引用sql片段
                            • 9.4 foreach
                              • 9.4.1 需求
                              • 9.4.2 mapper.xml
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档