mybatis- mybatis入门

1,572 阅读5分钟

一 前言

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

二 mybatis入门

小白你好啊,在这里你要自己创建maven工程,如果不懂的配置安装可以看我tool系列的idea配置maven; 如果数据库没有学过,可以看我sql系列的教程;在下文 properties里面还隐藏了一个mysql的安装教程,以免你真是个小白啊!!!

在这里插入图片描述

2.1 pom.xml

pom 里面就是学习mybatis一些依赖了其中的 junit目前没用到,但是下节课可能就用到啦,苍天饶过谁啊!!!

在这里插入图片描述

<dependencies>
        <!-- mybatis support-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>
        <!-- log4j support -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <!-- junit support -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <!-- mysql support -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>6.0.5</version>
        </dependency>

    </dependencies>

2.2 log4j.properties

配置log4j.properties是为了更好显示日志信息,能够打印出sql;我们在 resource目录下新建一个 log4j.properties,内容如下,记得替换mapper包的映射路径哟小白;要不然日志打印不出来有你哭的,抱着哥哥的博客和公众号都没软用;

### 设置###
log4j.rootLogger = info,stdout

### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
## 这边要替换成你的mapper包映射路径哟
log4j.logger.com.zszxz.mybatis.mapper = debug
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

# mysql安装https://zhuanlan.zhihu.com/p/37152572

2.3 数据库建表

小白在这里使用的mysql5.7版本,建表的信息如下;是一个学生类,主要字段是学生表主键,学生姓名,学生编号,然后我在里面插入了2条记录哟;哥哥为什么要建立学生实体呢,因为学生爱学习,学生最单纯,哥哥把自己永远当作了学生;

在这里插入图片描述

CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(255) DEFAULT NULL COMMENT '学生姓名',
  `number` int(11) DEFAULT NULL COMMENT '学生编号',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `mybatis`.`student`(`id`, `name`, `number`) VALUES (1, '知识追寻者', 996);
INSERT INTO `mybatis`.`student`(`id`, `name`, `number`) VALUES (2, 'youku1327', 555);

2.4 学生实体

学生实体是为了查询sql语句将返回的结果映射到实体里面哟!

/**
 1. @Author lsc
 2. @Description <p> </p>
 3. @Date 2019/12/1 20:07
 */
public class Student {

    // id
    private String id;
    // 学生姓名
    private String name;
    // 学生编号
    private String number;

    public String getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }
}

2.5 mapper

下面的每句话都堪称经典,你如果是异教徒,要像学习圣经一样虔诚对待它:

  • StudentMapper.xml 是 一个xml 文件 里面主要是 mybatis 的 DTD ,还有我们写的sql逻辑;
  • 注意 这边有个 namespace 属性是跟我们 StudentMapper 接口对应映射路径;
  • 一个 mapper.xml 对应一个 mapper 接口 别搞混咯,通常他们的名字都一个哟,官方习惯以mapper结尾哟;
  • StudentMapper.xml 创建的位置 是在 resource目录的mapper子目录中,如果你真是小白就别自定义哟,会出错的;
  • StudentMapper 里面有个方法 getStudent 是跟 <select> 标签里面的id 对应,表示 查询方法的唯一标识;
  • resultType 里面就是 学生实体的映射路径,不要填类名,万一报错了,你可找不到我帮你检查了;
  • <select> 标签里面的内容就是我们的sql逻辑咯,哥哥这边做了查询全表的操作;

在这里插入图片描述

StudentMapper.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.zszxz.mybatis.mapper.StudentMapper">

    <!-- 查询学生-->
    <select id="getStudent" resultType="com.zszxz.mybatis.entity.Student">
        select * from student
    </select>

</mapper>

StudentMapper

public interface StudentMapper {

    // 查询学生
    List<Student> getStudent();
}

2.6 mybatis-config.xml - 它就是一个配置

mybatis-config.xml 是我们 配置mybatis 的内容都在里面,小白在这里不用知道太多,小说里面有句话很经典啊,知道的越多死的越快啊,你要学杨修么,虽然才华横溢,还不是被曹操咔嚓了!!!!你该知道的我都写里面;这个文件的位置 是放在 resource目录下

<?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">

<!-- mybaits配置 -->
<configuration>

    <!-- 全局环境配置-->
    <environments default="development">
        <environment id="development">
            <!-- 事物 -->
            <transactionManager type="JDBC"/>
            <!-- 配置数据源 -->
            <dataSource type="POOLED">
                <!-- 数据库驱动  -->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <!-- 数据库路径 -->
                <property name="url" value="jdbc:mysql://192.168.0.106:3306/mybatis"/>
                <!-- 账号-->
                <property name="username" value="root"/>
                <!--密码 -->
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 引入自定义mapper.xml -->
    <mappers>
        <mapper resource="mapper/StudentMapper.xml"/>
    </mappers>
</configuration>

2.7 Mybatis快跑

建立一个主类,让我们配置的mybatis跑起来把!!!

  • SqlSessionFactoryBuilder 是建造类,为了获得 SqlSessionFactory,你可以称呼它为 sql 会话(session) 工厂
  • SqlSessionFactory 工厂里面有好多SqlSession,每个线程都应该有一个 SqlSession(sql 会话),使用openSession() f方法获得SqlSession;
  • 执行完sql操作的方法别忘记关闭sqlSession 哟,要不然以后磁盘崩了别找我!!!
    public static void main(String[] args) throws IOException {

        // 资源路径
        String resource = "mybatis-config.xml";
        // 配置mybatis获得输入流
        InputStream inputStream = Resources.getResourceAsStream(resource);
        // 创建 SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //从 SqlSessionFactory 中获取 SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        // 使用 SqlSession 查询
        List<Student> getStudent = sqlSession.selectList("getStudent");
        for (Student student : getStudent){
            System.out.println("学生姓名:"+student.getName()+"   学生编号:"+student.getNumber());
        }
        // 关闭 SqlSession
        sqlSession.close();
    }

2.8 mybatis跑出的奖杯

在这里插入图片描述

三 源码源码在哪里

小白写试试自己敲啊,不行了再看看哥哥的源码!!!!!!! youku1327的github

在这里插入图片描述