zoukankan      html  css  js  c++  java
  • 初识MyBatis

        这一部分我们将从三方面对MyBatis进行一个初步的认识。

    MyBatis概述

        我们在之前做JSP+Servlet+Dao的Web项目时,使用的是Apache提供的Dbutils对数据库进行各项操作,其主要步骤如下:

            JDBCàDbutils(QueryRunner)àjdbcTemplet:

            

        缺点很明显:

    1. 功能简单
    2. sql语句编写在java代码里

    当我们对已经成型的项目中更改sql语句,我们需要为了这一句更改,作出巨大牺牲,打包编译发布,运行都要重来一遍,这是一种硬编码、高耦合的方式,我们在任何时候都不是推荐的

        

        然后我们说说前些年很火的Hibernate,Hibernate是一种全自动ORM框架,旨在消除sql语句

     

    它将我们原先JDBC的一系列操作当做一个黑盒,有Hibernate为我们提供对象操作,也就说,我们不必编写sql语句,由框架提供,当然这也引起新的问题,如果我们想要优化sql语句,编写一些复杂的sql语句时,我们用Hibernate就无法做到这点。Hibernate还有一个缺点,就是全映射,如果JavaBean有100个字段,那么将会对应数据库100列,当我们只想要其中一个字段时,Hibernate并不允许,它依旧会返还100列上的信息。

        其实Hibernate提供了一个HQL技术,可以解决上述问题,不过这个将会额外增加我们的学习负担。

        综上,我们希望sql语句交给我们开发人员编写,能完成一些定制功能,不是灵活性。所以,基于这一点,Mybatis就诞生了。

        

        MyBatis完美的实现了上述的猜想,将编写sql的权利还给了开发人员,将sql语句写进配置文件,实现sql与Java代码分离,并且sql由开发人员编写。

    MyBatis的配置

        我这里仅给出Maven的配置方法,因为现在商用项目,也基本都是使用Maven,不会使用传统的jar包导入的方式。

    <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.2.8</version>
    </dependency>
    <dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
    </dependency>

     

    其中log4j是用来做测试使用的,既然MyBatis是用于对数据库的操作,那么数据库连接相关包,也是并不可少的。

        <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.37</version>
    <scope>runtime</scope>
    </dependency>
    <dependency>
    <groupId>c3p0</groupId>
    <artifactId>c3p0</artifactId>
    <version>0.9.1.2</version>
    </dependency>

     

    我们先创建一个新的数据库,作为测试,

        

    接下来是JavaBean,JavaBean要求字段名与数据库的列名一直,这里我们故意写错一个字段名

     

    生成getter,setter,toString函数。

        MyBatis对数据库的操作是基于SqlSessionFactory,而SqlSessionFactory是有XML配置文件创建的(其实你也可以不通过XML文件,这是一种比较古老的方法,并不推荐),

    1. <?xml version="1.0" encoding="UTF-8" ?>  
    2. <!DOCTYPE configuration  
    3.   PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
    4.   "http://mybatis.org/dtd/mybatis-3-config.dtd">  
    5. <configuration>  
    6.   <environments default="development">  
    7.     <environment id="development">  
    8.       <transactionManager type="JDBC"/>  
    9.       <dataSource type="POOLED">  
    10.         <property name="driver" value="${driver}"/>  
    11.         <property name="url" value="${url}"/>  
    12.         <property name="username" value="${username}"/>  
    13.         <property name="password" value="${password}"/>  
    14.       </dataSource>  
    15.     </environment>  
    16.   </environments>  
    17.   <mappers>  
    18.     <mapper resource="org/mybatis/example/BlogMapper.xml"/>  
    19.   </mappers>  
    20. </configuration>  

    在dataSource中填入我们熟悉的几项内容,至于mapper标签,我们稍后再说,

    1. String resource = "org/mybatis/example/mybatis-config.xml";  
    2. InputStream inputStream = Resources.getResourceAsStream(resource);  
    3. SqlSessionFactory sqlSessionFactory =  
    4.   new SqlSessionFactoryBuilder().build(inputStream);  

    然后我们可以编写一个测试类,输入以上代码(resource填写刚刚我们编写的xml配置文件,至于命名随便,这里我命名为mybatis-conf.xml)

    接着我们编写一个映射文件,mapper.xml

    Namespace

    namespace填写上这个文件的名字,id就是这个sql语句的唯一标识,resultType填入JavaBean的全限定名,由于我们写错了last_name字段名,所以我们需要用别名的方式书写,这样我们就可以在总配置文件里的mapper标签里写上这个配置文件的名字

    在测试代码中编写以下代码,完成测试

    1. SqlSession openSession = getSqlSessionFactory().openSession();  
    2.         try {  
    3.             Employee employee = openSession.selectOne("mapper.xml.selectEmp"1);  
    4.     
    5.     
    6.         } finally {  
    7.             openSession.close();  
    8.         }  
  • 相关阅读:
    spark,hadoop集群安装注意
    TFRecord 使用
    python 路径引用问题
    flask使用模板
    tensorflow serving 模型部署
    docker使(二)—发布node应用镜像和容器
    docker使用(一)
    tensorBoard使用
    【疑难杂症】访问所有mapper方法都提醒invalid bound statement (not found)
    win10配置jdk12环境变量
  • 原文地址:https://www.cnblogs.com/figsprite/p/10730579.html
Copyright © 2011-2022 走看看