• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

MyBatis基本使用和XML配置

武飞扬头像
像向日葵一样~
帮助2

概述

MyBatis是一款优秀的持久层框架,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程,减少了代码的冗余,减少程序员的操作,可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 实体类 【Plain Old Java Objects,普通的 Java对象】映射成数据库中的记录。

github地址

https://github.com/mybatis/mybatis-3/

依赖

  1.  
    <dependencies>
  2.  
    <!-- Mybatis核心 -->
  3.  
    <dependency>
  4.  
    <groupId>org.mybatis</groupId>
  5.  
    <artifactId>mybatis</artifactId>
  6.  
    <version>3.5.7</version>
  7.  
    </dependency>
  8.  
    <!-- junit测试 -->
  9.  
    <dependency>
  10.  
    <groupId>junit</groupId>
  11.  
    <artifactId>junit</artifactId>
  12.  
    <version>4.12</version>
  13.  
    <scope>test</scope>
  14.  
    </dependency>
  15.  
    <!-- MySQL驱动 -->
  16.  
    <dependency>
  17.  
    <groupId>mysql</groupId>
  18.  
    <artifactId>mysql-connector-java</artifactId>
  19.  
    <version>5.1.3</version>
  20.  
    </dependency>
  21.  
    </dependencies>
学新通

mybatis配置文件

创建mybatis配置文件mybatis-config.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="com.mysql.jdbc.Driver"/>
  11.  
    <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
  12.  
    <property name="username" value="root"/>
  13.  
    <property name="password" value="root"/>
  14.  
    </dataSource>
  15.  
    </environment>
  16.  
    </environments>
  17.  
    <!--写好的sql映射文件(EmployeeMapper.xml)注册到全局配置文件(mybatis-config.xml)中-->
  18.  
    <mappers>
  19.  
    <mapper resource="xxxMapper.xml"/>
  20.  
    </mappers>
  21.  
    </configuration>
学新通

sql映射文件

sql映射文件xxxMapper.xml

  1.  
    <?xml version="1.0" encoding="UTF-8" ?>
  2.  
    <!DOCTYPE mapper
  3.  
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4.  
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5.  
    <mapper namespace="com.xxx.mybatis.xxxMapper">
  6.  
    <!--namespace:名称空间
  7.  
    id:唯一标识
  8.  
    resultType:返回值类型
  9.  
    #{id}:从传递过来的参数中取出ID值
  10.  
    -->
  11.  
    <select id="selectXxx" resultType="com.xxx.mybatis.bean.Employee">
  12.  
    select id,last_name lastName,gender,email from xxx where id=#{id}
  13.  
    </select>
  14.  
    </mapper>

基本使用

  1. 根据xml配置文件(全局配置文件)创建一个SqlSessionFactory对象

  1. sql映射文件。配置了每一个sql,以及sql的封装规则等

  1. 将sql映射文件注册在全局配置文件中

  1. 写代码

  1. 根据全局配置文件得到SqlSessionFactory

  1. 使用sqlSession工厂,获取到sqlSession对象使用他来执行增删改查

一个sqlSession就是代表和数据库的一次会话,用完关闭

  1. 使用sql的唯一标识来告诉MyBatis执行哪个sql,sql都是保存在sql映射文件中的

  1.  
    public class MyBatisTest {
  2.  
     
  3.  
    @Test
  4.  
    public void test() throws IOException{
  5.  
    String resource = "mybatis-config.xml";
  6.  
    InputStream inputStream = Resources.getResourceAsStream(resource);
  7.  
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  8.  
    //2.获取sqlSession实例,能直接执行已经映射的sql语句
  9.  
    SqlSession openSession = sqlSessionFactory.openSession();
  10.  
    //第一个参数 sql语句的唯一标识符 第二个参数 执行sql 语句要用的参数
  11.  
    try {
  12.  
    Xxx xxx = openSession.selectOne("com.xxx.mybatis.xxxMapper.selectXxx", 1);
  13.  
    System.out.println(xxx);
  14.  
    }finally {
  15.  
    openSession.close();
  16.  
    }
  17.  
    }
  18.  
    }
学新通

接口式编程

创建Dao接口

  1.  
    public interface XxxMapper {
  2.  
     
  3.  
    public Xxx getXxxById(Integer id);
  4.  
    }
  5.  
     

基本使用

  1.  
    public class MyBatisTest{
  2.  
     
  3.  
    public SqlSessionFactory getSqlSessionFactory() throws IOException{
  4.  
    String resource = "mybatis-config.xml";
  5.  
    InputStream inputStream = Resources.getResourceAsStream(resource);
  6.  
    return new SqlSessionFactoryBuilder().build(inputStream);
  7.  
     
  8.  
    }
  9.  
    @Test
  10.  
    public void test01() throws IOException {
  11.  
    //1.获取sqlSessionFactory对象
  12.  
    SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
  13.  
    //2.获取sqlSession对象
  14.  
    SqlSession openSession = sqlSessionFactory.openSession();
  15.  
    try {
  16.  
    //3.获取接口的实现类对象
  17.  
    //会为接口自动的创建一个代理对象,代理对象去执行增删改查方法,将接口与xml进行绑定
  18.  
    XxxMapper mapper = openSession.getMapper(XxxMapper.class);
  19.  
    Xxx xxx = mapper.getXxxById(1);
  20.  
    System.out.println(mapper.getClass());
  21.  
    System.out.println(xxx);
  22.  
    }finally {
  23.  
    openSession.close();
  24.  
    }
  25.  
    }
  26.  
    }
学新通

重要的配置文件

  • mybatis的全局配置文件:包含数据库连接池信息,事务管理器信息,系统运行环境信息

  • sql映射文件:保存了每一个sql语句的映射信息

XML 配置

属性(properties)

这些属性可以在外部进行配置,并可以进行动态替换。你既可以在典型的 Java 属性文件中配置这些属性,也可以在 properties 元素的子元素中设置。例如:

  • resource:引入类路径下的资源

  • url:引入类路径或者磁盘路径下的资源

<properties resource="dbconfig.properties"></properties>

设置好的属性可以在整个配置文件中用来替换需要动态配置的属性值。比如

  1.  
    <property name="driver" value="${jdbc.driver}"/>
  2.  
    <property name="url" value="${jdbc.url}"/>
  3.  
    <property name="username" value="${jdbc.username}"/>
  4.  
    <property name="password" value="${jdbc.password}"/>

dbconfig.properties

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

设置(settings)

  1.  
    <!--settings包含很多重要的设置项
  2.  
    setting:用来设置每一个设置项
  3.  
    name:设置项的名字
  4.  
    value:设置项的取值
  5.  
    -->
  6.  
    <settings>
  7.  
    <setting name="mapUnderscoreToCamelCase" value="true"/>
  8.  
    </settings>
mapUnderscoreToCamelCase,是否开启驼峰命名自动映射,即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn,默认为false

类型别名(typeAliases)

类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写。

  1.  
    <!--typeAliases:别名处理器:可以为我们的Java类型起别名
  2.  
    别名不区分大小写-->
  3.  
    <typeAliases>
  4.  
    <!--typeAlias:为某个Java类型起别名
  5.  
    type:指定要起别名的类型全类名;默认别名就是类名小写:employee
  6.  
    alias:指定新的别名-->
  7.  
    <typeAlias type="com.xxx.mybatis.bean.Employee" alias="emp"/>
  8.  
     
  9.  
    <!--package:为某个包下的所有类批量起别名
  10.  
    name:指定报名(指定为当前包以及下面所有的后代包的每一个类都起一个默认别名(类名小写))-->
  11.  
    <package name="com.xxx.mybatis.bean"/>
  12.  
     
  13.  
    <!--批量起别名的情况下,使用@Alias注解为某个类型指定新的别名-->
  14.  
    </typeAliases>
  1.  
    @Alias("emp")
  2.  
    public class Employee {
  3.  
    }

类型处理器(typeHandlers)

MyBatis 在设置预处理语句(PreparedStatement)中的参数或从结果集中取出一个值时, 都会用类型处理器将获取到的值以合适的方式转换成 Java 类型。

https://mybatis.org/mybatis-3/zh/configuration.html#typeHandlers

插件(plugins)

MyBatis 允许你在映射语句执行过程中的某一点进行拦截调用。

https://mybatis.org/mybatis-3/zh/configuration.html#plugins

环境配置(environments)

  1.  
    <!--environments:环境们,mybatis可以配置多种环境 default指定使用某种环境。可以达到快速切换
  2.  
    environment:配置一个具体的环境信息:必须有两个标签 id(代表当前环境的唯一标识)
  3.  
    transactionManager:事务管理器;
  4.  
    type:事务管理器的类型:JDBC(JDBCTransactionFactory)|MANAGED(Managed)
  5.  
    自定义事务管理器:实现JDBCTransactionFactory接口,type指定为全类名
  6.  
    dataSource:数据源
  7.  
    type:数据源类型;UNPOOLED|POOLED|JNDI
  8.  
    自定义数据源:实现DataSourceFactory接口,type是全类名
  9.  
     
  10.  
    -->
  11.  
    <environments default="test">
  12.  
    <environment id="test">
  13.  
    <transactionManager type=""></transactionManager>
  14.  
    <dataSource type=""></dataSource>
  15.  
    </environment>
学新通

数据库厂商标识(databaseIdProvider)

MyBatis 可以根据不同的数据库厂商执行不同的语句,这种多厂商的支持是基于映射语句中的 databaseId 属性。 MyBatis 会加载带有匹配当前数据库 databaseId 属性和所有不带 databaseId 属性的语句。 如果同时找到带有 databaseId 和不带 databaseId 的相同语句,则后者会被舍弃。 为支持多厂商特性,只要像下面这样在 mybatis-config.xml 文件中加入 databaseIdProvider 即可

  1.  
    <!--databaseIdProvider,支持数据库厂商的,
  2.  
    type="DB_VENDOR":VendorDatabaseIdProvider
  3.  
    作用就是得到数据库厂商的标识(驱动),mybatis就能根据数据库厂商标识来执行不同的sql
  4.  
    MySQL,Oracle,SQL,Server,xxx;
  5.  
    -->
  6.  
    <databaseIdProvider type="DB_VENDOR">
  7.  
    <!--为不同的数据库厂商起别名-->
  8.  
    <property name="MySQL" value="mysql"/>
  9.  
    <property name="Oracle" value="oracle"/>
  10.  
    <property name="SQL Server" value="sqlserver"/>
  11.  
    </databaseIdProvider>
  1.  
    <select id="getEmpById" resultType="com.frx01.mybatis.bean.Employee" databaseId="mysql">
  2.  
    select id,last_name lastName,gender,email from tbl_employee where id=#{id}
  3.  
    </select>

映射器(mappers)

定义 SQL 映射语句,首先我们需要告诉 MyBatis 到哪里去找到这些语句。 在自动查找资源方面,Java 并没有提供一个很好的解决方案,所以最好的办法是直接告诉 MyBatis 到哪里去找映射文件。 你可以使用相对于类路径的资源引用,或完全限定资源定位符(包括 file:/// 形式的 URL),或类名和包名等。

  1.  
    <!--mappers:将sql映射注册到全局配置中-->
  2.  
    <mappers>
  3.  
    <!--mapper:注册一个sql映射
  4.  
    resource:引用类路径下的sql映射文件
  5.  
    mybatis/mapper/EmployeeMapper.xml
  6.  
    url:引用网络路径或磁盘路径下的sql映射文件
  7.  
    注册接口
  8.  
    class:引用(注册)接口
  9.  
    1.有sql映射文件,映射文件名必须和接口同名,并且放在与接口同一目录下;
  10.  
    2.没有sql映射文件,所有的sql都是利用注解 写在接口上
  11.  
    推荐:
  12.  
    比较重要的,复制的Dao接口我们来写sql映射文件
  13.  
    不重要,简单的Dao接口为了开发快速可以使用注解
  14.  
    -->
  15.  
    <!--<mapper resource="EmployeeMapper.xml"/>-->
  16.  
    <!--<mapper class="com.frx01.mybatis.dao.EmployeeMapperAnnotation"/>-->
  17.  
     
  18.  
    <!--批量注册 要把Mapper.xml与dao层放在一个包下-->
  19.  
    <package name="com.xxx.mybatis.dao"/>
  20.  
    </mappers>
学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhibabfg
系列文章
更多 icon
同类精品
更多 icon
继续加载