mybatis框架介绍

前端时间学了mybatis,现在终于挤出时间来整理下了.

1.mybatis介绍:

1.MyBatis 原来是apache的一个开源项目ibatis,后来改名为mybatis,所以说ibatis和mybatis是同一个概念.MyBatis 是一款优秀的持久层框架,它支持定制化 SQL存储过程以及高级映射。

2.对象关系映射(ORM)的持久化层框架,这点上它和hibernate一样,不一样的是mybatis是半自动化实现sql语句,hibernate是全自动化实现sql语句,因为是半自动化,所以自己写的sql是不能跨数据库的,开发效率较hibernate低些.MyBatis 可以使用简单的 XML注解来配置和映射原生信息,将接口和 Java 的 POJOs(普通的 Java对象)映射成数据库中的记录。

3.动态 SQL 是 mybatis 的强大特性之一,也是它优于其他 ORM 框架的一个重要原因

2.mybatis的功能架构

我们把Mybatis的功能架构分为三层

(1)API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。Mapper包,给外部调用的接口,方法名进行映射

(2)数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。采用.xml文件或直接采用注解写sql

(3)基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。

3.mybatis的优点

  • 简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。

  • 灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。

4.mybatis的实现 

1:先导入mybatis用的jar包:mybatis的包以及你要连接数据库的包(我用的是mysql数据库),因为我的是在maven环境下进行开发,所以我就要在pom.xml引入这俩个依赖.

 <!-- 引入对mybatis的依赖 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>


        <!-- 引入对mysql-connector的依赖 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.44</version>
        </dependency>

2.配好mybatis的配置文件mybatis-Config.xml

<?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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/struts2"/>
                <property name="username" value="root"/>
                <property name="password" value="sasa"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--放映射实体xml-->
        <mapper resource="com/zking/mapper/UserMapper.xml"/>
    </mappers>
</configuration>

dataSource标签:数据源,里面写数据库的连接地址,驱动,账号,密码。

Mappers标签:加载所需的写入了sql语句的配置文件。

Mybatis框架使用的是面向接口编程所以我们还需要准备接口

第一步:写一个接口类:

package com.zking.dao;

import com.zking.pojo.T_user;

import java.util.List;

public interface IUserMapper {
    /**
     * 查询所有根据用户姓名
     * @param name
     * @return
     */
    public List<T_user> findUserByname(String name);
}

第二步:写一个有sql语句的配置文件如:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zking.dao.IUserMapper">
    <select id="findUserByname" resultType="com.zking.pojo.T_user" parameterType="java.lang.String">
        select * from t_user where user_name like '%${value}%'
    </select>
</mapper>

这个配置文件中要注意mapper标签中的 namespace要放你接口的相对路径

还有方法的id要与你的方法名相同

这个配置文件中写的是select方法需要特别注意的有sql标签以及include标签因为这两个标签与数据库的优化有关。

Select在sql语句中是经常被我们写的语句,每当类名过多时我们可能会将这些类名替换成一个*但是这种做法是不太好的,因为*在sql语句中代表的是所有,所以我们每用一次*都代表这数据库将它的所有东西都查询过了一次。所以说用*这种方法不可取,但是在SQL语句中select出现的次数又过多,如果类名比较多的话会比较麻烦,所以Mybatis框架给我们提供了一个sql标签,我们可以将这些列名存入到sql标签中然后通过include标签取出来使用。

注意:我们写jdbc时书写的sql语句进入预编译时它的占位符时?,在Mybatis中#{}代表占位符。

在Mybatis框架中关于sql配置文件还有许多标签:比如insert,delete,update即对应这CURD

这写标签中有两个属性需要注意:

result Type:这个代表着执行这个方法返回的类型

ParameterType:代表这执行这个方法需要放入的参数。

第三步:具体的使用

 @Test
    public void findUserByname()throws Exception{
        //加载mybatis核心配置文件 生成sqlsessionfactory对象
        InputStream inputStream = Resources.getResourceAsStream("mybatis-Config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //2:通过sqlsessionFactory获得sqlsession对象
        SqlSession sqlSession =sqlSessionFactory.openSession();
        //获取接口 调用方法 调用dao层的方法相当于调xml配置的那个方法id
        IUserMapper mapper = sqlSession.getMapper(IUserMapper.class);
        List<T_user> lu=mapper.findUserByname("a");
        System.out.println(lu.size());

    }

要注意sqlsession的线程是不安全的所以sqlsession是不能共享的所以使用一次就需要关闭一次。

以上就是我自学Mybatis框架所得到的初级感悟。希望能对你们有用

猜你喜欢

转载自blog.csdn.net/qqqnzhky/article/details/84068367