MyBatis入门

最近学习了MyBatis,记录一下学习过程。 

目录

开发环境

搭建MyBatis

        1.在pom.xml中引入依赖

        2.在resource目录下创建MyBatis核心配置文件

       3.编写jdbc.properties文件

        4.编写log4j.xml文件

        5.编写pojo类

       6.编写Mapper接口

        7.编写SQLSession工具类

        8.创建映射文件

                注意:

        9.测试

                要求:

总结


开发环境

        IDE:idea 2022.3.3

        构建工具:maven 3.6.3

        MySQL版本:MySQL8

        MyBatis版本:MyBatis 3.5.7

搭建MyBatis

               先创建好maven工程

        1.在pom.xml中引入依赖

<dependencies>
    <!-- Mybatis核心 -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.7</version>
    </dependency>
    <!-- junit测试 -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
    <!-- MySQL驱动 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.16</version>
    </dependency>
    <!-- log4j日志 -->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
</dependencies>

        2.在resource目录下创建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>

    <!-- 引入properties文件 -->
    <properties resource="jdbc.properties"/>

    <!--  设置类型别名  -->
    <typeAliases>
        <!--以包为单位,将包下所有的类型设置默认的类型别名,即类名且不区分大小写-->
        <package name="mybatis.pojo"/>
    </typeAliases>
   
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <!-- 数据源指定 -->
            <dataSource type="POOLED"><!--POOLED 表示使用数据库连接池-->
                <!--设置连接数据库的驱动-->
                <property name="driver" value="${jdbc.driver}"/>
                <!--设置连接数据库的连接地址-->
                <property name="url" value="${jdbc.url}"/>
                <!--设置连接数据库的用户名-->
                <property name="username" value="${jdbc.username}"/>
                <!--设置连接数据库的密码-->
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>

    <!--引入映射文件-->
    <mappers>
        <package name="mybatis.mappers"/>
    </mappers>

</configuration>

       3.编写jdbc.properties文件

        名字可以自己起,能一看就知道是什么意思就行

//驱动类
jdbc.driver=com.mysql.cj.jdbc.Driver
//连接地址的url
jdbc.url=jdbc:mysql://localhost:3306/自己的数据库的名字?serverTimezone=UTC
jdbc.username=用户名
jdbc.password=密码

        4.编写log4j.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">

<log4j:configuration debug="true">
    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
        <param name="Encoding" value="UTF-8"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS}%m (%F:%L)\n"/>
        </layout>
    </appender>
    <logger name="java.sql">
        <level value="debug"/><!--日志输出的级别
                                    FATAL(致命)>ERROR(错误)>WARN(警告)>INFO(信息)>DEBUG(调式)
                                    从左到右 级别越低,打印出的内容越详细-->
    </logger>
    <logger name="org.apache.ibatis">

        <level value="info"/>
    </logger>
    <root>
        <level value="debug"/>
        <appender-ref ref="STDOUT"/>
    </root>
</log4j:configuration>

        5.编写pojo类

package mybatis.pojo;

public class User {
    Integer id;
    String name;
    Integer age;

    public User(){}

    public User(Integer id, String name, Integer age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

       6.编写Mapper接口

package mybatis.mappers;

import mybatis.pojo.User;

import java.util.List;

public interface UserMapper {
    int insertUser();
    List<User> selectAllUsers();

}

        7.编写SQLSession工具类

package mybatis.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;
import java.io.InputStream;

public class SqlSessionUtil {
    public static SqlSession getSqlsession() {
        SqlSession sqlSession=null;
        InputStream resource =null;
        try {
            resource = Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
            SqlSessionFactory factory = builder.build(resource);
            sqlSession = factory.openSession(true);//true:自动提交事务  默认为false,不写的话要手动提交事务
        } catch (IOException e) {
            e.printStackTrace();
        }
        return sqlSession;
    }
}

        8.创建映射文件

                注意:

                        mapper接口的全类名和映射文件的命名空间(namespace)保持一致 

                        mapper接口中方法的方法名和映射文件中编写SQL的标签的id属性保持一致

                select标签中必须设置resultType或resultMap,用于设置实体类和数据库表的映射关系

                        resultType:自动映射,用于属性名和表中字段名一致的情况

                        resultMap:自定义映射,用于一对多或多对一或字段名和属性名不一致的情况

                        一个类对应一个表

                        一个属性对应一个字段/列

                        一个对象对应一个记录/行

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mybatis.mappers.UserMapper">
    <insert id="insertUser">
        insert into `user` values(null,'coco',25)
    </insert>
    <select id="selectAllUsers" resultType="mybatis.pojo.User">
        select * from `user`
    </select>
</mapper>

        9.测试

import mybatis.mappers.UserMapper;
import mybatis.pojo.User;
import mybatis.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.io.IOException;
import java.util.List;

public class TestUser {
    @Test
    public void testUser() throws IOException {
        SqlSession sqlsession = SqlSessionUtil.getSqlsession();
        UserMapper mapper = sqlsession.getMapper(UserMapper.class);
        System.out.println(mapper.insertUser());
        List<User> list = mapper.selectAllUsers();
        list.forEach(user -> System.out.println(user));
    }
}

        注意

        核心配置文件中的标签必须按照固定顺序来写:

properties  
settings
typeAliases
typeHandlers
objectFactory
objectWrapperFactory
reflectorFactory
plugins
environments
databaseIdProvider
mappers
  • <properties>

        引入properties文件,例如

                <properties resource="jdbc.properties"/>

        这样在environment标签中,就可以通过${}获取数据库的连接的信息。

  • <typeAliases>

        在mapper.xml中,select标签要设置resultType或者resultMap,用来设置SQL语句的输入参数类型和输出参数类型,类必须要输入类的全类名,例如mybatis.pojo.User,太长了,我们就可以通过<typeAliases>标签来设置了类型的别名

 <typeAliases>
        <!--
            typeAlias:设置某个类型的别名
            属性:
            type:设置需要设置别名的类型(必须设置)
            alias:设置某个类型的别名,若不设置该属性,那么该类型拥有默认的别名,即类名
            且不区分大小写
        -->
        <typeAlias type="com.atguigu.mybatis.pojo.User" alias="user"></typeAlias>
        <!--以包为单位,将包下所有的类型设置默认的类型别名,即类名且不区分大小写-->
        <package name="mybatis.pojo"/>
</typeAliases>

        这样在resultType或者resultMap中就可以只写user,mybatis会根据别名自动找到对应的类。

  • <mappers>

        引入mapper.xml映射文件

        引入单个映射文件:

<mapper resource="mappers/UserMapper.xml"/>

        以包为单位引入映射文件

                要求:

                        1、mapper接口所在的包的包名要和映射文件所在的包的包名一致

                                mapper接口在mybatis.mappers下,mapper.xml也要在mybatis.mappers下

                        2、mapper接口要和映射文件的名字一致

<package name="mybatis.mappers"/>

总结

        搭建MyBatis步骤

                1.  创建maven工程

                2.  在pom.xml引入依赖

                3.  创建MyBatis的核心配置文件

                4.  编写log4j.xml文件

                5.  编写pojo类、Mapper接口、SQLSession工具类

                6.  编写Mapper接口对应的mapper.xml映射文件

                7. 测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值