加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

MyBatis基础

发布时间:2020-12-14 18:04:36 所属栏目:大数据 来源:网络整理
导读:MyBatis基础 目录 MyBatis基础 1. 什么是MyBatis 2. 如何获得Mybatis 3. 持久化 4. 持久层 5. 为什么需要Mybatis 6. 第一个Mybatis程序 1. 搭建数据库 2. 新建项目 1. 新建一个普通的Maven项目 2. 删除src目录 3. 导入Maven依赖 3. 创建一个模块 1. 编写Myba

MyBatis基础

目录
  • MyBatis基础
    • 1. 什么是MyBatis
    • 2. 如何获得Mybatis
    • 3. 持久化
    • 4. 持久层
    • 5. 为什么需要Mybatis
    • 6. 第一个Mybatis程序
      • 1. 搭建数据库
      • 2. 新建项目
        • 1. 新建一个普通的Maven项目
        • 2. 删除src目录
        • 3. 导入Maven依赖
      • 3. 创建一个模块
        • 1. 编写Mybatis的核心配置文件
        • 2. 编写mybatis工具类
      • 4. 编写代码
        • 1. 实体类
        • 2. Dao接口
        • 3. 接口实现类由原来的UserDaoImpl转变为一个Mapper配置文件
      • 5. 测试

1. 什么是MyBatis

MyBatis logo

  • MyBatis 是一款优秀的持久层框架

  • 它支持自定义 SQL、存储过程以及高级映射

  • MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

  • MyBatis 本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。

2. 如何获得Mybatis

  • Maven仓库

    <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.5</version>
    </dependency>
    
  • Github: https://github.com/mybatis/mybatis-3

  • 中文文档的地址: https://mybatis.org/mybatis-3/zh/index.html

3. 持久化

数据持久化

  • 持久化就是将程序的数据在持久状态和瞬时状态转化的过程
  • 内存:断电即失
  • 数据库(jdbc),io文件持久化

为什么需要持久化

  • 有一些对象,不能让他丢掉
  • 内存太贵了

4. 持久层

Dao层,Service层,Controller层...

  • 完成持久化工作的代码块
  • 层界限十分明显

5. 为什么需要Mybatis

  • 方便

  • 传统的JDBC太复杂了,简化,自动化

  • 帮助程序员将数据存入数据库中

  • 不用Mybatis也可以,用了Mybatis更容易上手

  • 优点

    • 简单易学
    • 灵活
    • 解除sql与程序代码的耦合
    • 提供映射标签,支持对象与数据库的orm字段关系映射
    • 提供对象关系映射标签,支持对象关系组建维护
    • 提供xml标签,支持编写动态sql
  • 最重要的一点: 使用的人多

6. 第一个Mybatis程序

思路: 搭建环境 --> 导入Mybatis --> 编写代码 --> 测试

1. 搭建数据库

create database `mybatis`;

use `mybatis`;

create table `user` (
  `id` int(20) not null,`name` varchar(30) default null,`pwd` varchar(30) default null,primary key (`id`)
)engine=innodb,default charset=utf8;

insert into `user` (`id`,`name`,`pwd`) values
(1,'张三','123456'),(2,'李四','456789'),(3,'王五','345678')

2. 新建项目

1. 新建一个普通的Maven项目

注意看setting中使用的Maven的版本!

2. 删除src目录

3. 导入Maven依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <!--父工程-->
    <groupId>com.wang</groupId>
    <artifactId>MybatisMybatis-Study</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!--导入依赖-->
    <dependencies>
        <!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <!--mybatis-->
        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.5</version>
        </dependency>
        <!--Junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>


</project>

3. 创建一个模块

1. 编写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 核心配置文件-->
<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://localhost:3306/mybatis?useSSL=false&amp;useUnicodeEncode=true&amp;characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

    <!--每一个Mapper.xml都需要在Mybatis核心配置文件中注册!-->
    <mappers>
        <mapper resource="com/wang/dao/UserMapper.xml"/>
    </mappers>
</configuration>

2. 编写mybatis工具类

package com.wang.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;

//sqlSessionFactory --> sqlSession
public class MybatisUtils {

    //sqlSessionFactory要在后面的静态方法中生产sqlSession,这里要提升作用域
    private static SqlSessionFactory sqlSessionFactory;

    static {
        try {
            //使用Mybatis第一步: 获取sqlSessionFactory对象
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
             sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例
    //SqlSession 提供了在数据库执行 SQL 命令所需的所有方法

    //使用静态方法,方便直接调用,生产一个sqlSession
    public static SqlSession getSqlSession() {
        return sqlSessionFactory.openSession();
    }
}

4. 编写代码

1. 实体类

package com.wang.pojo;

public class User {
    private int id;
    private String name;
    private String pwd;

    public User(int id,String name,String pwd) {
        this.id = id;
        this.name = name;
        this.pwd = pwd;
    }

    public User() {
    }

    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 getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

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

2. Dao接口

package com.wang.dao;

import com.wang.pojo.User;

import java.util.List;

public interface UserDao {
    List<User> getUserList();
}

3. 接口实现类由原来的UserDaoImpl转变为一个Mapper配置文件

<?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=绑定一个对应的Dao/Mapper接口-->
<mapper namespace="com.wang.dao.UserDao">
    <!--select查询语句,id=方法的名字,resultType=返回的类型,写集合的泛型-->
    <select id="getUserList" resultType="com.wang.pojo.User">
        select * from mybatis.user;
    </select>
</mapper>

5. 测试

  • Junit测试
  • 注意,在pom文件中要添加如下的配置!
<!--在build中配置resources,来防止我们资源导出失败的问题-->
<build>       
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                </includes>
            </resource>

            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                </includes>
            </resource>
        </resources>

</build>
package com.wang.dao;

import com.wang.pojo.User;
import com.wang.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class UserDaoTest {

    @Test
    public void test(){

        //第一步: 获取sqlSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        //方式一: 执行SQL
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        List<User> userList = userDao.getUserList();

        for (User user : userList) {
            System.out.println(user);
        }

        //关闭sqlSession
        sqlSession.close();
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读