MyBatis 快速学习01:第一个程序

目录

MyBatis简介

什么是MyBatis

为什么需要MyBatis

MyBatis框架部署

项目目录结构

搭建实验数据库

创建maven项目

添加mybatis依赖

编写mybatis配置文件

编写MyBatis工具类

创建实体类

编写DAO接口

编写mapper配置文件

注册mapper文件

测试

maven静态资源导出问题


MyBatis简介

什么是MyBatis

MyBatis中文网https://mybatis.net.cn/

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

  • MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集的过程

  • MyBatis可以使用简单的XML或注解来配置和映射原生信息,将接口和Java实体类映射成数据库中的记录

持久化

持久化就是将程序数据在持久状态和瞬时状态间转换的机制

  • 把数据保存到可永久保存的存储设备中。持久化的主要应用是将内存中的对象存储在数据库中,或保存在磁盘文件、XML数据文件中等。

  • JDBC、文件IO就是一种持久化机制。

为什么需要持久化?内存缺陷所致

  • 内存断电后数据会丢失,但有一些对象是不能丢失的,如银行账号。

  • 即使对象不需要永久保存,也会因内存容量限制不能一直保存在内存中。

持久层

  • 完成持久化工作的代码块(Java中的DAO层)。

  • 用来操作数据库存在的。

为什么需要MyBatis

  • 帮助开发者将数据存入数据库、从数据库取出数据。

  • 简化JDBC操作,通过框架减少代码量,提高开发效率。

  • MyBatis是一个半自动化的ORM框架

    ORM (Object Relation Mapping) 对象关系映射,将Java中的一个对象与数据表中的一行数据一一对应。ORM框架提供了实体类与数据表的映射关系,通过映射文件的配置实现对象的持久化。

  • MyBatis特点:

    • 简单易学:通过文档和源代码可以比较完全的掌握其设计思路和实现。

    • 灵活:不会对程序或者数据库的现有设计产生影响,sql语句写在XML文件中便于管理和优化。

    • 解除sql与程序代码的耦合:通过DAO层将业务逻辑和数据访问逻辑分离,使系统设计更清晰,提高可维护性。

    • 支持XML和注解配置方式自定义完成ORM操作,实现结果映射。

MyBatis框架部署

项目目录结构

搭建实验数据库

CREATE DATABASE `mybatis`;
USE `mysql`;
CREATE TABLE `user` (
  `id` int(11) 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, '二郎神', 'abcdef'),(3, '三圣母', '654321');

创建maven项目

  • Java项目

  • Web项目

添加mybatis依赖

在pom.xml中添加依赖

<dependencies>
    <!-- mysql -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.47</version>
    </dependency>
    <!-- mybatis -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.4.6</version>
    </dependency>
</dependencies>

编写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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSl=true&amp;useUnicode=true&amp;characterEncoding=utf8"/>
                <property name="username" value="root"/>
                <property name="password" value="admin123"/>
            </dataSource>
        </environment>
    </environments>
​
</configuration>

编写MyBatis工具类

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 MyBatisUtil {
​
    private static SqlSessionFactory sqlSessionFactory;
​
    //读取配置文件
    static {
        try {
            InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
​
    //获取sqlsession连接
    public static SqlSession getSqlSession() {
        return sqlSessionFactory.openSession();
    }
​
}

创建实体类

public class User {
    private int id;
    private String name;
    private String pwd;
​
    //无参构造
    public User() {
    }
    //有参构造
    public User(int id, String name, String pwd) {
        this.id = id;
        this.name = name;
        this.pwd = pwd;
    }
​
    //toString
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", pwd='" + pwd + '\'' +
                '}';
    }
    
    //get/set方法
    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;
    }
}

编写DAO接口

import java.util.List;
public interface UserDAO {
​
    public List<User> queryAll();
​
}

编写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" >
​
<mapper namespace="com.qgc.dao.UserDAO">
    <resultMap id="useMap" type="com.qgc.pojo.User">
        <id column="id" property="id"/>
        <result column="name" property="name"/>
        <result column="pwd" property="pwd"/>
    </resultMap>
    <!-- 查询全部用户 -->
    <select id="queryAll" resultMap="useMap">
        select * from user;
    </select>
​
</mapper>

注册mapper文件

在mybatis-config.xml文件中

<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSl=true&amp;useUnicode=true&amp;characterEncoding=utf8"/>
                <property name="username" value="root"/>
                <property name="password" value="admin123"/>
            </dataSource>
        </environment>
    </environments>
    
    <!-- 注册mapper文件 -->
    <mappers>
        <mapper resource="mappers/UserMapper.xml"></mapper>
    </mappers>

</configuration>

测试

<!-- 添加junit依赖 -->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>
import com.qgc.pojo.User;
import com.qgc.util.MyBatisUtil;
import org.apache.ibatis.session.SqlSession;
​
import java.util.List;
​
public class UserDAOTest {
​
    @org.junit.Test
    public void queryAll() {
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        
        UserDAO userDAO = sqlSession.getMapper(UserDAO.class);
        
        List<User> queryAll = userDAO.queryAll();
        
        for (User user : queryAll) {
            System.out.println(user);
        }
        
        sqlSession.close();
    }
}

控制台输出:

maven静态资源导出问题

 我们写的配置文件一般多在resources,但有时为了方便管理,不止在resources中写入配置文件,也可能在src文件里面进行配置文件的置入,而当我们将配置文件写入到src文件时则无法导出到target,而导致程序发生错误

 在pom.xml中加入以下代码

    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>

学习了MyBatis之后,再也不用写原生的JDBC代码了(2022-2-16)

【狂神说Java】Mybatis最新完整教程IDEA版通俗易懂

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值