mybtis 学习笔记

mybatis
  1. mybatis 介绍

    是开源的持久型框架,

  2. jdbc 的问题

    1> 数据库连接频繁的被创建,释放, 浪费系统资源。 如果使用数据库连接池就会解决这个问题,

    2> SQL 语句写在Java 代码中,存在硬编码问题

    3> 使用preparedStatement 向占位符传参数存在硬编码。

    4> 对结果解析存在硬编码

  3. mybatis 架构

    1> mysql 配置文件 (SqlMapConfig.xml+ 若干个和实体类(表)对应的mapper.xml)

    2> SqlSessionFactory (工厂中的原材料就是1 提供的)

    3> 工厂会产生一个SqlSession,其实SqlSession 就已经可以操作数据库了

    4> Executor 当Sqlsession 调用对数据库的增删改查时,实际上是通过Executor 来执行的. Executor 在Sqlsession 里面

    5> MappedStatement
    sql 语句被存放在一个pojo 对象里,这里MapperStatement 对象就是作为存放 sql 的pojo 来存在的。 MappedStatement 在Executor里面

    6> 在MappedStatement 这个环节,有输入和输出

    输入: Map 类型 ,String Integer 等基础数据类型,pojo

    输出: Map 类型 ,String Integer 等基础数据类型,pojo, List

    在MappedStatement向数据库发送请求后,会将查询结果自动映射成输出支持的类型。
    
  4. mybatis 实战初级版

    1. 主配置文件 SqlMapConfig.xml (主要用于配置别名和mapper文件信息)

      1> 在configuration标签下使用typeAliases 变迁可以配置别名或者指定包路径

      
          <!-- 别名 包以其子包下所有类   头字母大小都行-->
            <typeAliases>
                  <!--        <typeAlias type="cn.xiechengxu.pojo.User" alias="User"/> -->
                  <package name="cn.xiechengxu.pojo"/>
            </typeAliases>
      

      2> 在configuration标签下使用environments 配置数据库连接相关的信息。这个和spring整合后就可以废弃掉

      3> 在configuration标签下使用 mappers 配置和实体类(数据表)对应的mapper.xml 文件

      “`java




      “`

  5. 在mapper.xml 文件中写sql语句

    <mapper namespace="test">
    
      <select id="findUserById"  parameterType="Integer" resultType="cn.xiechengxu.pojo.User">
        select * from user where id = #{v}
      </select>
    
    </mapper>
    
  6. 在测试类中 构建 SqlSession 来执行sql 语句

    
    String resource="SqlMapConfig.xml";
        InputStream in=Resources.getResourceAsStream(resource);
    
        SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(in);
    
        //创建SqlSession
          SqlSession sqlSession=sqlSessionFactory.openSession();
          //执行sql
          User user=sqlSession.selectOne("test.findUserById",10);
          System.out.println(user);
    
mapper 文件中在写sql时,#{v} 和${value}的区别
  1. 前者可以防止sql注入,后者不行

  2. 前者是占位符,select * from user where id=? 占位符 ? == ‘五’

    {} 表示字符串拼接 select * from user where username like ‘%五%

    和占位符相比,少了单引号

    应为不能防止sql 注入,所有可以将其改写为#{} 这个占位符的形式

    select * from user where username like "%"#{value}"%"
    

    ${} 这种写法,sql注入,可以通过传入 参数 “五%’ or ‘1%’ =’1” 这样会生成这样的sql

    select * from user where username like ‘%五%’ or ‘1%’ =’1%’

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值