mybatis学习(1) - 基本用法

使用mybatis也是有一段时间了,但是一直没有系统了解和学习,最近正好有空,索性花点时间熟悉下。

为什么是mybatis?

了解mybatis之前,需要知道什么是"数据库持久层",我的理解,就是将数据存储至存储介质设备(包括硬盘、磁带等)功能的框架。此处提及到数据库,那么最先联想到的就是直接SQL语句的增删改查功能,而早期JAVA语言中,用的最多的便是JDBC连接数据库操作,但是使用起来繁琐,并且如果切换数据库类型后,容易出现SQL语句不匹配的问题,这时候使用对象映射的方式,底层解决了不同数据库之间的语法兼容问题。类似的框架很多,hibernate也是其中的佼佼者,而今天我们主要学习下mybatis,之所以是用mybatis,主要因为她具备了一下优点:

  • 无需使用JDBC方式,减少了代码开发量
  • 非常简单的持久层框架,学习曲线低,容易上手
  • 语句与代码分离,SQL写在XML中,降低耦合
  • 提供各种强大的标签,方便注入使用,并支持对象ORM字段映射
  • 生态成熟,兼容多种数据库,并具有多种插件使用
  • 与spring框架能很好的集成

当然,网上提到了缺点:

  • 主要对于复杂的数据查询,需要手动编写,至于字段多这个问题,我觉得使用mybatis generater针对单表查询能提高不少效率,而针对特别复杂的查询,个人觉得项目中这部分的工作量还是较少的

安装mybatis

mybatis的地址:https://mybatis.github.io/mybatis-3/,帮助手册:https://mybatis.org/mybatis-3/zh/index.html。快速安装步骤如下:

一、安装依赖

<dependencies>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.11</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.30</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.12</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
</dependencies>

二、添加配置

添加jdbc配置,jdbc.properties,配置信息如下:

jdbc.driverClass=com.mysql.cj.jdbc.Driver
jdbc.connectionURL=jdbc:mysql://localhost:3388/db_ddyx?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
jdbc.userId=root
jdbc.password=root

然后添加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">
<!-- 注意顺序,否则报错:The content of element type "configuration" must match "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)". -->
<!-- 具体标签使用请参考:https://mybatis.net.cn/configuration.html -->
<configuration>
    <!-- 引入配置文件,或者子元素中设置 -->
    <properties resource="jdbc.properties" />
    <!-- 配置信息 -->
    <settings>
        <!-- 打印查询日志 -->
        <setting name="logImpl" value="STDOUT_LOGGING" />
    </settings>
    <!-- 类型别名 -->
    <typeAliases>
        <typeAlias alias="User" type="tiny.mybatis2.models.User" />
    </typeAliases>
    <!-- 配置环境,可以支持多种不同的工作模式 -->
    <environments default="development">
        <!-- 配置开发环境 -->
        <environment id="development">
            <!-- 配置事务类型 -->
            <transactionManager type="JDBC"/>
            <!-- 配置数据源,三种内建数据源:UNPOOLED、POOLED、JNDI -->
            <dataSource type="POOLED">
                <!-- 连接数据库的属性 -->
                <property name="driver" value="${jdbc.driverClass}"/>
                <property name="url" value="${jdbc.connectionURL}"/>
                <property name="username" value="${jdbc.userId}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <!-- 配置映射文件 -->
    <mappers>
        <mapper resource="tiny.mybatis2.mapper/UserMapper.xml"/>
    </mappers>
</configuration>

当然上面只使用了常见的一些配置,如果需要查看详细的配置说明,可以查看官方文档,查看详情

三、编写对象interface

在tiny.mybatis2.mapper包中,编写对应接口,代码如下:

package tiny.mybatis2.mapper;

import tiny.mybatis2.models.User;
import java.util.List;

public interface IUserMapper {
    /**
     * 获取所有用户
     * @return
     */
    List<User> findAll();

    /**
     * 获取某个用户
     * @param uid
     * @return
     */
    User findOne(String uid);
}

上面定义了最简单的对象操作方法,如果需要更复杂的方法,进行扩展即刻。

四、编写对象model

接下来编写映射对象,内容如下:

package tiny.mybatis2.models;

import java.io.Serializable;

public class User implements Serializable {
    private int uid;
    private String mobile;
    private String unick;

    @Override
    public String toString(){
        return getClass().getSimpleName() +
            "[" +
            "uid = " + uid +
            ", mobile = " + mobile +
            ", unick = " + unick +
            "]";
    }
}

此对象可以在映射文件中使用,作为返回类型。

五、编写映射XML文件

此处我们简单的编写了一个xml文件,位置为:tiny.mybatis2.mapper,内容如下:

<?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="tiny.mybatis2.mapper.IUserMapper">
    <select id="findAll" resultType="tiny.mybatis2.models.User">
        select * from g2_user
    </select>
    <select id="findOne" resultType="tiny.mybatis2.models.User" parameterType="string">
        select * from g2_user where uid = #{uid}
    </select>
</mapper>

上面为最简单的演示,如果需要更复杂的查询,可以查看帮助文档:帮助详情

六、测试调用

为了方便获取SqlSession,撰写了SqlSessionUtils工具类:

package tiny.mybatis2.utils;

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 java.io.IOException;

public class SqlSessionUtils {
    public static SqlSession getSqlSession(){
        //-------- 从XML中构建SqlSessionFactory --------
        SqlSession session = null;
        try {
            SqlSessionFactory factory  = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
            //-------- 不使用XML构建SqlSessionFactory,参考官网 -------
            /*
            DataSource dataSource = BlogDataSourceFactory.getBlogDataSource();
            TransactionFactory transactionFactory = new JdbcTransactionFactory();
            Environment environment = new Environment("development", transactionFactory, dataSource);
            Configuration configuration = new Configuration(environment);
            configuration.addMapper(BlogMapper.class);
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
            */
            //从SqlSessionFactory获取SqlSession
            session = factory.openSession();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return session;
    }
}

然后使用test文件调用:

package tiny.mybatis2;

import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import tiny.mybatis2.mapper.IUserMapper;
import tiny.mybatis2.models.User;
import tiny.mybatis2.utils.SqlSessionUtils;

import java.util.List;

public class TestDemo {
    @Test
    public void testFindAll() {
        SqlSession session = SqlSessionUtils.getSqlSession();
        IUserMapper userMapper = session.getMapper(IUserMapper.class);
        //测试数据
        List<User> users = userMapper.findAll();
        for(User item: users){
            System.out.println(item.toString());
        }
        session.close();
    }

    @Test
    public void testFindOne() {
        SqlSession session = SqlSessionUtils.getSqlSession();
        IUserMapper userMapper = session.getMapper(IUserMapper.class);
        User user = userMapper.findOne("10010680");
        if(user != null){
            System.out.println(user);
        }else{
            System.out.println("result is empty");
        }
    }
}

Run “TestDemo”,结果如下:

在这里插入图片描述
至此,mybatis的简单使用完毕,以上代码已上传至github上,传送门:点击打开

下一篇,来学习一下如何集成mybatis进去到spring中,正常使用中,我们一般都会将mybatis和其它框架一起使用,现在很少自己手动去配置,当然之所以学习基础用法,也是在我们遇到比较复杂的场景之下,可以通过已掌握的知识深入定制,而达到我们的目的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值