mybatis第一天

mybatis第一天

1、什么是mybatis?

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

优缺点:

优点:

简单易学:本身就很小且简单。

灵活:sql写在xml里,便于统一管理和优化。

解除sql与程序代码的耦合:sql和代码的分离,提高了可维护性。

提供映射标签,支持对象与数据库的ORM字段关系映射

提供对象关系映射标签,支持对象关系组建维护

提供XML标签,支持编写动态sql。

缺点:对开发人员所写的SQL依赖很强。

2、为什么使用mybatis?

因为mybatis使用的人多…

3、mybatis入门

3.1、概述

要想使用mybatis,首先要在项目中引入mybatis的jar包,本文以maven项目为例。

		<dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.1</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

要想使用Mybatis与数据库互动,当然也要引入mysql-connector,同时引入junit进行单元测试。junit单元测试并没有系统的研究过,抽个时间研究下 写个博客TODO!

入门之前首先了解几个单词:

  • mybatis.xml:是Mybatis的全局配置文件,配置了Mybatis的运行环境,映射文件,别名等。

  • SqlSessionFactory:即会话工厂,线程安全,主要用于创建SqlSession对象。

  • SqlSession:即会话,mybatis提供的一个接口,所有的数据库操作都需要通过sqlsession进行。

  • Executor:执行器接口,是mybatis操作数据库底层的接口,Executor接口有两个执行器,一个是基本执行器接口,另一个是缓存执行器。

  • Mapped Statenment:mybatis的一个底层封装对象,包含了mybatis配置信息及SQL映射信息等。映射文件中的每一个SQL都对应一个Mapped Statement对象。

重点来搞懂Mapped Statenment,首先它是一个底层封装对象,每一条sql语句都会对应一个该对象。

Mapped Statenment对sql执行输入参数进行定义,包括集合、基本类型、pojo对象,Executor通过Mapped Statenment在执行SQL前,将输入的Java对象映射到SQL中,映射的原理还是通过JDBC底层的PreperedStatenment完成。

Mapped Statenment对SQL执行输出的结果集进行定义,包括集合、基本类型、pojo对象,

Executor还是通过Mapped Statenment在执行SQL后 将结果映射到Java对象中,映射的原理还是通过JDBC底层的PreperedStatenment完成。

准备工作完成,开搞!

首先创建数据库及用户表

drop database if exists mybatis;
CREATE database mybatis;
use mybatis;

create table t_user(
  id bigint(20) PRIMARY KEY AUTO_INCREMENT comment '编号',
  user_name varchar(20) not null,
  cname varchar(200) not null
)

需求:实现对用户表的增删改查;

首先创建一个普通的maven项目 引入所需jar包;

3.2、编写代码

mybatis配置文件

<?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>
    <settings>
        <!-- 开启驼峰命名匹配方式 -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>

    <!--环境s 复数形式 说明可以配置多个环境
    default 默认选中的环境 对应环境的唯一标识ID
    -->
    <environments default="mysql1">
        <environment id="mysql1">

            <!--transactionManager事务管理器
            两种 JDBC和 MANAGED
            JDBC:直接使用了JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务范围。
            MANAGED:这个配置从来都不提交和回滚一个连接,而是让容器来管理事务的整个生命周期(比如JEE应用服务的上下文)。
            默认情况下他会关闭连接,然而一些容器并不希望这样,因此需要将closeConnection属性设置为false来阻止它默认的关闭行为。
            -->
            <transactionManager type="JDBC"></transactionManager>

            <!--数据源
            三种内建的数据源类型:type=[ UNPOOLED | POOLED | JNDI ]
                如果将类型设置成UNPOOLED,mybaties会为每一个数据库操作创建一个新的连接,并关闭它。
                该方式适用于只有小规模数量并发用户的简单应用程序上。

               如果将属性设置成POOLED,mybaties会创建一个数据库连接池,连接池的一个连接将会被用作数据库操作。
                一旦数据库操作完成,mybaties会将此连接返回给连接池。在开发或测试环境中经常用到此方式。

               如果将类型设置成JNDI。mybaties会从在应用服务器向配置好的JNDI数据源DataSource获取数据库连接。
                在生产环境中优先考虑这种方式。
            -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>

        <environment id="mysql2">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis"/>
                <property name="username" value="rt"/>
                <property name="password" value="123"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="mappings/User.xml" />
    </mappers>
</configuration>

标签详解见↑配置文件注解。

user实体类

package cn.zsk.pojo;

/**
 * @ClassName User
 * @Description
 * @Author RiTian
 * @Date 2020/6/4 17:54
 * @Version V1.0
 **/

public class User {
    private int id;
    private String user_name;
    private String cname;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUser_name() {
        return user_name;
    }

    public void setUser_name(String user_name) {
        this.user_name = user_name;
    }

    public String getCname() {
        return cname;
    }

    public void setCname(String cname) {
        this.cname = cname;
    }
}

user映射文件

<?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="test">
    <!--查询-->
    <select id="queryById" parameterType="int"
            resultType="cn.zsk.pojo.User">
        SELECT * FROM t_user WHERE id = #{value}
    </select>
</mapper>

测试类

package cn.zsk.pojo;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;


/**
 * @ClassName UserTest
 * @Description
 * @Author ZhaoShuai
 * @Date 2020/6/4 17:41
 * @Version V1.0
 **/

public class UserTest {

    private SqlSession sqlSession;

    @Before
    public void before() throws IOException {

        //加载配置文件
        InputStream stream = Resources.getResourceAsStream("mybatis.xml");

        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();

        //获取sqlSessionFactory对象
        SqlSessionFactory factory = builder.build(stream);

        stream.close();
        stream=null;
        sqlSession = factory.openSession();


    }
    @After
    public void after() {
        if(sqlSession!=null){
            sqlSession.close();
        }

    }
    @Test
    public void queryById() {
        User user = sqlSession.selectOne("test.queryById",1);
        System.out.println("user = " + user.getEmail());
    }

}

文件目录在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值