Mybatis最强快速上手攻略之基础使用篇

本文是Mybatis的基础使用教程,介绍了Mybatis框架的背景和作用,讲解了所需的依赖包,详细阐述了Mybatis.xml配置,包括jdbc.properties和Mapper层xml文件的设置。此外,还展示了最基本的调用方式及日志文件配置,帮助开发者了解如何监控Mybatis的运行。
摘要由CSDN通过智能技术生成

Mybatis最强快速上手攻略之基础使用篇

大纲视图

Mybatis

什么是Mybatis框架

  MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github 。
  MyBatis是一个半自动的ORM框架
  ORM: Object Relational Mapping (作用解决数据库发展和面向对象发展不一致的问题)。
  O:面向对象
  R:关系型数据库
  M:映射
  半自动:myBatis框架是需要我们自己手写sql语句
  MyBatis框架不依赖于服务器

Mybatis依赖包

在这里插入图片描述
mysql驱动包+mybatis的核心包+mybatis的依赖
其中核心包为mybatis.jar

依次从上到下包的作用
ant编译Java类,生成class文件,ant可以把相关层架构成包
java文件解析包.spring依赖这个包
动态代理包.mybatis不需编写实现类
日志包.spring依赖这个包
字节码解析助手,处理.class文件
日志包
mybatis核心包
数据库驱动
日志包

Mybatis.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 resource="jdbc.properties"></properties>

    <!--    指定mybatis中的日志类型-->

    <settings>
        <setting name="logImpl" value="LOG4J"/>
    </settings>
    
<!--    给实体类配置别名-->
    
    <typeAliases>
<!--        给指定的类起别名-->
<!--        <typeAlias type="com.erwin.entity.Student" alias="student"></typeAlias>-->
<!--        包下所有类的别名就是当前类名  首字母会调整为小写-->
        <package name="com.erwin.entity"/>
        
    </typeAliases>
    
    <!-- 配置数据库环境-->
    <environments default="mysql">

        <!--Mysql数据库连接-->
        <environment id="mysql">
            <!--Mybatis事务管理 目前的事务管理和JDBC中的事务保持一致-->
            <transactionManager type="JDBC"></transactionManager>

<!--            底层使用连接池连接-->
            <dataSource type="POOLED">
                <property name="driver" value="${m_driver}"/>
                <property name="url" value="${m_url}"/>
                <property name="username" value="${m_user}"/>
                <property name="password" value="${m_pwd}"/>
            </dataSource>
        </environment>

    </environments>

<!--    进行mapper文件的扫描-->
    <mappers>
<!--        resourse 表示XML所在的目录-->
        <mapper resource="com/erwin/mapper/StudentMapper.xml">
        <!--       扫描包下的所有接口,然后去找和接口相同名字的XML-->
        <package name="com.erwin.mapper"/></mapper>
        
    </mappers>

     
</configuration>

其中jdbc.properties书写如下

m_driver=com.mysql.cj.jdbc.Driver
m_url=jdbc:mysql://localhost:3306/mybatis?verifyServerCertificate=false&useSSL=false&serverTimezone=UTC
m_user=root
m_pwd=

Mybatis配置属性说明

全局配置文件mybatis.xml 

 <environments default="demo"> 
default配置当前所使用的环境.值必须是<environment>的id值,可以有多个<environment>标签. 
<environment> 声明可能使用的环境,会被< environments>引用 

<transactionManager type="JDBC"> 事务管理器类型. 
type属性可取值: 
JDBC 底层事务与JDBC原有事务管理相同 
MANAGED  MyBatis不去管理事务,交给其他容器进行管理. 

<dataSource type="POOLED"> 

POOLED : 使用连接池技术. 访问频率比较高时使用.连接池的使用可以降低服务器压力,提高连接对象重用性 
UNPOOLED: 不使用连接池技术.每次对数据库访问时打开数据库连接,访问结束后关闭数据库连接. 
JNDI : java命名目录接口.数据库的连接可以依赖于其他技术或应用. 

<mapper> 常用属性 
resource="com/bjsxt/xxx.xml" 加载项目中资源,目录寻找,中间是/ 
url="" 加载互联网或本机的配置文件.示例如下: 


配置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">

<mapper namespace="erwin">
<!--    id 方法名称-->
<!--    resultType 返回值类型

        如果返回值是一个对象,就写对象所在包的全路径

        如果返回值是一个集合,这个时候书写集合的泛型
-->
<!--    注意student是配置在mybatis.xml中的别名,完整路径为com.erwin.entity.Student-->
    <select id="selectAll" resultType="student">

        select * from student

    </select>

</mapper>
mapper.xml 中标签解释 

<mapper >中namespace=""值相当于接口名 
 id 属性: 相当于方法名 
 resultType属性:返回值类型,如果返回值是集合,写集合的泛型. 
 parameterType属性:参数类型.如果没有参数省略该属性. 

其中Student类为Pojo,定义如下:

package com.erwin.entity;

import java.io.Serializable;

public class Student implements Serializable {

    private int id;
    private String name;
    private String gender;

    public Student(int id, String name, String gender) {
        this.id = id;
        this.name = name;
        this.gender = gender;
    }

    public Student() {
    }

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }


    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", gender='" + gender + '\'' +
                '}';
    }
}

最基本的调用方式

package com.erwin.test;
import com.erwin.entity.Student;
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 TestA {

    public static void main(String[] args) throws IOException {

        //[a] 解析mybatis.xml

        InputStream resourceAsStream = Resources.getResourceAsStream("com/erwin/mybatis.xml");

        //[b]获得Session工厂

        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(resourceAsStream,"mysql");

        //[c]获得Session对象

        SqlSession sqlSession = factory.openSession();

        //[d]调用Sql方法

        List<Student> students = sqlSession.selectList("erwin.selectAll");

        //[e]关闭资源

        sqlSession.close();

        System.out.println(students.get(0));



    }


}

运行结果

在这里插入图片描述

日志文件的配置

由于Mybatis对JDBC进行了高度的封装,我们无法再直接获取到程序实际时发出了怎样的指令与数据库进行对接,因此需要结合日志来监控MyBatis的运行。日志的配置情况如下:

#指定全局打印的级别和输出
log4j.rootCategory=error, CONSOLE,LOGFILE
#指定erwin namespace = debug,并打印
log4j.logger.erwin=debug

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=- %m%n

# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=d:/log/0813.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

指定全局打印的级别和输出,使用rootCategory属性,配置级别为error
log4j.rootCategory=error, CONSOLE,LOGFILE

通过指定命名空间的级别来控制某一具体的查询段的日志级别:
如我的命名空间为erwin:
log4j.logger.erwin=debug

再次运行,可以打印出debug级别以上的日志信息:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值