zoukankan      html  css  js  c++  java
  • Mybatis

    主要类的介绍:

    1、Resources:mybatis中的一个类,负责读取注配置文件

      InputStream in = Resources.getResourceAsStream("mybatis.xml");

    2、SqlSessionFactoryBuilder:创建sqlSessionFactory对象,

      SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();

      //创建SqlSessionFactory对象

      SqlSessionFactory factory = bulider.build(in);

    3、SqlSessionFactory:重量级对象,程序创建一个对象耗时比较长,使用资源比较多。

        在整个项目中,有一个就够了。

      SqlSessionFactory:接口,接口实现类:DefaultSqlSessionFactory

      SqlSessionFactory作用,获取SqlSession对象。SqlSession sqlSession = factory.openSession();

        openSession()方法说明:

          1、openSession():无参数的,获取是非自动提交是输完的SqlSession对象

          2、openSession(boolean):openSession(true) 获取自动提交事务的SqlSession

                      openSession(false) 非自动提交事务的SqlSession对象

    4、SqlSession

      SqlSession接口:定义了操作数据的方法 例如:selectOne(),selectList(),insert(),update(),delete(),roolback()

      SqlSession接口实现类 DefaultSqlSession。

      使用要求:SqlSession对象不是线程安全的,需要在方法内部使用,在执行sql语句之前,使用openSession() 获取SqlSession对象,

        在执行完sql语句后,需要关闭它,执行SqlSession.close()。这样能保证它的使用是线程安全的。

    传参:

    1、动态代理:使用SqlSession.getMapper(dao接口.class) 获取这个dao接口的对象

    2、传入参数:从java代码中把数据传入到mapper文件的sql语句中

      1)parameterType:卸载mapper文件中一个属性。表示dao接口中的方法的参数的数据类型。

        例如:StudentDao接口

          public Student selectStudentById(Integer id)

      2)一个简单类型的参数:
        简单类型:mybatis把java的基本数据类型和String都叫简单类型
          在mapper文件获取简单类型的一个参数的值,使用#{任意字符}

      3)多个参数,使用@Param命名参数

        接口 public List<Student> selectMulitParam(@Param("myname") String name ,@Param("myage") Integer age)

        使用@Param("参数名") String name

        mapper 文件:

          <select>

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

          </select>

      4)#和$

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

          #的结果是select id,name,email,age from student where id=?

     

        select id,name,email,age from student where id=${studentId}

     

          $的结果是select id,name,email,age from student where id=1001

        使用Statement对象执行sql,效率笔PreparedStatement低

        $:可以替换表名或者列名,你能确定数据是安全的,可以使用$

        区别:

          1、#使用?在sql语句中做位的,使用PreparedStatement执行sql,效率高

          2、#能够避免sql注入,更安全

          3、$不使用占位符,是字符串连接方式,使用Statement对象执行sql,效率低

          4、$有sql注入的风险,缺乏安全性

          5、$可以替换表名或者列名  

     

     输出结果

    mybatis执行了sql语句,得到了java对象。

      1)resultType结果类型,指sql语句执行完毕后,数据转为的java对象 | java类型是任意的。

        resultType结果类型它的值:1、类型的全限定名称 2、类型的别名,例如java.lang.Integer别名是int

        处理方式:

          1、mybatis执行sql语句,然后mybatis调用类的无参数构造方法,创建对象

          2、mybatis把ResultSet指定列值付给同名的属性。

        <select id="selectMultiPosition" resultType="mybatis.domain.Student">
          select id, name, email, age from student where name = #{arg0} or age = #{arg1};
        </select>
      

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

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

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

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

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

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

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

    动态sql

    sql的内容是变化的,可以根据条件获取到不同的sql语句。

      主要是where部分发生变化。

    动态sql的实现,使用的是mybatis提供的标签,<if>、<where>、<foreach>

      1)<if>是判断条件的

        语法<if test="判断java对象的属性值">

            部分sql语句

          </if>

       2)<where> 用来包含多个 <if> 的,当多个if有一个成立的时,<where>会自动增加一个where关键字

        并去掉if中多余的 and ,or 等

       3)<foreach>循环java中的数组,list集合的。主要用在sql的in语句中。

        学生id是 1001,1002,1003的三个学生

        sql * from student where id in (1001,1002,1003)

        

        public List<Student> selectFor(list<Integer> idlist)

        List<Integer> list = new ..

        list.add(1001);

        ...

     

        <foreach collection="" item="" open="" close="" separator="">

        </foreach>

          collection:表示接口中方法的参数的类型,如果是数字使用array,如果是list集合使用list

          item:自定义的,表示数组或集合成员的变量

          open:循环开始的字符

          close:循环结束的字符

          separator:集合成员之间的分隔符

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

        步骤:

          1、先定义<sql id="自定义名称唯一"> sql语句,表名,字段等</sql>

             2、再使用<include rerid="id"的值/>

     数据库的属性配置文件

    把数据库连接信息放到一个单独的文件中。和mybatis主配置文件分开。目的是便于修改、保存、处理多个数据库的信息。

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

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

          例如:jdbc.mysql.driver

          jdbc.driver=com.mysql.jdbc.Driver

          jdbc.url=jdbc://....

      2)在mybatis的主配置文件中,使用<property>指定文件的位置

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

    PageHelper数据分页

      简单

    spring见xdm

    具体笔记可见网盘,提取码202p

    转载请注明出处:https://www.cnblogs.com/stu-jyj3621
  • 相关阅读:
    javascript不用正则验证输入的字符串是否为空(包含空格)
    最近真的很忙
    加油吧 骚年QAQ
    发现一个问题:个人博客仅仅存在于有生之年,如何一直保存下去呢?
    day01-html
    day04-jQuery
    Day03-jS
    MySQL-注释-Navicat基本使用-复杂查询练习题-解题思路-pymysql操作数据库-SQL注入-05
    MySQL-复杂查询及条件-起别名-多表查询-04
    MySQ-表关系-外键-修改表结构-复制表-03
  • 原文地址:https://www.cnblogs.com/stu-jyj3621/p/14528966.html
Copyright © 2011-2022 走看看