栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

自学之框架---Mybatis

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

自学之框架---Mybatis

MyBatis 三层架构

1、界面层(controller包 servlet)

2、业务逻辑层(service包):接收表示传递过来的数据,检查数据,计算业务逻辑,计算业务逻辑,调用数据访问层获取数据。

3、数据访问层(dao包)

三层对应的处理框架:

界面层——servlet——springmvc(框架)

业务逻辑层——service类——spring(框架)

数据访问层——dao类——mybatis(框架)

MyBatis框架概述

基于java的持久层框架。早期叫做ibatis,代码在github。

mybatis是sql映射框架:

1)sql mapper:sql映射

可以把数据库表中的一行数据,映射为一个java对象。一行数据可以看作是一个java对象。操作这个对象,就相当于操作表中的数据。

2)数据访问,对数据库进行增删改查

mybatis提供了哪些功能:

1、提供了框架Connection,Statement,ResultSet的能力,不用开发人员创建这些对象了

2、提供了执行sql语句的能力,不用你执行sql

3、提供了循环sql,把sql的结果转化为java对象,List集合的能力

4、提供了关闭资源的能力,不用你关闭Connection,Statement,ResultSet

开发人员提供sql语句

最后是:开发人员提供sql语句–mybatis处理sql–开发人员得到List集合或java对象(表中的数据)

基本步骤

1、加入依赖


      org.mybatis
      mybatis
      3.5.1
    
    
    
      mysql
      mysql-connector-java
      5.1.9
    

2、创建Dao接口

//接口操作Student表
public interface StudentDao {
    //查询Student表的所有数据
    public List selectStudents();
}

3、创建mapper文件,也叫做sql映射文件:写sql语句的,和接口中方法对应的sql语句



 
    
    
        select id,name,email,age from student where name = #{paramName} or age=#{paramAge}
    
    
    
        select id,name,email,age from student where name = #{arg0} or age=#{arg1}
    
    
    
    select id,name,email,age from student 

对等的jdbc

ResultSet rs = executeQuery("select id,name,email,age from student")
    while(rs.next()){
        Student student = new Student;
        student.setId(rs.getInt("id"));
        student.setName(rs.getString("name"));
    }

2)定义自定义类型的别名

​ 1)在mybatis主配置文件中定义,使定义别名

​ 2)可以在resultType中使用自定义别名

    
    
    
    
    

        
        
        
    

​ 3)resultMap:结果映射,指定列名和java对象的属性对应关系。

​ 1)你自定义的列值赋值给哪个属性

​ 2)当你的列名和属性名不一样时,一定使用resultMap

​ resultMap和resultType不要一起用,二选一

模糊查询
    
    
        select id,name,email from student where name like #{name}
    

    
    
        select id,name,email,age from student
        
            
                name = #{name}
            
            
                or age= #{age}
            
        
    

    
    
        select * from student where id in
        
            #{stu.id}
        
    

4)sql代码片段,就是复用一些语法

步骤:

1.先定义 sql语句,表明,字段等

2.再使用,

Mybatis配置文件

1.数据库的属性配置文件:把数据库连接信息放到一个单独的文件中。和mybatis主配置文件分开。

目的是便于修改,保存,处理多个数据库的信息。

​ 1)在resources目录中定义一个属性配置文件,xxx.properties,例如jdbc.properties

​ 在属性配置文件中,定义数据,格式是key=value

​ key:一般使用 . 做多级目录的

​ 例如 jdbc.mysql.driver

​ 2)在mybatis的主配置文件,使用指定文件的位置

​ 在需要使用值的地方${key}

2.mapper文件,使用package指定路径

    
        


        
        
    
扩展

PageHelper做数据分页

复习

什么是动态代理:

mybatis帮你创建dao接口的实现类,在实现类中调用SqlSession的方法执行sql语句

使用动态代理的方式:

1、获取SqlSession对象,SqlSessionFactory.openSession()

2、使用getMapper方法获取某个接口的对象,sqlSession.getMapper(接口.class)

3、使用dao接口的方法,调用方法就执行了mapper文件中的sql语句

使用动态代理方式的要求:

1、dao接口和mapper文件放在一起,同一个目录

2、dao接口和mapper文件名称一致

3、mapper文件中的namespace的值是dao接口的全限定名称

4、mapper文件中的,,,等的id是接口中方法的名称

5、dao接口中不要使用重载方法,不要使用同名的,不同参数的方法

理解参数:

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

1、一个简单类型的参数:#{任意字符}

2、多个简单类型的参数@Param(“自定义名称”)

3、使用一个java对象,对象的属性值作为mapper文件找到参数,#{java对象的属性名称}

4、使用参数的位置,语法#{arg0},#{arg1},mybatis3.4之前的版本,使用#{0},#{1}

5、使用Map作为参数,#{map的key}

#和$的区别:

1、#是占位符,表示列值的,放在等号右侧

2、$占位符,表示字符串的连接,把sql语句连接成一个字符串

3、#占位符使用的jdbc指定PreparedStatement对象执行SQL语句,效率高,没有sql注入的风险

4、$使用的是Statement对象执行sql,效率低,有sql注入的风险

mybatis返回结果:

resultType——表示sql语句的执行结果,转为的java对象的类型:

1.类型的全限定名称

2.别名:

在mybatis主配置文件定义别名:

①使用

②使用:类名就是别名

resultMap——自定义列名和java对象的属性名对应关系

列名和属性名不一样解决方式:

1.使用列名

2.使用resultMap

like:

1.在java代码中指定like的内容

2.在mapper中拼接like

动态sql:

1.根据条件,能够得到不同的sql语句,使用mybatis的标签,例如if,where,foreach等

2.if:判断条件的,条件为true,就会把if之间的sql加入到主sql之后

3.where:标签里面是多个if,如果有一个if判断为true,会在sql的后面加入where关键字,会去掉无用的and,or等字符

4.foreach:循环数组,list集合

5.sql代码片段:复用部分sql语句的

mybatis主配置文件:

1.mybatis属性配置文件的使用

2.在mybatis文件的位置

PageHelper:

1.功能:实现多种数据库的分页,mysql就是代替limit语句的

2.使用步骤

1)加入maven依赖

2)在mybatis主配置文件加入plugin

3)在你的查询方法之前,加入PageHelper方法调用

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/571924.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号