MyBatis框架

MyBatis框架,第1张

MyBatis框架 MyBatis 前言
  • 这篇文章是我学习mybatis框架阶段整理出的知识点,代码部分截取了我在idea练习案例时觉得比较重要的部分。整片文章相对全面且通俗易懂,希望能帮助到MyBatis框架的初学者。
框架及三层架构介绍 1.三层架构介绍

(1)三层架构介绍

  • 界面层: 和用户打交道的, 接收用户的请求参数, 显示处理结果(jsp ,html ,servlet)
  • 业务逻辑层: 接收了界面层传递的数据,计算逻辑,调用数据库,获取数据
  • 数据访问层: 就是访问数据库, 执行对数据的查询,修改,删除等等

(2)三层架构对应框架

  • 界面层—servlet—springmvc(框架)
  • 业务逻辑层—service类–spring(框架)
  • 数据访问层—dao类–mybatis(框架)
2.框架介绍

框架是一个模块

  • 框架中定义好了一些功能。这些功能是可用的。
  • 可以加入项目中自己的功能, 这些功能可以利用框架中写好的功能

框架特点:

  • 框架一般不是全能的, 不能做所有事情
  • 框架是针对某一个领域有效。 特长在某一个方面,比如mybatis做数据库 *** 作强,但是他不能做其它的
  • 框架是一个软件
3.Mybatis框架

(1)简介:

早期叫做ibatis,mybatis是sql映射框架

(2)Mybatis功能:
1. 提供了创建Connection ,Statement, ResultSet的能力 ,不用开发人员创建这些对象
2. 提供了执行sql语句的能力, 不用手动执行sql
3. 提供了循环sql, 把sql的结果转为java对象, List集合的能力
4. 提供了关闭资源的能力,不用手动关闭Connection, Statement, ResultSet

  • 开发人员做的是: 提供sql语句

(3)总结:
mybatis是一个sql映射框架,提供的数据库的 *** 作能力。增强的JDBC

入门案例
  • 创建数据表

  • 引入maven依赖


    org.mybatis
    mybatis
    3.5.1



    mysql
    mysql-connector-java
    8.0.27

  • 编写Dao接口
public interface StudentDao {
    
    List selectAllStudents();

    
    int insertStudent(Student student);
}
  • 编写Dao映射文件










    
    
    
        select * from student;
    

(2)在调用并执行sql语句时,只需调用sqlSession对象的getMapper()方法,即可获取指定接口的实现类对象。

(MyBatisUtils为获取sqlSession对象的工具类)

MyBatisUtils:

public static SqlSession createSqlSession() throws IOException {
    
    InputStream stream = Resources.getResourceAsStream("mybatis.xml");
    
    SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(stream);
    
    SqlSession session = factory.openSession(true);
    return session;
}

测试:

@Test
public void Test1() throws IOException {
    SqlSession sqlSession = MyBatisUtils.createSqlSession(); //获取sqlSession对象
    StudentDao mapper = sqlSession.getMapper(StudentDao.class); //获取接口实现类对象
    List students = mapper.selectAllStudents(); //调用接口实现类中的方法
    for (Student student: students){
        System.out.println(student);
    }
}
2.定义接口传入参数 (1)一个简单参数
  • 在接口中定义需要传入参数的方法
Student selectStudentById(int id);

Student selectStudentByName(String name);
  • 在xml配置文件中:(参数的数据类型可写可不写)

    select * from student where name=#{name};

(2)多个简单参数@Param
  • 在DAO接口中

@Param(“studentId”) int id : 表示给id属性起别名,在DAO.xml文件中,#{student}所填入的值

List selectStudentByIdAndName(@Param("studentId") int id, @Param("studentName") String name);
  • 在DAO.XML文件中

    select * from mybatis.student where name=#{paramName} or id=#{paramId};

(4)通过位置传参
  • 在Dao中创建方法
List selectStudentByContext(String name,int id);
  • 在Dao.xml写入sql语句

    select * from mybatis.student where name=#{studentName} or id=#{studentId};

  • 测试,传入Map集合
@Test
public void Test8() throws IOException {
    SqlSession sqlSession = MyBatisUtils.createSqlSession();
    StudentDao studentDao = sqlSession.getMapper(StudentDao.class);
    HashMap map = new HashMap<>();
    map.put("studentName","cxk");
    map.put("studentId",4);
    List students = studentDao.selectStudentByMap(map);
    for (Student student:students){
        System.out.println(student);
    }
}
3.#和$
  • #:占位符,告诉 mybatis 使用实际的参数值代替。并使用 PrepareStatement 对象执行 sql 语句, #{…}代替 sql 语句的“?”。这样做更安全,更迅速,通常也是首选做法
  • ** ∗ ∗ : 字 符 串 替 换 , 告 诉 m y b a t i s 使 用 ** :字符串替换,告诉 mybatis 使用 ∗∗:字符串替换,告诉mybatis使用包含的“字符串”替换所在位置。使用 Statement 把 sql 语句和${}的 内容连接起来。主要用在替换表名,列名,不同列排序等 *** 作
4.ResultType (1)简介

执行 sql 得到 ResultSet 转换的类型,使用类型的完全限定名或别名。 注意如果返回的是集 合,那应该设置为集合包含的类型,而不是集合本身。resultType 和 resultMap,不能同时使用。

(2)别名

在MyBatis.xml主文件中,定义别名。在dao.xml配置文件中可使用定义的别名

  • 方式一:type为类型的全路径,alias为别名

        
        

使用:


    select * from mybatis.student where id=#{studentId} or name=#{studentName};

5.ResultMap (1)简介

结果映射:指定列明和java对象的属性对应关系

resultMap 可以自定义 sql 的结果和 java 对象属性的映射关系。更灵活的把列值赋值给指定属性。 常用在列名和 java 对象属性名不一样的情况。

(2)运用
  • 在dao中创建方法
List selectAllStudents();
  • 在dao.xml配置文件中定义

(1)定义resultMap:指定查询出来的每个字段的值赋给哪个属性

(2)在select标签中运用resultMap属性,选择需要调用的resultMap标签(id值)


    
    
    
     
    
    



    select * from mybatis.student where name like #{name};

测试:

List students = mapper.selectStudentLike("%b%");
  • 方式二:

在dao.xml的where条件已经书写好模糊查询格式,只需传入具体内容

dao:

List selectStudentLike2(@Param("name") String name);

dao.xml:


        select * from mybatis.student where

    name=#{name}


    or id=#{id}

    

**注:**若前一个条件不满足,后一个条件or会导致sql语法错误

2.Where标签

能更好的避免标签中语法错误问题


        select * from mybatis.student where id in

    #{student.id}

    
4.动态代码片段
  • 可定义一段sql语句,在需要重复使用此sql语句的地方导入(复用sql语句)

    select * from mybatis.student where



MyBatis配置文件 1.主配置文件

主配置文件 之前项目中使用的 mybatis.xml 是主配置文件。

主配置文件特点:

  1. xml 文件,需要在头部使用约束文件


2.根元素


3.主要包含内容:

  • 定义别名

  • 数据源

  • mapper 文件

2.dataSource标签

Mybatis 中访问数据库,可以连接池技术,但它采用的是自己的连接池技术。在 Mybatis 的 mybatis.xml 配置文件中,通过


来实现 Mybatis 中连接池的配置。

dataSource 类型:

  • UNPOOLED 不使用连接池的数据源
  • POOLED 使用连接池的数据源
  • JNDI 使用 JNDI 实现的数据源
3.指定properties资源文件
  • 在同resources目录下创建jdbc.properties资源文件
mybatis.url=jdbc:mysql://localhost:3306/mybatis
mybatis.username=root
mybatis.password=502502
mybatis.driverClassName=com.mysql.cj.jdbc.Driver
  • 在主配置文件中指定并使用资源文件


   
    
        
        
            
            
            
            
            
        
    

4.指定多个mapper文件
  • 方式一:

写多行mapper resource


    
    

  • 方式二:

写多个mapper文件所在的包路径


    

``` 4.指定多个mapper文件
  • 方式一:

写多行mapper resource


    
    

  • 方式二:

写多个mapper文件所在的包路径


    


  • 关于MyBatis框架的拙作就到这里,欢迎大家补充

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5684679.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存