mybatis学习笔记(maven工具下)-基于IDEA2020.1.1

目 录

  • 三层架构
  • 框架
  • MyBatis框架
    • 什么是MyBatis?它提供了哪些功能?
    • mybatis的配置
    • mybatis基本步骤
    • 使用mybatis动态代理
        • 代理什么?
        • 使用动态代理的方式?
        • 使用动态代理要求?(重点)
        • 对于工具类中的主要类的介绍
    • 对于参数的理解
        • 传参数的方法
        • #和$的区别(重点)
    • mybatis返回结果
    • 动态sql
        • if是判断条件的
        • where用来包含多个``的
        • foreach循环java中的数组,list集合的。
        • sql代码片段,就是复用一些语句
    • 属性配置文件
    • PageHelper数据分页

三层架构

界面层:接受用户的请求参数,显示处理结果(jsp、html、servlet)
业务逻辑层:接受了界面层传递的数据,计算逻辑,调用数据库,获取数据
数据访问层:访问数据库,执行增删改查操作等等

三层对应的包
 界面层:controller包(servlet)
 业务逻辑层:service包(XXXService类)
 数据访问层:dao包(XXXDao类)
 
三层中类的交互
 用户使用界面层–>业务逻辑层–>数据访问层(持久层)–>数据库

三层对应的处理框架
 界面层–servlet–springmvc(框架)
 业务逻辑层–service类–spring(框架)
 数据访问层–dao类–mybatis(框架)

框架

什么是框架?
框架是一个模块,一个软件,半成品的软件,定义好了一些基础功能,需要加入自己所需要的功能就完整了
1.框架中定义好了一些功能,这些功能是可用的。
2.可以加入项目中自己的功能,这些功能可以利用框架中写好的功能。

框架特点:
1.框架一般不是全能的,不能做所有事情
2.框架是针对某一个领域有效
3.框架是一个软件

MyBatis框架

什么是MyBatis?它提供了哪些功能?

  1. 什么是MyBatis?
    早期叫做iBatis,开源框架,代码在Github
    mybatis是Mybatis SQL Mapper Farmework for Java(SQL映射框架)

  2. mybatis提供了哪些功能?
    1.提供了创建Connection、Statement、ResultSet的能力
    2.提供了执行sql语句的能力
    3.提供了循环sql,把sql结果转为java对象,List集合的能力
    4.提供了关闭资源的能力
    开发人员做的是:提供sql语句

  3. 总结
    mybatis是一个sql映射框架,提供了数据库的操作能力,是一个增强的JDBC。
    使用mybatis让开发人员集中精神写sql就可以了,不必关心Connection、Statement、ResultSet的创建与关闭。

mybatis的配置

  1. 标签下:
    namespace是命名空间(要求使用dao接口的全限定名称
    不同的mapper映射文件使用namespace来做区分
    不同的mapper映射文件所使用的namespace的命名不允许重复

  2. 标签:
     parameterType:为sql语句传参数的类型(可以省略不写)
     resultType:返回值类型(必须写)(值是类型的全限定名称)

  3. sql语句必须写在相应的标签中:
    ,,,等的id是接口中的方法名称

对于工具类中的主要类的介绍

  1. Resources:
    mybatis中的一个类,负责读取配置文件
     InputStream is =Resources.getResourceAsStream("mybatis-config.xml");

  2. SqlSessionFactoryBuilder:
    创建SqlSessionFactory对象
     SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
    创建SqlSessionFactory对象:
     SqlSessionFactory factory=builder.build(is);

  3. SqlSessionFactory:(重要
    重量级对象,程序创建一个对象耗时比较长,使用资源比较多,在整个项目中,有一个就够用了。
    作用:
    获取SqlSession对象
     SqlSession sqlsession=factory.openSession();
    openSession()方法说明:
     1.openSession():无参数,获取非自动提交事务的SqlSession对象
     2.openSession(boolean false):获取非自动提交事务的SqlSession对象
     3.openSession(boolean true):获取自动提交事务的SqlSession对象

  4. SqlSession:(重要
    SqlSession接口:定义了操作数据的方法
    使用要求:
     SqlSession对象不是线程安全的,需要在方法内部使用,在执行Sql语句之前,使用openSession()获取SqlSession对象。
    执行完毕后,需要关闭它,这样保证了它的线程安全

对于参数的理解

从java代码中把实际的值传入到mapper文件中

传参数的方法

  1. 一个简单类型的参数:#{任意字符}
    简单类型:mybatis把java的基本数据类型和String都叫简单类型
    在这里插入图片描述
    在这里插入图片描述

  2. 多个简单类型的参数:Dao类方法中使用@Param(“自定义名称”)
    mybatis学习笔记(maven工具下)-基于IDEA2020.1.1_第7张图片
    在这里插入图片描述

  3. 使用一个java对象,对象的属性值作为mapper文件的参数:#{java对象的属性名}
    在这里插入图片描述

  4. 使用参数的位置:#{arg0,arg1}(不常用)

  5. 使用Map作为参数:#{Map的key}(不常用)

#和$的区别(重点)

#:占位符,表示列值,效率高,相当于PreparedStatement
$:占位符,表示字符串连接,可能会发生sql注入,效率低,相当于Statement

mybatis返回结果

  1. resultType:表示sql语句的执行结果
     1.使用类型的全限定名称(常用)
     2.使用别名:使用标签;使用类名就是包名

  2. resultMap:自定义别名和java对象的属性名关系

  3. 当列名和属性名不一样的解决方式
     1.sql语句中使用列别名
     select name as myname from student
     
     2.使用标签定义列名和属性的对应关系
    mybatis学习笔记(maven工具下)-基于IDEA2020.1.1_第8张图片

  4. like(模糊查询)
     1.在java代码中指定like的内容:String sql="%李%"
     2.在mapper中拼接like where name="%" ${name} "%"

动态sql

sql的内容是变化的,可以根据条件获取到不同的sql语句,主要是where部分的变化
动态sql的实现,使用的是mybatis提供的标签

if是判断条件的


  部分sql语句
 
语法:
mybatis学习笔记(maven工具下)-基于IDEA2020.1.1_第9张图片

where用来包含多个

当多个if有一个成立的话,标签会自动增加一个where关键字,并去掉中多余的and、or…
语法:
mybatis学习笔记(maven工具下)-基于IDEA2020.1.1_第10张图片

foreach循环java中的数组,list集合的。

主要用在sql的in语句中


 collection:表示接口中方法参数的类型,如果是数组就用array,list集合就用list
 item:自定义的,表示数组和集合成员的变量
 open:循环开始时的字符
 close:循环结束时的字符
 separator:集合成员之间的分隔符
 
 语法:
mybatis学习笔记(maven工具下)-基于IDEA2020.1.1_第11张图片

sql代码片段,就是复用一些语句

步骤:
  先定义sql语句,表名,字段
  再使用

属性配置文件

  1. 数据库的属性配置文件(常用)
    把数据库连接信息放到一个单独的文件中。和mybatis主配置文件分开
     在resources目录中定义一个属性配置文件:xxx.properties
     在mybatis的主配置文件,使用指定文件的位置
     mybatis学习笔记(maven工具下)-基于IDEA2020.1.1_第12张图片mybatis学习笔记(maven工具下)-基于IDEA2020.1.1_第13张图片

  2. 指定多个mapper文件
    第一种:在中添加多个
    第二种:在中添加包

使用的要求:
mapper文件名和接口名一致
mapper文件和dao接口在同一目录

PageHelper数据分页

是国人写的一款插件,不属于mybatis
实现数据分页,需要在pom文件和mybatis-config文件中配置依赖和插件

pom:
mybatis学习笔记(maven工具下)-基于IDEA2020.1.1_第14张图片
mybatis-config:
mybatis学习笔记(maven工具下)-基于IDEA2020.1.1_第15张图片
测试:
在这里插入图片描述

mybatis学习笔记(maven工具下)-基于IDEA2020.1.1_第16张图片

mybatis学习笔记(maven工具下)-基于IDEA2020.1.1_第17张图片

你可能感兴趣的:(mybatis,java,maven)