mybatis操作步骤

Posted 小白进修

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis操作步骤相关的知识,希望对你有一定的参考价值。

建议在resources下配置接口的mapper类,并且和接口具有相同的路径

1. 导入mybatis和mysql相关驱动

<!--导入相关依赖-->
    <dependencies>
        <!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.17</version>
        </dependency>

        <!--mybatis驱动-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.2</version>
        </dependency>

        <!--junit单元测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>provided</scope>
        </dependency>

        <!--log4j依赖-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
    </dependencies>

log4j配置文件

2. 配置 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">
<!--核心配置文件-->
<configuration>

    <!--配置-->
    <properties>
        <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/demo1?useSSL=true&amp;useUnicode=true&amp;characterEncoding=utf-8&amp;serverTimezone=GMT"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
    </properties>
    
    <settings>
        <!--Log4j 日志-->
        <setting name="logImpl" value="LOG4J"/>
        <!--驼峰命名对应数据库下划线-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>

    <!--起别名,可以在mapper.xml的返回值/参数类型中用 alias 替换 type-->
    <!-- package可以在特定的路径扫描包中的类,可以使用注解@Alias("XX")来替换类的全限定名,如果不用注解则默认小写字母的类名-->
    <typeAliases>
        <!--<typeAlias type="com.c21w.pojo.User" alias="User"></typeAlias>-->
        <package name="com.c21w.pojo"/>
    </typeAliases>

    <!--多套环境 default可以默认选中哪套环境-->
    <environments default="development">
        <!--环境-->
        <environment id="development">
            <!--事务管理  默认 JDBC-->
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

    <!--每一个mapper都需要在xml中注册-->
    <!--package可以吧一个包内的全部xml文件导入,前提是xml文件和对应的接口在同一个包-->
    <mappers>
        <package name="com.c21w.dao"/>
        <!--<mapper resource="com/c21w/dao/Mapper/UserMapper.xml"></mapper>-->
    </mappers>
</configuration>

3. 创建mybatis工具类

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;

public class Utils {

    private static SqlSessionFactory sqlSessionFactory = null;

    static{
        /*获取 sqlSessionFactory 对象 */
        String resource = "mybatis-config.xml";
        InputStream inputStream = null;
        try {
            inputStream = Resources.getResourceAsStream(resource);
        } catch (IOException e) {
            e.printStackTrace();
        }
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    }

//    有了 SqlSessionFactory,我们可以从中获得 SqlSession 的实例。SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。
//    你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession(false);
    }

    //传入true可以默认开启事务
    public static SqlSession getSqlSession(boolean bl){
        return sqlSessionFactory.openSession(bl);
    }
}

4. 编写dao/mapper接口

//例子:

import com.c21w.pojo.User;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

public interface UserMapper {
    //查询所有用户信息
    List<User> getUserList();

    // 根据姓名查询用户
    User getUser(String name);

    // 添加一个用户(多个参数列表可以使用注解)
    void addUser(@Param("name")String name,@Param("time") Date time, @Param("math")double math, @Param("eng")double english,@Param("sex") String sex);

    // 修改信息
    void updateUser(User user);
    // 多参数可以封装为map
    void updateUser2(Map<String,Object> map);

    // 删除
    void deleteUser(String name);
}

5. 创建mapper.xml

<!--例子:-->
<?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">
<!--namespace 绑定一个对于的 Dao/Mapper 接口-->
<mapper namespace="com.c21w.dao.UserMapper">
    <!--查询语句-->
    <!--id对应方法名字-->
    <!--resultType对应返回值,集合的话对应泛型-->
    <select id="getUserList" resultType="User">
        select * from demo1_01
    </select>

    <select id="getUser" resultType="User" parameterType="String">
        select * from demo1_01 where name = #{name};
    </select>

    <!--使用@Param注解可以不用 parameterType-->
    <insert id="addUser">
        insert into demo1_01 value (#{name},#{time},#{math},#{eng},#{sex});
    </insert>
    
    <update id="updateUser" parameterType="User">
        update demo1_01 set math=#{math} where name=#{name}
    </update>
    <!--多参数封装为 Map 集合,#{XX},XX为键的名字-->
    <update id="updateUser2" parameterType="map">
        update demo1_01 set math = #{mathed} where name = #{named};
    </update>

    <delete id="deleteUser" parameterType="java.lang.String" >
        delete from demo1_01 where name=#{name};
    </delete>
</mapper>

多对一和一对多查询

6. 去 mybatis-config.xml中注册Dao/Mapper接口(要用斜杠分割)

<!--例子:-->
<mappers>
    <mapper resource="com/c21w/dao/Mapper/UserMapper.xml"></mapper>
</mappers>

7. 去pom文件中配置文件加载的位置

<!--配置加载位置-->
    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <!-- 把 java 中的 xml 文件和 properties 文件 加载-->
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>

8. 编写运行

package com.c21w.dao;

import com.c21w.utils.Umybais;
import org.junit.Test;

public class UserMapperTest {

    @Test
    public void test(){
        Utils.getSqlSession().getMapper(UserMapper.class).getUserList()
                .stream().forEach(user -> System.out.println(user));
    }
}

以上是关于mybatis操作步骤的主要内容,如果未能解决你的问题,请参考以下文章

mybatis操作步骤

markdown [mybatis参考]关于mybatis #mybatis的一些片段

重温SSM框架系列11 - Mybatis快速入门(JDBC开发步骤,配置文件)

对数据库的基本操作步骤

Mybatis 是如何操作 sql 语句的

Mybatis反向工程详细步骤