[精华]myBatis基础知识总结!

一.基础概念

mybatis是一个优秀的基于java持久层的半自动映射框架 ,MyBatis是一个开源的数据持久层框架,内部封装了通过JDBC访问数据库的操作,支持普通的SQL查询、存储过程和高级映射。作为持久层框架,主要思想是将程序中的大量的SQL语句分离出来,配置在相应的配置文件中,这样可以在不修改代码的情况下,直接在配置文件中的修改SQL ,让开发者只需要关注SQL语句本身 ,使用了ORM思想实现了对结果集的封装 大大简化了程序员的开发.

目前在Maven pom.xml导入的版本如下 :

 
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
 

二.核心配置文件SqlMapConfig.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     <!-- 引入外部配置文件-->
 7     <properties resource="jdbcConfig.properties"></properties>
 8     <!--配置开启二级缓存-->
 9     <settings>
10         <setting name="cacheEnabled" value="true"/>
11     </settings>
12 
13     <!--配置别名-->
14     <typeAliases>
15         <package name="com.itheima.domain"></package>
16     </typeAliases>
17     <!-- 配置环境-->
18     <environments default="mysql">
19         <environment id="mysql">
20             <transactionManager type="JDBC"></transactionManager>
21             <dataSource type="POOLED">
22                 <property name="driver" value="${jdbc.driver}"></property>
23                 <property name="url" value="${jdbc.url}"></property>
24                 <property name="username" value="${jdbc.username}"></property>
25                 <property name="password" value="${jdbc.password}"></property>
26             </dataSource>
27         </environment>
28     </environments>
29     <!-- 指定带有注解的dao接口所在位置 -->
30     <mappers>
31        <package name="com.ws.dao"></package>
32     </mappers>
33 </configuration>

configuration  :配置文件的根节点  ;

Properties :从外部引入指定的properties属性文件 一般为数据库连接的配置信息   列入  在核心配置文件中插入的jdbcConfig.properties

1 jdbc.driver=com.mysql.jdbc.Driver
2 jdbc.url=jdbc:mysql:///mybatis
3 jdbc.username=%
4 jdbc.password=root

Settings  :设置mybatis运行中的行为  如果此次设置的的日志文件是log4j 就要用log4j实现日志功能

log4j代码如下

1 # Global logging configuration
2 log4j.rootLogger=DEBUG, stdout
3 # Console output...
4 log4j.appender.stdout=org.apache.log4j.ConsoleAppender
5 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
6 log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

Environments:表示配置多个运行环境  ,映射到不同的数据库 ,该元素可以配置多个environment子元素节点  ,但是必须要通过default指定一个默认的运行环境 .如此配置文件中引入的就是mysql  .

Mappers:作用是告诉mybatis去哪里找SQL映射文件 

Mapper:具体指定SQL映射文件的路径 ,resource属性的值表示映射路径的位置i.

    <mappers>
        <mapper resource="cn/bdqn/dao/IUserMapper.xml" />
    </mappers>

<typeAlias type="com.ws.domain.User" alias="User">  

//给类型取别名  之后就不用写包名了 

resultMap 可以封装多个属性 ,在返回数据多的情况下 ,可以避免使用resultType="hashMap"返回不易识别的Map对象 ,而可以直接返回封装的对象 ,如User  .

可以<include refid="Base_Column_List"/>来插入相关的sql语句

<sql id="Base_Column_List" >

id, phone, email, nickname, password, avatar, create_time, last_login_time, status

</sql>

resultType //返回的数据类型 ,当多个参数的时候建议使用resultMap

需要注意的是 resultType和resultMap两个只能存在一个 

dataSource元素使用标准的JDBC数据源接口配置JDBC连接对象的资源。

    1.UNPOOLED:为每一个数据库操作创建一个新的连接,并关闭它,该方式只适用于只有小规模数量并发用户的简单应用程序上。

    2.POOLED:创建一个数据库连接池,池中的一个连接将会被用作数据库操作,一旦完成,会将此连接返回给连接池,经常使用此种方式。

    3.JNDI:从在应用服务器配置好的JNDI数据源datasource获取数据库连接,在生产环境中,优先考虑此方式。

三 .编写测试类的步骤

//1.获取字节输入流

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

//2.根据字节输入流创建SqlSessionfactory

 SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);

//3.根据factory创建SqlSession

SqlSession session=factory.openSession();

//4.使用SqlSession获取dao的代理对象

接口名 接口名对象=session.getMapper(接口名.class);

//5.执行dao方法  查询

接口名对象.执行的方法(参数);

//6.关闭sqlsession对象

session.close();

in.close();

五.MyBatis优缺点以及其适用场合

优点:

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

    2.最简单的持久层框架,小巧简单易学

    3.SQL语句写在XML文件,从程序代码中彻底分离,便于统一管理和优化,并可重用。

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

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

缺点:

    1.SQL编写工作量较大,对开发人员编写SQL语句的功底有一定的要求。

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

适应场合:

    专注于SQL本身,一个灵活的DAO层的解决方案,对性能要求较高,或者需求变化较多的项目。

猜你喜欢

转载自www.cnblogs.com/wsfighting1218/p/10479113.html