01-Mybatis原理介绍&SqlMapConfig主配置文件详解

01-Mybatis原理介绍&主配置文件详解

一,什么是Mybatis

这里借用官网的一句话介绍什么是mybatis:mybatis是一款优秀的持久层框架,它支持定制化sql,存储过程以及高级映射,mybatis避免了几乎所有的jdbc代码和手动设置参数以及获取结果集。mybatis可以使用简单的xml或注解来配置和映射原生信息,将接口和java的POJOs(Plain Old Java Objects,普通的java对象)映射成数据库中的记录。

二,mybatis相对于jdbc有哪些优势

首先我们来看一看jdbc连接数据库的连接方法:

public class JdbcConnUtils {
    private static final String Driver = "com.mysql.jdbc.Driver";
    private static final String url = "jdbc:mysql://localhost:3306/test";
    private static final String username = "root";
    private static final String password = "root";
    static Connection connection = null;
    static{

        //加载数据库驱动
        try {
            Class.forName(Driver);
            connection = DriverManager.getConnection(url, username, password);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    public Connection conn(){
        return connection;
    }

    public void close(ResultSet resultSet, PreparedStatement preparedStatement, Connection connection) {
        if(null != resultSet){
            try{
                resultSet.close();
            }catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(null != preparedStatement){
            try {
                preparedStatement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(null != connection){
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}
public class JdbcTest {
    public static void main(String[] args){
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        String sql  = "select * from user where name = ?";
        JdbcConnUtils jdbcConnUtils = new JdbcConnUtils();
        connection = jdbcConnUtils.conn();
        try {
            preparedStatement = connection.prepareStatement(sql);
            preparedStatement.setString(1, "qingzi");
            resultSet = preparedStatement.executeQuery();
            while(resultSet.next()){
                User user;
                System.out.println(resultSet.getString("id")+"  "+resultSet.getString("name"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            jdbcConnUtils.close(resultSet, preparedStatement, connection);
        }
    }
}

通过上面的一段jdbc连接数据代码,我们看有哪些不好的地方:

1.在创建connection的时候,存在硬编码的问题(也就是直接把连接信息写死,不方便后期维护)

2.preparedStatment对象在执行sql语句的时候存在硬编码问题

3.每一次在进行数据库连接之后都会关闭数据库连接,频繁的开启/关闭数据连接影响性能。

那我们来简单的说一下mybatis相对jdbc的优势:

1.mybatis是把连接数据库的信息都写在配置文件中,因此不存在硬编码的问题,方便后期维护。

2.mybatis执行的sql语句都是通过配置文件进行配置,不需要卸载java代码中

3.mybatis的连接池管理,缓存管理等让line及数据库和查询数据库效率更高。

三,mybatis框架原理介绍

就通过一张图来对mybatis的框架原理进行介绍:

在这里插入图片描述

四,Mybatis全局配置文件

SqlMapConfig.xml是Mybatis的全局配置文件,它的名称可以是任意,但是一般命名都为(SqlMapConfig)

4.1全局配置文件的内容和顺序

Properties(属性)

Settings(全局参数设置)

typeAliases(类型别名)

typeHandlers(类型处理器)

objectFactory(对象工厂)

plugins(插件)

environments(环境信息集合)

environment(单个环境信息)

transactionManager(事务)

dataSource(数据源)

mappers(映射器)

4.2 常见配置详解

properties标签:

Mybatis可以通过改标签来读取java配置信息:

例如在工程中对数据源信息卸载db.properties文件中,可以同归哦properties标签来加载该文件。

db.properties:

db.properties=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/test
db.username=root
db.password=root

SqlMapConfig.xml使用properties标签:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--通过properties标签,读取java配置文件的内容-->
    <properties resource="db.properties"/>
    <!-- 配置mybatis环境配置信息 -->
    <environments default="developments">
        <environment id="developments">
            <!-- 配置jdbc的事务控制,由mybatis进行管理-->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 配置数据源,采用mybatis连接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="${db.properties}"/>
                <property name="url" value="${db.url}"/>
                <property name="username" value="${db.username}"/>
                <property name="password" value="${db.password}"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

配置中需要注意的几点

1.先加载properties中的property标签声明的属性

因此在property中的name属性的值和value比properties中的resource属性先加载。后加载的db.properties会覆盖于property加载的属性和值。

<configuration>
    <properties resource="db.properties">
        <property name="db.username",value="1234"/>
    </properties>
</configuration>

2.再加载properties标签引入的java配置文件中的属性

3。parameterType的值会和properties的属性值发生冲突,因此,在properties文件里的内容命名最好加上db.代表是跟数据源相关的属性,这样就不容易跟以后的属性发生冲突。

settings标签:

该标签是mybatis的全局设置,该设置会影响mybatis的运行

一般我们使用该标签来开启二级缓存和懒加载。

以下是几张settings的配置项的说明:

在这里插入图片描述
在这里插入图片描述

typeAliases标签

该标签是对po类进行别名设置,这样,在后面使用po类的时候就可以直接通过别名引用,而不需要通过po类的全限定名来引用。这样可以提高我们的开发效率。

下面是Mybatis的默认提供的别名:

别名映射类型
_bytebyte
_longlong
_shortshort
_intint
_integerint
_doubledouble
_floatfloat
_booleanboolean
stringString
byteByte
longLong
shortShort
intInteger
integerInteger
doubleDouble
booleanBoolean
dateDate
decimalBigDecimal
bigdecimalBigDecimal
floatFloat

自定义单个别名:这种方式只能定义单个类的别名。

下面代码就是把com.qingzi.User类定义为user别名

<typeAliases>
	<!-- 设置单个别名 -->
	<typeAlias type="com.qingzi.User" alias="user"/>
</typeAliases>

自定义批量设置别名

下面代码就是把com.qingzi下所有类都声明别名,默认的别名就是类名(类名大小写都可以)

<!-- 设置别名 -->
<typeAliases>
    <!-- 批量设置别名 -->
    <!-- package:指定包名称来为该包下的po类声明别名,默认的别名就是类名(类名首字母大小		写都可以) -->
    <package name="com.qingzi"/>
</typeAliases>

mappers标签:

该标签的作用是加载映射文件

方式一:

该方式是加载相对于类路径下的映射文件:

<mappers>
	<mapper resource="sqlmap/User.xml" />
</mappers>

方式二:

该方式使用全限定路径

<mapper url="file:///D:\workspace_spingmvc\mybatis_01\config\sqlmap\User.xml" />

方式三:

该方式使用mapper接口的全限定类名

此方式要求:Mapper接口Mapper映射文件名称相同且在同一个目录下。

<mapper class="com.qingzi.mapper.UserMapper"/>

方式四:

该方式是加载制定包下的所有映射文件

此方式要求:Mapper接口Mapper映射文件名称相同且在同一个目录下

<package name="com.qingzi.mapper" />

原文:https://blog.csdn.net/ITITII/article/details/79999481

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值