• 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.mybatisgroupId>
            <artifactId>mybatisartifactId>
            <version>3.5.11version>
        dependency>
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
            <version>8.0.30version>
        dependency>
        <dependency>
            <groupId>log4jgroupId>
            <artifactId>log4jartifactId>
            <version>1.2.12version>
        dependency>
        <dependency>
            <groupId>junitgroupId>
            <artifactId>junitartifactId>
            <version>4.12version>
            <scope>testscope>
        dependency>
    dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    二、添加配置

    添加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
    
    • 1
    • 2
    • 3
    • 4

    然后添加mybatis的配置文件mybatis-config.xml,配置信息如下:

    
    DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
    
    
    <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"/>
                
                <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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

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

    三、编写对象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);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

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

    四、编写对象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 +
                "]";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

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

    五、编写映射XML文件

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

    
    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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

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

    六、测试调用

    为了方便获取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;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    然后使用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");
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    Run “TestDemo”,结果如下:

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

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

  • 相关阅读:
    记一次 .NET 某企业 ERP网站系统 崩溃分析
    刷题笔记:二叉树的中序遍历(三种解法-递归,迭代,Morris)
    Git - Clone
    ElementUI-tree拖拽功能与节点自定义
    Python将原始数据集和标注文件进行数据增强(随机仿射变换),并生成随机仿射变换的数据集和标注文件
    【图解计算机网络】从浏览器地址输入到网页显示的整个过程
    传统企业如何实现数字化转型?
    macos端文件夹快速访问工具 Default Folder X 最新for mac
    Pixel3系统提取镜像备份并还原到另一台手机
    【数据结构——顺序表】线性表很难嘛?这篇文章能让你轻松掌握顺序表
  • 原文地址:https://blog.csdn.net/hunkxia/article/details/127652104