栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

MyBatis框架

MyBatis框架

 目录

第一章 框架的概述

1.三层架构

2.三层请求处理流程

3.为什么要使用三层架构

4.三层架构模式和框架 

5.框架

6.框架解决的问题

7.jdbc访问数据库的优缺点

8.MyBatis框架简介        

        1.什么是mybatis?

        2.mybatis能做什么?

第二章 Mybatis入门

1.第一个例子

2.概念

1.自动提交

2.手动提交事务

3.mybatis的一些重要对象

     1.Resources

         2.SQLSessionFactoryBuilder

           3.SqlSessionFactory:重要对象

        4.SqlSession对象

4.使用工具类和模板

第三章 MyBatis的Dao代理

1.dao代理

2.理解参数

1.parameterType

2.dao接口是一个简单类型的参数

3.dao接口方法有多个简单类型的参数

4.dao接口方法使用一个对象作为参数

5.dao接口中多个简单类型的参数,使用位置

6.dao接口是一个Map 

3.占位符 # 和 $ 的区别

1.#占位符

2.$占位符

4.封装mybatis输出结果

1.resultType

2.resultMap

5.自定义别名

6.数据库中的列名和java对象属性名称不一样的解决方式

7.like

1.第一种方式:在java程序中,把like的内容组装好 。把内容传入到sql语句

2.第二种方式:在sql语句中,组织like内容 

第四章 动态sql 

1.if标签

2.where标签

3.foreach

1.第一种方式,循环简单类型的List

2.第二种方式,循环对象类型的List

4.sql标签

第五章 MyBatis配置文件

1.settings部分

2.typerAliases 别名

3.配置环境

4.使用数据库属性配置文件

5.mapper标签

第六章 PageHelper


第一章 框架的概述

1.三层架构

        MVC:web开发中,使用mvc架构模式。Model:数据,View:视图,Controller:控制器

        Controller控制器层:接受请求,调用service对象,显示请求的处理结果。当前使用servlet作为控制器

        View视图层:现在使用jsp,html,css,js。显示请求的处理结果,把Model中的数据显示出来

        Model数据层:来自数据库mysql,来自文件,来自网络

       

        mvc作用:

                1.实现解耦合

                2.让mvc各司其职

                3.使的系统扩展更好。更容易维护

       

        三层架构:

                1.界面层(视图层):接受用户的请求,调用service,显示请求的处理结果。包含jsp、html,servlet等对象。对应的包controller,包中很多的XxxController类,例如:UserController,StudentController

                2.业务逻辑层:处理业务逻辑,使用算法处理数据。把数据返回给界面层。对应的是service包,包中很多XxxService类。例如:UserService,StudentService

                3.持久层(数据访问层):访问数据库,或者读取文件,访问网络。对应的包dao。dao包中很多的XxxDao类,例如:UserDao,StudentDao

2.三层请求处理流程

        1.请求处理流程

                用户发起请求 -----> 界面层 -----> 业务逻辑层 -----> 持久层 -----> 数据库

         

3.为什么要使用三层架构

                1.结构清晰。耦合度低,各级分工明确

                2.可维护性高,可扩展性高

                3.有利于标准化

                4.开发人员可以只关注整个结构中的某一层的功能实现

                5.有利于各层逻辑的复用

4.三层架构模式和框架

        每一层都对应着一个框架

                1.界面层 ---> SpringMVC框架

                2.业务层 ---> Spring框架

                3.持久层 ---> MyBatis框架

5.框架

        1.什么是框架(framework)

                框架:就是一个软件,完成部分的功能。软件中的类和类之间的方法调用都已经规定好了。通过这些可以完成某些功能。框架看作是模板。

                框架是可以升级的,改造的。框架是安全的。框架是对某一方面有用的,不是全能的。

6.框架解决的问题

        1.框架能实现技术的整合   

        2.提高开发效率。降低难度。       

7.jdbc访问数据库的优缺点

        优点:

                1.直观,好理解

        缺点:

                1.创建很多的Connection,Statement,ResultSet 

                2.注册驱动

                3.执行sql语句

                4.使用ResultSet读取数据,然后通过代码转化为具体的POJO对象 

                5.关闭数据库相关的资源

                6.sql语句和业务逻辑代码混在一起

8.MyBatis框架简介        

        1.什么是mybatis?

                是一个持久层框架,原名ibatis,2013年改名为MyBatis,mybatis可以操作数据库,对数据进行增删改查。可以看作是高级的jdbc。解决jdbc的缺点。mybatis底层依然是jdbc。

        mybatis – MyBatis 3 | 简介https://mybatis.org/mybatis-3/zh/index.html

        2.mybatis能做什么?

                1.注册驱动

                2.创建jdbc中使用的Connection,Statement,ResultSet

                3.执行sql语句,得到ResultSet

                4.处理ResultSet,把记录集中的数据转化为java对象,同时还能把java对象放到List集合

                5.关闭资源

                6.实现sql语句和java代码的解耦合        

第二章 Mybatis入门

1.第一个例子

        1.在数据库中创建student表(id,name,Email。age)

        2.新建maven项目

        3.修改pom.xml

                (1)加入依赖mybatis依赖,mysql驱动,junit

                (2)在加入资源插件

        4.创建实体类student。定义属性,属性名和列名相同

        5.创建xml文件(mapper文件)写sql语句

                (1)mybatis框架推荐是把sql语句和java代码分开

                (2)mapper文件:定义到和dao接口同一目录

        6.创建mybatis的主配置文件(xml文件):有一个,放在resources目录下

                (1)定义创建连接实例的数据源(DataSource)对象

                (2)指定其他mapper文件的位置

       7.创建测试的内容

                (1)使用main方法,测试mybatis访问数据库

                (2)也可以使用junit访问数据库

mapper文件:        







    
     select * from student where id ={name} 

3.dao接口方法有多个简单类型的参数

                @Param:命名参数,在方法的形参前面使用的,定义参数名。这个名称可以用在mapper文件中

                dao接口,方法的定义:


List selectByNameOrAge(@Param("myName") String name,
                                @Param("myAge") Integer age);

                

        mapper文件:


    select * from student where name = #{name} or age = #{age}



    select * from student where name = #{arg0} or age = #{arg1}

6.dao接口是一个Map 

        map作为dao接口的参数,使用key获取参数值

        语法格式:#{key}

        dao接口的方法

List selectStudentByMap(Map map);

        mapper文件


    select * from student where id = #{studentId}

mybatis创建PrepareStatement对象,执行sql语句

String sql = “select * from student where id = ?”

PrepareStatement pst = conn.prepareStatement((sql);

pst.setInt(1,1001);//传递参数

ResultSet rs = pst.executeQuery();//执行语句

#{}特点:

        1.使用PrepareStatement对象,执行sql语句,效率高

        2.使用的PrepareStatement对象,能避免sql语句注入,sql语句执行更安全

        3.#{}常常作为列值使用的,位于等号的右侧,#{}的值和数据类型有关 

2.$占位符

        语法${字符} 

        mybatis执行#{}占位符的sql语句


    select * from student where id = ${studentId}

${}表示字符串连接,把sql语句的其他内容和${}内容使用 + 号连接的方式连接在一起

String sql = “select * from student where id = ” + “1001”;

mybatis创建Statement对象,执行sql语句

Statement stmt = coon.createStatement(sql);

ResultSet rs  = stmt.executeQuery();

        1.使用Statement对象,执行sql语句,效率低

        2.${}占位符的值,使用字符串连接的方式,有sql注入的风险。有代码安全问题

        3.${}数据是原样使用的,不会区分数据类型

        4.${}常作为表名或者列名,在能保证数据安全的情况下使用${}

4.封装mybatis输出结果

        封装输出结果:mybatis执行sql语句,得到ResultSet,转为java对象

1.resultType

        resultType属性:在执行select时使用,作为 select * from student where id = #{studentId}

resultType:现在使用java类型的全限定名称。表示的意思mybatis执行sql语句,把ResultSet中的数据转为Student类型的对象。mybatis会做以下操作:

1.调用com.shangma.entity.Student的无参构造方法,创建对象

        Student student = new Student();//通过反射创建对象

2.同名的列赋值给同名的属性

        student.setId( rs.getInt("id") );

        student.setName( rs.getString("name") );

3.得到java对象

        如果dao接口返回值是List集合,mybatis把student对象放到List集合

所以执行 Student myStudent = dao.selectById(1001);得到数据库中id=1001这行数据,这行数据的列值,赋给myStudent对象的属性。你能得到myStudent对象。

        

2.resultType表示简单类型

dao接口方法

long countStudent();

mapper文件


    select id,name from student where id = #{stuId}

2.resultMap

        resultMap:结果映射。自定义列名和java对象属性的对应关系。常用在列名和属性名不同的情况

        用法:

                1.先定义resultMap标签,指定列名和属性名称对应关系

                2.在select标签使用resultMap属性,指定上面定义的resultMap的id值

java实体类对象 

mapper文件

    
    
    
        
        
        
        
        
        
        
        
    

    
    
    select * from student where id = #{studentId}

6.数据库中的列名和java对象属性名称不一样的解决方式

        1.使用resultMap:自定义列名和属性名称对应关系

        2.使用resultType:使用列别名,让别名和java对象属性名称一样

java实体类对象

mapper文件

   
    
    
        SELECT * FROM student WHERe name LIKE #{name}
    

测试,执行like

    @Test
    public void testSelectLikeOne(){
        //1.获取SQLSession
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        //2.获取dao的代理
        StudentDao studentDao = sqlSession.getMapper(StudentDao.class);
        List students = studentDao.selectLikeOne("%李%");
        for (Student student : students) {
            System.out.println(student);
        }
        //3.关闭SqlSession对象
        sqlSession.close();
    }

2.第二种方式:在sql语句中,组织like内容 

        sql语句like的格式:where name like “%” 空格 #{name} 空格 “%”

mapper文件

    
    

        select * form student 

       

                sql语句

       

       

                sql语句

       

select * from student where id = -1 or name = #{name} or age > #{age}

2.where标签

        使用if标签时,容易引起sql语句错误。使用where标签解决if产生的语法问题

        使用where,里边是一个或多个if标签,当有一个if标签判断为true,where标签会转换为WHERe关键字附加到sql语句的后面。如果if没有一个条件为true,忽略where和里边的if

        where标签会删除离它最近的 or 或者 and

语法:

        sql语句

        sql语句

例子:

        dao接口

     //where
     List selectWhere(Student student);

         mapper文件

    
    
        select * from student
        

            where id in
        
            #{myId}
        
        
    

        测试

    @Test
    public void testSelectForeachOne(){
        //1.获取SQLSession
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        //2.获取dao的代理
        StudentDao studentDao = sqlSession.getMapper(StudentDao.class);

        List list = new ArrayList<>();
        list.add(1001);
        list.add(1003);
        list.add(1005);
//        list = null;
        List students = studentDao.selectForeachOne(list);
        for (Student student : students) {
            System.out.println(student);
        }
        //3.关闭SqlSession对象
        sqlSession.close();
    }

2.第二种方式,循环对象类型的List

例子:

        dao接口

     //foreach-2
     List selectForeachTwo(List studentList);

        

        mapper文件

    
    

第五章 MyBatis配置文件

        mybatis配置文件两大类:

1.mybatis主配置文件,提供mybatis全局设置的,包含内容,日志、数据源,mapper文件位置

2.mapper文件:写sql语句的。一个表一个mapper文件

1.settings部分

        settings是mybatis的全局设置,影响整个mybatis运行。这个设置一般使用默认值就可以了

2.typerAliases 别名

        设置别名

    
    
    
        


        
        
    

3.配置环境

environments:环境标签,在它里边可以配置多个environment

                属性:default,必须是某个environment的id属性值。表示mybatis默认连接的数据库

environment:表示一个数据库的连接信息

                属性:id,自定义环境的标识,唯一值

transactionManager:事务管理器

                属性:type,表示事务管理器的类型

                属性值:(1)JDBC:使用connection对象,由mybatis自己完成事务的处理

                                (2)MANAGED:管理,表示把事务的处理交给容器实现(由其他软件

                                                                                                      完成事务的提交回滚)  

dataSource:数据源,创建connection对象,连接数据库

                属性:(1)type:数据源的类型

                属性值:(1) POOLED,mybatis会在内存中创建PooledDataSource类,管理多个connection连接对象,使用的连接池

                                (2)UNPOOLED,不使用连接池,mybatis创建一个UnPooledDataSource这个类,每次执行sql语句,最后关闭connection

                                (3)JNDI:java的命名和目录服务

    

        
            
            
            
                
                
                
                
                
                
                
                
            
        

          
          
            
            
            
                
                
                
                
                
                
                
                
            
        
    

    

        

4.使用数据库属性配置文件

         需要把数据库的配置信息放到一个单独文件中,独立管理。这个扩展名是properties,在这个文件中,使用自定义的key=value的格式表示数据

        

        使用步骤:

                1.在resources目录中,创建xxx.properties

                2.在文件中,使用key=value的格式定义数据

                        例如:jdbc.url=jdbc:mysql:localhost:3306/springdb

                3.在mybatis主配置文件,使用properties标签引用外部的属性配置文件

                4.在使用值的位置,使用${key}获取key对应的value(等号右边的值)

例子:

        jdbc,propertis

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm
jdbc.username=root
jdbc.password=123456

        mybatis配置文件

    
    
    
    
    
        
    
    
        
            
            
            
                
                
                
                
                
                
                
                
            
        
    

5.mapper标签

        使用mappers指定其他mapper文件的位置

        mapper标签使用的格式有两个常用的方式

例子:

    
        
        
        

        
        
        
    

第六章 PageHelper

        PageHelper做数据分页。在你的select语句后面加入分页的sql内容,如果你使用的mysql数据库,它就是在 select * from student 后面加入 limit 语句

        1.加入依赖pagehelper

    
      com.github.pagehelper
      pagehelper
      5.1.0
    

       

         2.在mybatis主配置文件,加入plugin声明

    
    
        
    

        3.在select语句之前,调用PageHelper.startPage(页码,每页大小)

例子:

        dao接口

     //测试PageHelper
     List selectAllStudent();

        mapper文件