您的位置:首页 > 大数据 > 人工智能

Mybaits 基础

2017-03-12 17:15 99 查看

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的框架原理







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
 


   数据库脚本初始化
   
     



      1、 执行sql_table.sql脚本,创建数据库表;
      2、 执行sql_data.sql初始化测试数据。
      


 

     3.3 工程搭建

      Mybatis的核心包和依赖包

      MySQl的驱动包

      Junit(非必须)

    


   3.4需求开发

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

   【1】 映射文件

  在config目录下,创建User.xml

      


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


    【3】测试代码

    输出id=1的用户信息    


   

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

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

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


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

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

    【1】映射文件

      


      

     【2】测试代码

       


小结:

#{ }和${ }的区别:

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

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

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

selectOne和selectList的区别

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

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

parameterType和resultType

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

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

    (3)添加用户

       【1】映射文件

       


       【2】测试代码

        


    

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



        【4】主键返回值 UUID

          


        【5】主键返回值序列

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mybatis 持久层框架