mybatis

一. MyBatis的概述 ##*

什么是JDBC?
JDBC 代表 Java Database Connectivity ,它是提供了一组 Java API 来访问关系数据库的 Java 程序。这些 Java APIs 可以使 Java 应用程序执行 SQL 语句,能够与任何符合 SQL 规范的数据库进行交互。
JDBC 提供了一个灵活的框架来编写操作数据库的独立的应用程序,该程序能够运行在不同的平台上且不需修改,能够与不同的 DBMS 进行交互。
这里写图片描述


ORM概念?
ORM表示Object-Relational Mapping,它是一种思想,其本质是把数据库中的数据用对象表示出来.
Hibernate:基于对象的ORM实现。
MyBatis:基于SQL的半ORM实现。

MyBatis是什么?
MyBatis是支持定制化SQL,存储过程以及高级映射的优秀的持久层框架.MyBatis几乎避免所有的JDBC代码和手动设置的参数以及获取结果集.MyBatis可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
MyBatis是一个实现了java数据持久化的开源框架,简单的来说,他就是一个JDBC的封装组件。

MyBatis的工能框架:
API接口:
提供给外部使用的接口API,开发人员通过哲学本地API来操作数据库,接口层接收到调用请求就会调用数据处理层来完成具体的数据处理.

数据处理层:
负责具体的SQL查找,SQL解析,SQL和执行结果映射处理等,它主要的目的是根据调用的请求完成一次数据库操作.

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

二. mapper开发

Mapper的代理开发:
mybatis根据一些规则自动创建mapper接口的实现类的代理对象。
规则:
* 在XXXmapper.xml中namespace等于mapper接口地址。

例如:
<mapper namespace="com.tz.mybatis.mapper.UserMapper">
  • XXXmapper.java接口中的方法和XXXmapper.xml中的statement的Id一致。
public interface UserMapper {

    public User getUserById(int id);

    public List<User> getUserList();

    public void addUser(User user);

    public void delUser(int id);

    public void uptUser(User user);
}

在XXXmapper.xml中:
<!-- 单个查询 -->
    <select id="getUserById" parameterType="int" resultType="com.tz.mybatis.entity.User">
        select id, name,password,age,creae_time from user where id=#{id}
    </select>

    <!-- 多个查询 -->
    <select id="getUserList" parameterType="int" resultType="user">
        select id, name,password,age,creae_time from user 
    </select>

    <!--添加  -->
    <insert id="addUser" parameterType="user">
        inser into user(name, password,age,create_time) value(#{name}, #{password}, 
        #{age}, #{createTime})

    </insert>

    <!-- 删除 -->
    <delete id="delUser" parameterType="user">
        delete from user where id = #{id}
    </delete>

    <!-- 更新 -->
    <update id="uptUser" parameterType="user">
        update user set name = #{name}, password = #{password}, age = #{age},
        create_time = #{createTime} where id = #{id}
    </update>
  • XXXmapper.java接口中的方法输入参数和XXXmapper.xml中statement的parameterType指定的类型一致。
根据上面的代码可以看得出
  • XXXmapper.java接口中的方法的返回值类型和XXXmapper.xml中statement的resultType指定的类型一致。

MayBatis配置:
properties:
用于配置数据库的连接数据,这些属性都是可外部配置且可动态替换的,既可以在典型的 Java 属性文件中配置,亦可通过 properties 元素的子元素来传递。

<propertites resource="jdbc.properties"></propertites>

settings
全局的配置参数。mybatis中的运行时行为设置 ,比如缓存的开启,驼峰命名的映射,延迟加载的设置等等。

<!-- 是否开启自动驼峰命名规则crate_time, createTime, 默认false -->
<settings>
    <setting name="mapUnderscoreToCameCase" value="true"></setting>
</settings>

别名(typeAliases)
类型别名是为 Java 类型设置一个短的名字。它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余。
已经为许多常见的 Java 类型内建了相应的类型别名。它们都是大小写不敏感的,需要注意的是由基本类型名称重复导致的特殊处理。

<!-- 设置别名 -->

<typeAliases>
    <!-- 单个设置别名 -->
    <typeAlias type="com.tz.mybatis.entity.User" alias="user"/>
    <!-- 批量设置别名 -->
    <package name="com.tz.mybatis.entity"/>
</typeAliases>

配置环境(environments)
环境配置,可以配置多种数据库连接。
不过要记住:尽管可以配置多个环境,每个 SqlSessionFactory 实例只能选择其一。

private SqlSessionFactory sqlSessionFactory;
public void init ( ) throws IOException{
    String configFile = " mybatis-config.xml";
    InputStream inputStream = Resources.getResourceAsStream(configFile );
    sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream );
}

<!-- 默认引用哪个数据库环境 -->
    <environments default="productEnv">
        <environment id="development">
        <!-- 事务管理方式 -->
            <transactionManager type="JDBC" />
            <!-- 数据库连接四要素 -->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}" />
                <property name="url" value="${jdbc.url}" />
                <property name="username" value="${jdbc.username}" />
                <property name="password" value="${jdbc.password}" />
            </dataSource>
        </environment>

        <environment id="productEnv">
        <!-- 事务管理方式 -->
            <transactionManager type="JDBC" />
            <!-- 数据库连接四要素 -->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}" />
                <property name="url" value="${jdbc.url}" />
                <property name="username" value="${jdbc.username}" />
                <property name="password" value="${jdbc.password}" />

                <property name="poolMaximumActiveConnections" value="10" />

                <property name="poolMaximumIdleConnections" value="3" />
            </dataSource>
        </environment>

    </environments>

每个数据库对应一个 SqlSessionFactory 实例。

事物管理器(transactionManager):
sqlsession.commit();

数据源(dataSource)
dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。
有三种数据源类型(type=”[UNPOOLED|POOLED|JNDI]”):

UNPOOLED– 这个数据源的实现只是每次被请求时打开和关闭连接。虽然一点慢,它对在及时可用连接方面没有性能要求的简单应用程序是一个很好的选择。
没有连接池。

POOLED– 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。 这是一种使得并发 Web 应用快速响应请求的流行处理方式。
有连接池。

引射器(mappers):
有三种方式

<!-- SQL的映射文件 -->
<mappers>
    <!-- 第一种方式,用resource -->
    <!-- <mapper resource="com/tz/mybatis/mapper/UserMapper.xml" /> -->
    <!-- 第二种方式,用class -->
    <!-- <mapper class="com.tz.mybatis.mapper.UserMapper" /> -->
    <!-- 第三种方式, 用package -->
    <package name="com.tz.mybatis.mapper"/>
</mappers>

Mapper.XML文件
MyBatis 的真正强大在于它的映射语句,也是它的魔力所在。由于它的异常强大,映射器的 XML 文件就显得相对简单。
用Select Insert Updata Delete

parameterType: 输入参数

//在接口中
public User getUserById(int id);

//在XML文件中
<!-- 单个查询 -->
<select id="getUserById" parameterType="int"
    resultType="com.tz.mybatis.entity.User">
    select id,name, password, age,create_time from user where
    id=#{id}
</select>

resultType/resultMap对象

//在接口中
public List<User> getUserList();

//在XML文件中
<!-- 查询列表 -->
<select id="getUserList" resultType="user">
    select id,name,password,
    age,create_time from user
</select>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章