zoukankan      html  css  js  c++  java
  • Mybatis学习记录

    1、根据xml配置创建一个sqlsessionfactory的对象
     有数据源的一些运行环境信息
     2、sql映射文件,配置了每一个sql,以及sql的封装规则
     3、将sql注册在全局配置文件中
    4、coding
     1)根据全局配置文件得到SqlsessionFactory
     2)试用sqlsession工厂,获取到sqlsession对象试用它来执行增删改查
     一个sqlsession就是代表与数据库的一次对话,用完关闭(close)
     3)使用sql唯一标识该告诉mybatis执行哪个sql,sql都是保存在sql映射文件中

    String resource = "mybatis-config.xml";

    InputStream inputStrem = Resource.getResoureceAsStream(resource);

    SqlsessionFactory sessionFactory = new SqlSessionFactoryBuilder().Builder(resource);//获取sqlsessionfactory对象

     SqlSession opensession = sessionFactory.openSession();//使用opensession方法获取sqlsession对象

    加载数据库信息-->创建sqlsession工厂-->用OpenSession()方法创建sqlsession,每个sqlsession都是一个数据库查询实例

    //获取接口的实现类对象
    //会为接口自动的创建一个代理对象,代理对象去执行增删改查方法


    EmployeeMapper mapper = opensession.getMapper(EmployeeMapper.class);//获取接口的实现类对象
    Employee empById = mapper.getEmpById(1);//调用接口的方法
    System.out.println(mapper.getClass());
    System.out.println(empById);

     传多个参数时候需要加上@Param(“xx”)。

    用注解来简化xml配置的时候,@Param注解的作用是给参数命名,参数命名后就能根据名字得到参数值,正确的将参数传入sql语句中 

     

     jdbc oracle

     mybatis 在接口类中传参

    #{}和${}的区别:

    个人理解就是#{}防止sql注入 

    ${}用于处理sql语句中动态填入的部分,例如某个图书的info表 书名_info_tbl,这时候书名就该直接拼接进来。又如下图样例中年份工资表和排序规则。没法sql预编译,只能拼接。

     

    有时候resultType返回可能为null时,自己写个resultMap

    例如DepartmentMapper.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.atguigu.mybatis.dao.DepartmentMapper">
        <resultMap type="com.atguigu.mybatis.bean.Department" id="Dept">
            <id column="dept_id" property="id"/>
            <result column="dept_name" property="department_name"/>
        </resultMap>
        <select id="getDeptById" resultMap="Dept">
            select id,dept_name from tbl_department where id = #{id}
        </select>
    </mapper>
    View Code

    DepartmentMapper接口类规定了方法。

    Department类是一个POJO

    <!--id标签和result标签中 column数据库列名,property对应Department中属性名 -->

    <!--
        association
        property 联级查询中java类的类名。
        javaType 该类名的全类名
    -->

    mybatis 配置的xml中。设置延时加载

    <settings>
         <setting name="mapUnderscoreToCamelCase" value="true"/>
         <!-- 
             mapUnderscoreToCamelCase 默认为false 设置为true后开启驼峰命名
             lazyLoadingEnabled 默认flase 
             aggressiveLazyLoading 默认true
          -->
        <setting name="lazyLoadingEnabled" value="true"/>
        <setting name="aggressiveLazyLoading" value="flase"/>
    </settings>
  • 相关阅读:
    Java操作Excel之POI简单例子
    机器学习之KNN算法
    机器学习之sklearn数据集
    数据分析之matplotlib
    数据分析之pandas
    数据分析之numpy
    python模块contextlib
    前端jsonp解决跨域问题
    django media和static配置
    Django之数据库迁移和创建
  • 原文地址:https://www.cnblogs.com/Esquecer/p/11107238.html
Copyright © 2011-2022 走看看