zoukankan      html  css  js  c++  java
  • MyBatis

    概念:优秀持久层框架:实体类和SQL语句之间建立映射关系

    与hibernate区别    :自动生成sql语句,并且建立实体类和数据表的映射。

    MyBatis基本要素:核心对象   核心配置文件  SQL映射文件

    特点:

    基于SQL语法

    ,简单易学

    能了解底层封装过程 SQL语句封装在配置文件中,

    便于统一管理与维护,降低程序的耦合度

    方便程序代码调试

    什么是ORM? 对象关系映射

    ORM(Object Relational Mapping) 编写程序的时候,

    以面向对象的方式处理数据 保存数据的时候,却以关系型数据库的方式存储

    ORM解决方案包含下面四个部分

    在持久化对象上执行基本的增、删、改、查操作

    对持久化对象提供一种查询语言或者API 对象关系映射工具

    提供与事务对象交互、执行检查、延迟加载以及其他优化功能

    搭建MyBatis 开发环境  

    1.创建java工程

    1.编写MyBatis核心配置文件(mybatis-cofig.xml) 

    2.创建实体类—POJO

    3.DAO层- SQL映射文件

    4.创建测试类

    如下图:

     核心配置文件注意事项:

    注意编写头部声明以及未联网状态下的配置

     注意节点的编写顺序

     

     代码如下:

      

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE configuration
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
    <properties resource="database.properties"><!-- 加载外部资源文件 a.指定外部文件 resource 优先级高 b.直接配置XML property -->
    <property name="driver" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://127.0.0.1:3306/studentwu" />
    <property name="username" value="root" />
    <property name="password" value="root" />
    </properties>
    <!-- 全局的设置 -->
    <settings><!-- NONE取消自动映射 PARTIAL 默认自动映射 设置为FULL 都能映射-->
    <setting name="autoMappingBehavior" value="FULL"/>
    </settings>
    <typeAliases><!--设置别名 1.取别名 2.包路径 默认就是类名 常用的-->
    <!-- <typeAlias type="com.bw.pojo.Student" alias="Student"/> -->
    <package name="com.bw.pojo" />
    </typeAliases>
    <environments default="test1"><!-- 配置连接数据库的信息 -->
    <environment id="test1">
    <transactionManager type="JDBC" /><!-- 配置事务的管理 两种 1.JDBC 2.MANAGED -->
    <dataSource type="POOLED"><!--配置数据源的信息 三种1.POOLED 2.UNPOOLED 3.JNDI -->
    <property name="driver" value="${driver}" />
    <property name="url" value="${url}" />
    <property name="username" value="${use}" />
    <property name="password" value="${pass}" />
    </dataSource>
    </environment>
    </environments>
    <mappers><!-- 添加Sql的映射文件 四种方式 -->
    <!-- A.使用resource 加载Mapper映射文件-->
    <!-- <mapper resource="com/bw/mapper/StudentMapper.xml" /> -->
    <!-- B.使用mapper接口的完全限定类名 要求接口和映射文件的名称要一致-->
    <!-- <mapper class="com.bw.mapper.StudentMapper" /> -->
    <!-- C.通过url指定-->
    <!-- <mapper url="file:///D:1807A26monthday01srccomwmapperStudentMapper.xml" /> -->
    <!-- D.通过包路径指定 加载这个包下面的所有映射文件-->
    <package name="com.bw.mapper"/>
    </mappers>
    </configuration>

     如图:

     

     编写接口 和 SQL配置文件

     

     测试类:

    SqlSession sqlSession = null;
    // 1.加载mybatis_config配置文件
    try {
    Reader rs = Resources.getResourceAsReader("mybatis_config.xml");
    // 2.创建sqlSessionFactoryBuilder对象
    SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
    // 3.创建sqlSessionFactory
    SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(rs);
    // 4.获取sqlSession对象
    sqlSession = sqlSessionFactory.openSession();

    // 5. sqlsession的两种使用方式:
    //a.实例操作 参数:SQL映射文件里面要调用的ID
    //Object count = sqlSession.selectOne("getCount");
    //b.基于mapper接口的操作

    StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
    //int count = mapper.getCount();
    //System.out.println(count);

    //获取属性的集合
    Student student2 = new Student();
    student2.setSname("李珊");
    List<Student> studentList = mapper.getStudentList(student2);
    for (Student student : studentList) {
    System.out.println(student.getSname());
    }
    Student s = mapper.getStudentById(44);
    System.out.println(s.getSname());
    } catch (Exception e) {
    e.printStackTrace();
    } finally {
    if (sqlSession != null) {
    // 6.关闭资源
    sqlSession.close();
    }
    }

     

    简单介绍Mybatis的框架的优缺点?

    一、MyBatis框架的优点:

    1. 与JDBC相比,减少了50%以上的代码量

    2. MyBatis是最简单的持久化框架,小巧并且简单易学。

    3. MyBatis相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL写在XML里,从程序代码中彻底分离,降低耦合度,便于统一管理和优化,并可重用。

    4. 提供XML标签,支持编写动态SQL语句

    5. 提供映射标签,支持对象与数据库的ORM字段关系映射。                 

     二、MyBatis框架的缺点:

    1. SQL语句的编写工作量较大,尤其是字段多、关联表多时,更是如此,对开发人员编写SQL语句的功底有一定要求。

    2. SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。

    Mybatis的核心对象有哪些,对象之间的关系?

    1、SqlSessionFactoryBuilding

    这个类可以被实例化、使用和丢弃。一但创建了SqlSessionFactory后,这个类就不需要存在 了,因此sqlsessionfactorybuilder 实例的最佳作用域是方法范围(即作为方法的变量)

    2、SqlSessionFactory

    SqlSessionFactory,顾名思义就是获取SqlSession对象的工厂,功能类似于jdbc中加载数据库驱动。所以sqlsessionfactory对象一但被创建,应该在应用执行期间都存在,因此sqlsessionfactory的最佳作用域是应用范围,建议定义为静态变量。

    3、sqlsession

    sqlsession类似于jdbc的connection对象,每个线程都因该有自己的sqlsession 实例。sqlsesion的实例,sqlsession的实例不能共享,他是 线程不安全的,因此最佳作用域是请求或方法范围,sqlsession对象能够执行数据库的增删改查操作,因此在使用后应该关闭,并保存使用finally快来关闭。

    Mybatis中#{}和${}的区别?

    1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id".

    2. $将传入的数据直接显示生成在sql中。如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为order by id.

    3. #方式能够很大程度防止sql注入。 

    4.$方式无法防止Sql注入。

    5.$方式一般用于传入数据库对象,例如传入表名.

    6.一般能用#的就别用$.

    MyBatis排序时使用order by 动态参数时需要注意,用$而不是#

    Mybatis当实体类的属性名和表中的字段名不一样,怎么办?

    1、取别名 2、使用resultMap

    Mybatis的模糊查询的实现方式(两种以上)?

    1、在调用的方法中把参数使用%拼接好  

    2、在SQL映射文件中使用$符号           

    3、使用concat拼接参数               

    4、使用bind标签创建拼接参数变量

    Mybatis Mapper代理的开发方式规范?

    1.创建接口与映射文件同名,并在相同包下。

       2.映射文件的namespace的值必须等于接口的全限定名。

       3.<select><delete><insert><update>标签中的id值必须与接口中方法同名。

       4.上述标签的parameterType属性值的类型与接口中方法的参数相同。

       5.上述标签的resultType的属性值得类型与接口方法的返回值类型相同。

     

    Mybatis中如何传递多个参数?

    一、使用注解@Param 二、使用map集合封装多个参数 三、使用对象属性绑定多个参数

     

    Mapper映射器的配置方式有哪些?

    一、通过resource指定 二、通过url指定三、通过class指定 四、通过指定包路径

     

    mybatis中实体类取别名的方式有哪些?

    一、通过resource指定 二、通过包路径指定 三、通过实体类注解@Alises

     

    Mybatis的映射文件中,都有哪些常用的标签?

    insert、update、delete、selete、sql、resultMap

     

    Mybatis中配置properties元素的两种方式及优先级?

    1、通过外部指定的方式(database.properties),实现动态配置

    2、直接配置为xml子节点,实现动态配置  外部指定的方式优先级高

     

    Mybatis中配置事务管理的类别有几种?分别是什么?

    两种 1、JDBC 2、MANAGED

     

    Mybatis中数据源的配置类型有几种?分别是什么?

    三种 1、POOLED 2、UNPOOLED 3、JNDI

     

    Mybatis中autoMappingBehavior的匹配级别有几种,分别是什么??

    三种 1、NONE 2、PARTIAL 默认 3、FULL

     

  • 相关阅读:
    taotao-manager-service/pom.xml
    Grafana+Prometheus 监控 MySQL
    firewall-cmd 常用命令
    K8S 容器的资源需求、资源限制
    K8S 高级调度方式
    性能测试工具 Locust 安装
    cookie 和 session区别
    K8S 调度器,预选策略,优选函数
    CPU 实用工具
    *(int*)&p
  • 原文地址:https://www.cnblogs.com/sx66/p/11734891.html
Copyright © 2011-2022 走看看