【MyBatis】一、MyBatis概述与基本使用

Mybatis概述

Mybatis是一个半自动化的框架,需要自己写sql语句,对比JDBC其有耦合性更低的SQL语句与Java代码,各司其职不相互冗杂,对比Hibernate与JPA其又有更灵活的SQL编写能力。

环境搭建

引入相关依赖并打jar包

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驱动 -->
        <!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j -->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <version>8.0.32</version>
        </dependency>
    </dependencies>

在resource下新建mybatis-config.xml文件,并粘贴以下配置:

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>
    <!--设置连接数据库的环境-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/MyBatis"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <!--引入映射文件-->
    <mappers>
        <mapper resource="mappers/UserMapper.xml"/>
    </mappers>
</configuration>

在mapper文件夹下创建UserMapper接口,每张表对应一个Mapper接口

在resource下创建xml配置文件

在mapper标签下进行sql语句的编写

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">
<mapper namespace="com.qinghe.mybatis.mapper.UserMapper">

    
    
</mapper>

例如一个insert语句:

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要与自己的mapper接口保持一致-->
<mapper namespace="com.qinghe.mybatis.mapper.UserMapper">

<!--    注意此处的id作用是唯一标识sql语句,id名必须与mapper接口中的方法名一致-->
    <insert id="insertUser">
        insert into t_user values(null, 'admin', '123456', 23, 'm', '123456@qq.com')
    </insert>


</mapper>

一个插入语句的示例

创建一个mapper层的接口

java 复制代码
public interface UserMapper {


    /**
     * 添加用户信息
     * @return
     */
    int insertUser();
}

在test中的测试如下:

java 复制代码
public class MyBatisTest {
    @Test
    public void testMyBatis() throws IOException {
        //加载配置文件
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        //获取SqlSessionFactoryBuilder,工厂模式
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //获取sqlSessionFactory,传入配置文件的流信息
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
        //获取sqlSession,sqlSession是数据库与Java进行数据交换的中介,就像是HttpSession时浏览器与Java的中介一样
        //openSession中的参数true为自动提交的意思
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        //获取mapper接口对象,getMapper(CLass<T>)方法使用代理模式,在底层创建了一个UserMapper对象并赋值给mapper
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        //调用方法
        int result = mapper.insertUser();
        //提交事务,语句必须执行过事务提交之后才会在数据库显示
        //要么在sqlSessionFactory创建对象时开启自动提交,要么就手动提交
//        sqlSession.commit();
        System.out.println("result:" + result);
    }
}

添加日志功能

在resource文件夹下创建日志的配置文件:log4j.xml并添加如下配置:

xml 复制代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <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" />
    </logger>
    <logger name="org.apache.ibatis">
        <level value="info" />
    </logger>
    <root>
        <level value="debug" />
        <appender-ref ref="STDOUT" />
    </root>
</log4j:configuration>

Mybatis-config.xml配置文件详解

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>

<!--    配置jdbc.properties文件,使数据库的连接属性们从jdbc.properties读取-->
    <properties resource="jdbc.properties" />
<!--    typeAliases是设置别名的意思,其将全类名设置别名为最后的类名-->
    <typeAliases>
<!--        type属性是要设置别名的类,alias属性是设置的类名
            alias属性可以不进行设置,若不进行设置则其默认的别名就是类名,且不区分大小写,若设置了alias就区分大小写了,严格按照设置的alias属性进行匹配
-->
        <typeAlias type="com.qinghe.mybatis.pojo.User" alias="User"></typeAlias>
<!--        也可以以包为单位,将包中的所有类都设置为默认的类名的别名(不区分大小写)-->
        <package name="com.qinghe.mybatis.pojo"></package>
    </typeAliases>

    <!--设置连接数据库的环境-->
    <environments default="development">
        <environment id="development">
<!--
            transactionManager标签
            JDBC表示使用原生的JDBC事务管理方式,例如commit和rollback
            MANAGED表示被管理的事务管理方式,例如被Spring管理等
-->
            <transactionManager type="JDBC"/>
<!--
            设置数据源
            POOLED表示使用数据库连接池缓存进行连接
            UNPOLLED表示不使用数据库连接池
            JNDI表示使用上下文中的数据源
-->
            <dataSource type="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>
<!--        这样是引入单个映射-->
<!--        <mapper resource="mappers/UserMapper.xml"/>-->

<!--        使用package标签可以做到引入一个包下的所有映射文件的效果-->
<!--
            ***************************
            注意mapper接口所在的包的包名必须也映射配置文件所在的包名一致
            mapper接口的名字也必须与xml文件的名字保持一致
            *****************************
-->
        <package name="com.qinghe.mybatis.mapper"></package>
    </mappers>
</configuration>
相关推荐
鹿屿二向箔2 小时前
基于SSM(Spring + Spring MVC + MyBatis)框架的汽车租赁共享平台系统
spring·mvc·mybatis
沐雪架构师5 小时前
mybatis连接PGSQL中对于json和jsonb的处理
json·mybatis
鹿屿二向箔7 小时前
基于SSM(Spring + Spring MVC + MyBatis)框架的咖啡馆管理系统
spring·mvc·mybatis
aloha_78916 小时前
从零记录搭建一个干净的mybatis环境
java·笔记·spring·spring cloud·maven·mybatis·springboot
毕业设计制作和分享17 小时前
ssm《数据库系统原理》课程平台的设计与实现+vue
前端·数据库·vue.js·oracle·mybatis
paopaokaka_luck20 小时前
基于Spring Boot+Vue的助农销售平台(协同过滤算法、限流算法、支付宝沙盒支付、实时聊天、图形化分析)
java·spring boot·小程序·毕业设计·mybatis·1024程序员节
cooldream200921 小时前
Spring Boot中集成MyBatis操作数据库详细教程
java·数据库·spring boot·mybatis
不像程序员的程序媛1 天前
mybatisgenerator生成mapper时报错
maven·mybatis
小布布的不1 天前
MyBatis 返回 Map 或 List<Map>时,时间类型数据,默认为LocalDateTime,响应给前端默认含有‘T‘字符
前端·mybatis·springboot
背水1 天前
Mybatis基于注解的关系查询
mybatis