MyBatis 基本简介

MyBatis 基本介绍

文章目录

  • MyBatis 基本介绍
    • 1. 基本概念
    • 2. 快速入门
      • 2.0 创建数据库和表
      • 2.1 创建 Maven 工程(很简单,这里不演示)
      • 2.2 导入相关依赖坐标(pom.xml)
      • 2.3 创建实体类(com.crud.domain.User)
      • 2.4 创建持久层接口(com.crud.dao.UserDao)
      • 2.5 创建MyBatis的主配置文件 (src/resource/SqlMapConfig.xml)
      • 2.6 创建持久层接口的配置文件(src/resource/com/crud/dao/UserDao.xml)
      • 2.7 创建测试类和测试方法(test/java/MyBatisTest)
    • 3. 总结



1. 基本概念

  MyBatis 是一款由 Java 编写的持久层框架,它支持定制化 SQL、存储过程以及高级映射,并且封装了 JDBC 操作的很多细节,使开发者只需要关注 SQL 语句本身,不再去管注册驱动,创建连接等过程。

  MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录,它使用了ORM思想实现了结果集的封装。

mybatis官网

  ORM(Object Relational Mapping,对象关系映射),将数据库表和实体类以及实体类的属性对应起来,让我们通过操作实体类就实现操作数据库表,使用过程中需要做到实体类中的数据库表的字段名称保持一致。



2. 快速入门

这里会实现基本的增删改查操作,我这里的环境是 IDEA_2019.2.3MySQL_8.0.17

2.0 创建数据库和表

-- 创建数据库
CREATE DATABASE IF NOT EXISTS example CHARACTER SET utf8 ;
USE example;
DROP TABLE IF EXISTS `user`;

-- 创建表
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(32) NOT NULL COMMENT '用户名称',
  `birthday` datetime default NULL COMMENT '生日',
  `sex` char(1) default NULL COMMENT '性别',
  `address` varchar(256) default NULL COMMENT '地址',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 插入数据

insert  into `user`(`id`,`username`,`birthday`,`sex`,`address`) values 
(1,'刘备','2018-02-27 17:47:08','男','北京'),
(2,'孙尚香','2018-03-02 15:09:37','女','上海'),
(3,'貂蝉','2018-03-04 11:34:34','女','深圳'),
(4,'诸葛亮','2018-03-04 12:04:06','男','广州'),
(5,'吕布','2018-03-07 17:37:26','男','厦门'),
(6,'黄月英','2018-03-08 11:44:00','女','福建');

2.1 创建 Maven 工程(很简单,这里不演示)


2.2 导入相关依赖坐标(pom.xml)


<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.0modelVersion>

    <groupId>com.crudgroupId>
    <artifactId>demoartifactId>
    <version>1.0-SNAPSHOTversion>
    <packaging>jarpackaging>

    <dependencies>
        
        <dependency>
            <groupId>org.mybatisgroupId>
            <artifactId>mybatisartifactId>
            <version>3.4.5version>
        dependency>
        
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
            <version>8.0.17version>
        dependency>
        
        <dependency>
            <groupId>junitgroupId>
            <artifactId>junitartifactId>
            <version>4.10version>
        dependency>
    dependencies>
project>

2.3 创建实体类(com.crud.domain.User)

package com.crud.domain;

import java.util.Date;

public class User {
    private Integer id;
    private  String username;
    private Date birthday;
    private String sex;
    private String address;
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", birthday=" + birthday +
                ", sex='" + sex + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
	// 还需要添加 getter 和 setter 方法,为了减少文章篇幅,这里就不写了,IDEA快捷键为 alt+insert

2.4 创建持久层接口(com.crud.dao.UserDao)

package com.crud.dao;

import com.crud.domain.User;
import java.util.List;

/**
 * 持久层接口
 */
public interface UserDao {
    //查询所有用户
    List<User> findAll();
    // 保存添加用户
    void saveUser(User user);
	// 更新用户
    void updateUser(User user);
    // 根据 ID 删除用户
    void deleteUser(Integer id);
}

2.5 创建MyBatis的主配置文件 (src/resource/SqlMapConfig.xml)



<configuration>
    
    <environments default="mysql">
        
        <environment id="mysql">
            
            <transactionManager type="JDBC">transactionManager>
            
            <dataSource type="POOLED">
                
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/example?serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            dataSource>
        environment>
    environments>
    
    <mappers>
        
        <mapper resource="com/crud/dao/UserDao.xml">mapper>
    mappers>
configuration>

2.6 创建持久层接口的配置文件(src/resource/com/crud/dao/UserDao.xml)



<mapper namespace="com.crud.dao.UserDao">
    
    <select id="findAll" resultType="com.crud.domain.User">
        select * from user;
    select>
    
    <insert id="saveUser" parameterType="com.crud.domain.User">
        insert into user (username,address,sex,birthday) value (#{username},#{address},#{sex},#{birthday});
    insert>
    
    <update id="updateUser" parameterType="com.crud.domain.User">
        update user set username=#{username},address=#{address},sex=#{sex},birthday=#{birthday} where id=#{id};
    update>
    
    <delete id="deleteUser" parameterType="java.lang.Integer">
        delete from user where id = #{id};
    delete>
mapper>

2.7 创建测试类和测试方法(test/java/MyBatisTest)

package mybatisTest;

import com.crud.dao.UserDao;
import com.crud.domain.User;
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 org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;

public class MyBatisTest {
    private InputStream is;
    private SqlSession sqlSession;
    private UserDao userDao;
    @Before//测试方法执行之前执行,初始化方法
    public void init() throws IOException {
        //1. 读取配置文件:类加载器
        is = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2. 获取 SqlSessionFactory,构建者模式
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
        //3. 使用工厂生产SqlSession对象,工厂模式
        sqlSession = factory.openSession();
        //4. 使用SqlSession创建Dao接口的代理对象,代理模式
        userDao = sqlSession.getMapper(UserDao.class);
    }
    @After//测试方法执行之后再执行
    public void destroy() throws Exception{
        sqlSession.close();
        is.close();
    }
    //测试查询所有用户
    @Test
    public void testFindAll(){
        //5. 使用代理对象执行方法
        List<User> users = userDao.findAll();
        for (User user : users) {
            System.out.println(user);
        }
        // 6. 释放资源
    }
	// 添加用户
    @Test
    public void testSave(){
        User user = new User();
        user.setUsername("Jacks");
        user.setAddress("四川成都");
        user.setSex("男");
        user.setBirthday(new Date());
        //5. 使用代理对象执行保存方法
        userDao.saveUser(user);
        // 提交事务
        sqlSession.commit();
    }
    // 更新对象
    @Test
    public void testUpdateUser(){
        User user = new User();
        user.setId(1);
        user.setUsername("Jacks");
        user.setAddress("四川成都");
        user.setSex("男");
        user.setBirthday(new Date());
        // 使用代理对象执行更新
        userDao.updateUser(user);
    }
    //根据ID删除用户
    @Test
    public void testDeleteUser(){
        // 使用代理对象执行删除方法
        userDao.deleteUser(3);
        // 提交变更
        sqlSession.commit();
    }
}

注意:

  • 以上代码为照着手敲的,可能有点小问题。

3. 总结

  • MyBatis 是一种持久层框架。
  • JDBC 是一种规范。
  • JdbcTemplate 和 DBUtils 分别是出自 Spring 和 Apache 的工具类。
  • 创建 UserDao.xmlUserDao.java 的名称建议一致。
  • 在 MyBatis 中,持久层接口名称和映射文件也叫做Mapper
  • UserDao.javaUserMapper.java 都可以表示持久层接口。
  • MyBatis 的映射配置文件和 dao 接口的包结构必须相同
    MyBatis 基本简介_第1张图片
  • 映射配置文件的mapper标签的namespace属性的取值必须是 dao 接口的全限定类名
  • 映射配置文件的操作配置select标签的id属性的取值必须是 dao 接口的方法名
    MyBatis 基本简介_第2张图片

值得注意的是,只有满足最后三个条件才可以不用创建 dao 接口的实现类。



时间:2019年11月12日00:10:03


你可能感兴趣的:(SSM框架)