初识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.         }  
原文地址:https://www.cnblogs.com/figsprite/p/10730579.html