Mybaits 基础

1 Mybatis的介绍

 程序使用jdbc直接连接数据库问题总结

1、数据库连接频繁的创建和关闭,缺点浪费数据库的资源,影响操作效率

设想:使用数据库连接池

2、sql语句是硬编码,如果需求变更需要修改sql,就需要修改Java代码,需要重新编译,系统不易维护。

设想:将sql语句统一配置在文件中,修改sql不需要修改java代码。

3、通过preparedStatement向占位符设置参数,存在硬编码( 参数位置,参数)问题。系统不易维护。

设想:将sql中的占位符及对应的参数类型配置在配置文件中,能够自动输入映射。

4、遍历查询结果集存在硬编码(列名)。

设想:自动进行sql查询结果向java对象的映射(输出映射)。



Mybatis就是一个封装来jdbc的持久层框架它和hibernate都属于ORM框架但是具体的说,hibernate是一个完全的orm框架mybatis是一个不完全的orm框架

Mybatis让程序员只关注sql本身而不需要去关注如连接的创建、statement的创建等操作

Mybatis会将输入参数、输出结果进行映射。


Mybatis解决了jdbc编程的哪些问题

1、  数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。

解决:在SqlMapConfig.xml中配置数据链接池,使用连接池管理数据库链接。

2、  Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。

解决:将Sql语句配置在XXXXmapper.xml文件中与java代码分离。

3、  向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。

解决:Mybatis自动将java对象映射至sql语句,通过statement中的parameterType定义输入参数的类型。

4、  对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。

解决:Mybatis自动将sql执行结果映射至java对象,通过statement中的resultType定义输出结果的类型。



Mybatis的框架原理

Mybaits 基础_第1张图片



Mybatis 入门程序
在了解Mybatis程序的原理后,写一个小demo对Mybatis进行实践

   3.1需求

 对订单商品案例中的用户表进行增删改查操作

   1、 根据用户ID查询用户信息

   2、 根据用户名称模糊查询用户列表

   3、 添加用户


 3.2环境准备

    首先要下载MyBaits,2 Mybatis的框架原理mybaits的代码由github.com管理
 下载地址:https://github.com/mybatis/mybatis-3/releases
  Mybaits 基础_第2张图片
   数据库脚本初始化
   
     

      1、 执行sql_table.sql脚本创建数据库表

      2、 执行sql_data.sql初始化测试数据

      Mybaits 基础_第3张图片

 

     3.3 工程搭建

      Mybatis的核心包和依赖包

      MySQl的驱动包

      Junit(非必须)

    Mybaits 基础_第4张图片


   3.4需求开发

   (1)根据用户ID查询用户信息

   【1】 映射文件

  在config目录下创建User.xml

      Mybaits 基础_第5张图片

     【2】在全局配置文件中加载映射文件 SqlMapConfig.xml

       Mybaits 基础_第6张图片

    【3】测试代码

    输出id=1的用户信息    Mybaits 基础_第7张图片

   


     (2)根据用户名称模糊查询用户列表

     模糊查询名字带小明的用户信息,其SQL语句为

SELECT * FROM user WHERE username LIKE '%小明%'

    但是我们又不会在前段页面输入 %小明%,只会输入 小明。这个时候就要用到${ }

     ${ }表示拼接sql串,将接受到的内容不加任何修饰的加在sql中

    【1】映射文件

      Mybaits 基础_第8张图片

      

     【2】测试代码

       Mybaits 基础_第9张图片


小结:

#{ }和${ }的区别:

 #{ }代表一个占位符,#{}接收简单类型的参数时里面的名称可以任意

 ${ }代表拼接符号,${}接收简单类型的参数时里面的名称必须value,${}里面的值会原样输出,不加解析(如果该参数值字 符串,有不会添加引号)

 因为会引起sql注入,所以不建议使用


selectOne和selectList的区别

 selectOne表示查询出一条记录进行映射。如果使用selectOne可以实现使用selectList也可以实现

 selectList表示查询出一个列表(多条记录)。如果使用selectList查询多条记录,不能使用selectOne。


parameterType和resultType

  parameterType指定输入参数的java类型,parameterType只有一个,也就是说入参只有一个。

  resultType指定输出结果的java类型(是单条记录的java类型)



    (3)添加用户

       【1】映射文件

       Mybaits 基础_第10张图片

       【2】测试代码

        Mybaits 基础_第11张图片

    

       【3】逐渐返回之自增主键

Mybaits 基础_第12张图片


        【4】主键返回值 UUID

          Mybaits 基础_第13张图片


        【5】主键返回值序列

   序列也就是sequence,它是Oracle的主键生成策略

Mybaits 基础_第14张图片


你可能感兴趣的:(mybatis,持久层框架,Mybatis)