MyBatis系列之--Java 项目(非SpringBoot)集成MyBatis

工作中常常写一些服务,基本上会与MySQL关联上,如何快速的从MySQL中获取数据?大家可能都会选用SpringBoot来集成MyBatis,这样做的原因一个是简单,另外一个是封装的好,基本上开箱即用。

遗憾的是,这里想介绍的跟SpringBoot 没有关系,这里用一个与SpringBoot无关的Java Maven 项目,来与MyBatis结合做数据查询。

对MyBatis简单介绍

MyBatis是一个轻量级的持久层框架,能很好的解析自定义SQL,高效的完成数据的添加、删除、查询等操作。
MyBatis几乎免除了所有的JDBC代码,以及设置参数和获取结果的工作。可以通过XML或注解的方式来配置和映射原始类型、接口和POJO为数据库中的记录。

核心接口SqlSessionFactory

MyBatis主要和数据库进行交互,少不了创建数据库连接,其中SqlSessionFactory是主要的核心。

官网总结
上面这张图是对官网简介的一个总结,通过这个简单的描述可以回答下面两个问题:

  1. 如何创建SqlSessionFactory?

    SqlSessionFactory(简称SSF) 通过 SqlSessionFactoryBuilder (简称SSFB)创建。

    SSFB创建SSF的过程中,需要一些数据库JDBC的信息,这些信息可以通过XML文件或Java的Configuration对象来获取。

  2. 如何使用SqlSessionFactory?

    SSF 创建好之后,基本上就保证它应用级别的作用域,不对其进行重复的创建和销毁操作。

    最简单的是通过单例模式或静态单例模式来达到应用级别的作用域。

实战

1. Maven创建Java项目

本地需要安装Maven,然后才能执行下面的代码。

 mvn archetype:generate -DgroupId=com.botao -DartifactId=pure-mybatis -DarchetypeArtifactId=maven-archetype-quickstart

2. 添加依赖

pom.xml 文件中添加下面的依赖

  <dependencies>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.2</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.44</version>
    </dependency>
  </dependencies>

3. 配置JDBC属性

resources目录下创建 application.properties文件,并输入下面的配置信息。

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/university?characterEncoding=UTF-8
jdbc.username=root
jdbc.password=123456

4. 配置MyBatis需要的配置文件

resources目录下创建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 resource="application.properties"/>

  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <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="mapper/PersonMapper.xml"/>
  </mappers>
</configuration>

注意:
1. 开头部分声明是xml文件
2. <properties resource="application.properties"/> 声明本文中的属性从 application.properties中获取
3. <mapper resource="mapper/PersonMapper.xml"/> 声明与数据库表的映射接口文件位置

5. 准备数据

CREATE DATABASE `university` ;

CREATE TABLE `person` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 ;

INSERT INTO `university`.`person`(`id`, `name`, `age`) VALUES (1, 'poter1', 10);
INSERT INTO `university`.`person`(`id`, `name`, `age`) VALUES (2, 'poter2', 20);
INSERT INTO `university`.`person`(`id`, `name`, `age`) VALUES (3, 'poter3', 30);
INSERT INTO `university`.`person`(`id`, `name`, `age`) VALUES (4, 'poter4', 40);
INSERT INTO `university`.`person`(`id`, `name`, `age`) VALUES (5, 'poter5', 50);
INSERT INTO `university`.`person`(`id`, `name`, `age`) VALUES (6, 'poter6', 60);
INSERT INTO `university`.`person`(`id`, `name`, `age`) VALUES (7, 'poter7', 70);
INSERT INTO `university`.`person`(`id`, `name`, `age`) VALUES (8, 'poter8', 80);
INSERT INTO `university`.`person`(`id`, `name`, `age`) VALUES (9, 'poter9', 90);
INSERT INTO `university`.`person`(`id`, `name`, `age`) VALUES (10, 'poter10', 100);
INSERT INTO `university`.`person`(`id`, `name`, `age`) VALUES (11, 'poter11', 110);

6. 创建数据库表对应的POJO

package com.botao.pojo;

public class Person {
    private int id;
    private String name;
    private int age;

    public Person() {
    }

    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 int getAge() {
        return age;
    }

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

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

6. 创建Mapper接口

package com.botao.mapper;

import com.botao.pojo.Person;

public interface PersonMapper {

    Person selectPersonById(Integer id);
}

7. 创建XML的Mapper文件

在resources/mapper目录下创建PersonMapper.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.botao.mapper.PersonMapper">
  <select id="selectPersonById" resultType="com.botao.pojo.Person">
    select * from Person where id = #{id}
  </select>
</mapper>

好了,到目前位置,我们的工程就完成了,可以创建一个main方法,或用Junit来测试下。

这里写一个Main方法做下测试:

package com.botao;

import com.botao.mapper.PersonMapper;
import com.botao.pojo.Person;
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 App {
    public static void main(String[] args) throws IOException {
        System.out.println("use mybatis connect to database ... ");

        // 根据 mybatis-config.xml 配置的信息得到 sqlSessionFactory
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 然后根据 sqlSessionFactory 得到 session
        SqlSession session = sqlSessionFactory.openSession();

        PersonMapper mapper = session.getMapper(PersonMapper.class);

        Person person = mapper.selectPersonById(1);
        System.out.println(person);

    }
}

测试结果:

C:\app\java\jdk1.8.0_131\bin\java.exe  ...
use mybatis connect to database ... 
PersonMapper{id=1, name='poter1', age=10}

Process finished with exit code 0

OK!这就是所有内容了,如果对上面的说明有任何疑问,欢迎留言与我交流。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值