Mybatis学习笔记——第二天

Mybatis学习笔记—第二天

Mybatis笔记 第二天

一.复习

1. Mybatis框架 :

基于java的框架 , 做数据持久化 , 替换jdbc技术完成dao

2. 环境搭建 :

  1. jar引入 2) 引入配置文件–src 3) 初始化配置mybatis-config.xml

3. 使用mybatis框架

  1. 准备 : table entity dao接口
  2. 定义映射文件为接口提供实现 mapper.xml
 <mapper  namespace=”实现接口的全类名”>
    |-- <select id=”方法名” parameterType=”参数类型” resultType=”结果类型”>
       关于parameterType : 方法没有参数 或者 参数个数多于1个 ,省略该属性
       关于resultType: 单个对象写对象的全类名 , 返回值为集合则只需要指定集合 
                     里元素的类型
       关于sql命令:  取值#{ 注解为参数定义的名字 or 对象的属性名 or 下标 } 
    |-- <update id=””  parameterType=”实体类类型” >
    |-- <delete id=””  parameterType=”” >
    |-- <insert id=”” parameterType=”实体类型”>
       |-- <selectKey resultType=”” keyProperty=”” order=”BEFORE”> 
             查询一个int值为参数对象的id属性赋值
       |-- insert命令
  1. 注册映射文件 – 配置mybatis-config.xml
    <mappers>
       |-- <mapper resource=”映射文件路径 ---  从src开始写”/>
  1. 核心类
    ① SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); 工具
    ② Reader reader = Resources.getResourceAsReader(“mybatis-config.xml”);
    ③ builder.build(reader) —> SqlSessionFactory对象
    ④ SqlSession session = factory.openSession();
    ⑤ session.getMapper( 接口的类对象) --> 接口的对象

4.工具类

二.映射文件的特殊写法 — 主要查询

1. 多参查询 – 省略parameterType 重点

 注意:方法的形参名不能长时间保留,在编译过程中丢失,不能在映射文件中使用
 解决:
 1) 通过参数的下标来指定获取哪一个参数的值

在这里插入图片描述
在这里插入图片描述

 2) 通过注解为参数定义可以长久保留的名字( 至少出现在字节码文件里 )

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 关于特殊符号的处理 — < >

 1) 使用特殊的文字来代替符号  &lt; -- <   &gt; -- >

在这里插入图片描述

 2) 使用脚本标签来定义 --- 强烈建议

在这里插入图片描述
注意: 大多数脚本语言都用该标签解决代码中的特殊符号

3. 模糊查询 like

 1) 可以在映射文件里的sql命令上使用 || 拼接通配符
  ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200108211005220.png)
  1. 可以在dao方法被调用时, 在实参位置拼接
    在这里插入图片描述
    在这里插入图片描述

    4. 属性名和列名不一致 ( 尽量避免 )

    1. mybatis封装查询结果时(实体对象) , 会使用”查询结果里的字段名” 去为 实体的”
      同名属性” 赋值 , 如果没有同名属性则该值赋值失败

    2. 当实体类属性名与结果字段名不一致时 , 解决: 可以在查询过程中为字段定义”别
      名” , 要求别名要与实体类的属性名一致

    在这里插入图片描述
    在这里插入图片描述

5. 关于insert和update过程中的null的处理

当插入过程中出现null值时 , 需要使用jdbcType来指定null所代表的类型
在这里插入图片描述
在这里插入图片描述

三.配置文件的小技巧 — mybatis-config.xml

1. 关于实体类全类名的简化问题

  1. mybatis允许在配置文件里为实体类entity统一定义”简称”或者”别名” , 可以在映射
    文件中使用简称
    2)使用标签
    在这里插入图片描述
    在这里插入图片描述
    3) 注意: 接口名不能简化
    4) mybatis开发步骤:
    ① 准备 ②为实体类定义别名 ③映射文件 ④注册映射文件

2. 关于数据库连接数据的定义

 将数据库的连接信息单独定义在一个配置文件里, 在mybatis配置文件中引入并使用

在这里插入图片描述

3. 总结补充 — 各种取值

  1. EL里的取值 ---- ${ xxxScope.name }
  2. mybatis映射文件中获取参数的值 — #{ xxx } —PreparedStatement
  3. mybatis映射文件中还可以使用 ${xxxx} — Statement
  4. mybatis的配置文件中获取”其他配置文件信息” — ${ xxx }
  5. struts2的dmi技术中 {1} – 获取第一个通配符所在位置的值
  6. struts2配置文件中可以通过 ${action的实例变量名} – 获取action的实例变量的值
  7. <s:url value=”%{ognl}” >

四.关联关系数据的处理 [重点]

  1. 两个相对独立的数据之间的联系 — 关联关系
  2. 分类
    1. 一对一 : 学生student ~ 电脑computer
    2. 一对多( 多对一 ) : 普遍关系[重点] , 学生student ~ 小组team
    3. 多对多 : studnet ~ course , product ~ order

五.多对一关系 student --> team

  1. 在db里将数据描述清楚( 存放在哪一张表里 , 体现表里记录间的关系 )
    在这里插入图片描述

  2. 在java程序里通过实体类将数据描述清楚( 数据怎么存 , 体现关系 )
    在这里插入图片描述

  3. 定义dao接口 — 两个dao接口 – 多对一( studnet里有关系属性 , team里没有 )
    1)TeamDao( 基础5个方法 ) – 与原来的单表操作一致
    2)StudentDao( 基础5个方法) – 拥有关系属性的实体类对应的dao
    ① 增删改 – 与原来单表操作一致
    ② 查询特殊 – 需要查询完整的"学生对象"(学生基本信息,以及所在team的信息)
    所有数据来自于两张表( 需要表连接查询 – 左外连接 )
    Select s.id sid , s.name sname , s.age , t.id tid , t.name tname , t.count
    From student s left join team t on s.tid = t.id where s.id = #{id}

    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200108210527812.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzgyOTQwNw==,size_16,color_FFFFFF,t_70)
    

六.一对多 team --> student

  1. 在db里描述清楚
    在这里插入图片描述
  2. 在java的实体类之间描述关系
    在这里插入图片描述
  3. 定义dao接口 — 两个dao
  1. 没有关系属性的实体类对应的dao ( StudentDao ) — 单表操作
  2. 有关系属性的实体类对应的dao ( TeamDao )
    ① 增删改 — 单表操作
    ② 查询 – 查询完整的team对象( id name count 和 list )
    在这里插入图片描述

七.Struts2和mybatis整合

  1. 搭建环境 — web project
    1. 引入jar包 — struts的jar包 mybatis的jar包
    2. 引入配置文件 — struts.xml mybatis-config.xml — src
    3. 初始配置 — struts配置核心过滤器(web.xml)
      mybatis配置启动环境(mybatis-config.xml)
    4. 设置项目编码
  2. 定义sql文件 ( 建表 )
  3. 定义实体类 ( 描述关系 )
  4. 可选 : 定义实体类的别名 Alias
  5. 定义dao接口
  6. 写映射文件
  7. 注册映射文件
  8. 定义service层程序 (与原来的写法基本一致)
     Public .... Xxxx( ..... ){
         Try{
            Dao dao = (Dao)MybatisUtil.getMapper(Dao.class);
            Xxxxxxxx
            MybatisUtil.commit();
         }catch(Exception e){
            MybatisUtil.rollback();
            Throw new RuntimeException(e.getMessage());
         }
     }
  1. Action —> 收参 , 调用service层方法 , 返回String跳转
  2. Jsp展示数据 —> struts标签
    在这里插入图片描述
 <option  value=”did”> dname </option>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值