• Java学习之Mybatis框架入门篇


    Java学习之Mybatis框架入门篇

    0x00 前言

    前面文章使用jdbc进行数据库的连接,虽然代码并不复杂,但是比较繁琐。在连接池的文章里面也使用到了JDBC Template简化了数据库操作的步骤,但是Template只是对JDBC进行了简单的封装,是一个工具类,而并不是一个框架。

    0x01 Mybatis概述

    1.mybatis 是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql 语句本身,
    而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。

    2.mybatis 通过 xml 或注解的方式将要执行的各种 statement 配置起来,并通过 java 对象和 statement 中
    sql 的动态参数进行映射生成最终执行的 sql 语句,最后由 mybatis 框架执行 sql 并将结果映射为 java 对象并
    返回。

    3.采用 ORM 思想解决了实体和数据库映射的问题,对 jdbc 进行了封装,屏蔽了 jdbc api 底层访问细节,使我
    们不用与 jdbc api 打交道,就可以完成对数据库的持久化操作。

    0x02 Mybatis配置

    我们搭建mybatis环境的几个步骤:

    1:创建maven工程并导入坐标
    
    2:创建实体类和dao的接口
    
    3:创建Mybatis的主配置文件
    Conifg.xml
    
    4:创建映射配置文件UserDao.xml
    

    创建一个maven工程,然后配置pom.xml文件。

     <packaging>jar</packaging>   //打包方式设置为jar
        <dependencies>
    
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.4.5</version>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.6</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/junit/junit -->
            <dependency>
    

    添加mybatis和mysql连接驱动包的坐标。

    完成后,创建一个userdao的接口

    package com.test.dao;
    
    import com.test.domain.User;
    
    import java.util.List;
    
    public interface Userdao {
        List<User> findAll();
    }
    

    然后需要创建一个config.xml文件来指定连接数据库的参数

    mapconfig.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">
    <!-- mybatis的主配置文件 -->
    <configuration>
        <!-- 配置环境 -->
        <environments default="mysql">
            <!-- 配置mysql的环境-->
            <environment id="mysql">
                <!-- 配置事务的类型-->
                <transactionManager type="JDBC"></transactionManager>
                <!-- 配置数据源(连接池) -->
                <dataSource type="POOLED">
                    <!-- 配置连接数据库的4个基本信息 -->
                    <property name="driver" value="com.mysql.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/demo"/>
                    <property name="username" value="root"/>
                    <property name="password" value="root"/>
                </dataSource>
            </environment>
        </environments>
    
        <!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 -->
        <mappers>
            <mapper resource="com/test/dao/Userdao.xml"/>
        </mappers>
    </configuration>
    
    

    还得添加一个映射配置文件

    <?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.test.dao.Userdao">
    
        <select id="findAll" resultType="com.test.domain.User">
            select * from user
        </select>
    
    
    </mapper>
    

    这里就搭建完成了,这里还有几个注意事项:

    1.创建IUserDao.xml 和 IUserDao.java时名称是为了和我们之前的知识保持一致。
    在Mybatis中它把持久层的操作接口名称和映射文件也叫做:Mapper
    所以:IUserDao 和 IUserMapper是一样的
    
    2.mybatis的映射配置文件位置必须和dao接口的包结构相同
    		
    3.映射配置文件的mapper标签namespace属性的取值必须是dao接口的全限定类名
    
    4.映射配置文件的操作配置(select),id属性的取值必须是dao接口的方法名
    
    

    这样我们就不需要再创建dao的实现类来完成jdbc的操作了。到这一步mybatis的就简单配置好了。

    0x02 Mybatis 使用

    mybatis配置完成后,建立一个test类,查询数据库里面的信息。

    使用Mybatis步骤:

    1.读取配置文件
    
    2.创建SqlSessionFactory工厂
    
    3.创建SqlSession
    
    4.创建Dao接口的代理对象
    
    5.执行dao中的方法
    
    6.释放资源
    

    代码:

    package com.test;
    
    
    import com.test.dao.Userdao;
    import com.test.domain.User;
    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;
    import java.io.InputStream;
    import java.util.List;
    
    public class mybatistest {
    
    
        public static void main(String[] args)throws Exception {
            //1.读取配置文件
            InputStream in = Resources.getResourceAsStream("mapconfig.xml");
            //2.创建SqlSessionFactory工厂
            SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
            SqlSessionFactory factory = builder.build(in);
            //3.使用工厂生产SqlSession对象
            SqlSession session = factory.openSession();
            //4.使用SqlSession创建Dao接口的代理对象
            Userdao userDao = session.getMapper(Userdao.class);
            //5.使用代理对象执行方法
            List<User> users = userDao.findAll();
            for(User user : users){
                System.out.println(user.toString());
            }
            //6.释放资源
            session.close();
            in.close();
        }
    
    }
    
    

    以上的是配置xml的写法,个人比较喜欢使用注解来配置。

    注解配置Mybatis

    我们只需要在接口处加一个select的注解就可以了

    package com.test.dao;
    
    import com.test.domain.User;
    import org.apache.ibatis.annotations.Select;
    
    import java.util.List;
    
    public interface Userdao {
        @Select("select * from user")
        List<User> findAll();
    }
    
    

    这样我们就可以删除前面创建的userdao.xml文件。

    使用注解配配置,还需要修改一下mapconfig.xml的配置
    原本的xml配置:

    <mappers>
            <mapper resource="com/test/dao/Userdao.xml"/>
        </mappers>
    

    改为:

    <mappers>
            <mapper class="com.test.dao.Userdao"/>
        </mappers>
    

    mapper 这里使用注解使用class指定被select注解的接口就完成了。

    0x03 结尾

    本章节内容就先写这么多,下篇文章继续更新Mybatis内容。

  • 相关阅读:
    sqlite3中给表添加列
    webpack打包后服务端__dirname失效问题
    nodejs查看本机hosts文件域名对应ip
    vscode远程调试node服务端
    git 删除错误commit
    npm安装模块没有权限解决办法
    node gyp编译所需要的环境
    npm和yarn的淘宝镜像添加
    笨办法学Python 笔记
    梯度下降法优化线性回归算法参数
  • 原文地址:https://www.cnblogs.com/nice0e3/p/13569231.html
Copyright © 2020-2023  润新知