MyBatis

MyBatis从入门到放弃

什么是MyBatis

MyBatis是一个半自动的ORM(Object Relation Mapping对象关系映射)持久层框架,底层其实就是封装了JDBC,简化了对数据库的操作

参考博客

官方文档

W3C

MyBatis的使用

创建项目

创建一个maven项目

在这里插入图片描述
在这里插入图片描述

添加Maven依赖

maven仓库的地址

需要添加的依赖(坐标)是:

<!--依赖-->
<dependencies>
    <!--maven是有一个本地仓库的,下载好的jar包就存在本地-->
    <!-- 现在就是代表已经导入了一个java连接mysql的jar包 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.13</version>
    </dependency>

    <!--ctrl+x删除一整行    ctrl+D-->
    <!--引入mybatis的jar包-->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.4.6</version>
    </dependency>
    
    <!--这是做单元测试的jar包-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>compile</scope>
    </dependency>
</dependencies>

创建数据库以及开发包

  • 建库建表语句
DROP TABLE IF EXISTS user;

CREATE TABLE user
(
	id BIGINT(20) NOT NULL COMMENT '主键ID',
	name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
	age INT(11) NULL DEFAULT NULL COMMENT '年龄',
	email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
	PRIMARY KEY (id)
);

DELETE FROM user;

INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');
  • 实体类

User

package com.changan.entity;

import lombok.Data;

@Data
public class User {

    private Integer id;

    private String name;

    private Integer age;

    private String email;
}
  • dao层

UserDao

package com.changan.dao;

import com.changan.entity.User;

import java.util.List;

public interface UserDao {

    /**
     * 查询所有的学生信息
     * @return
     */
    List<User> findUsers();

    /**
     * 添加用户信息
     * @param user
     * @return
     */
    int addUser(User user);

    /**
     * 根据id删除用户信息
     * @param id
     * @return
     */
    int deleteUser(Long id);

    /**
     * 更新用户
     * @param user
     * @return
     */
    int updateUser(User user);
}

配置Mybatis的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>

    <typeAliases>
        <package name="com.changan.entity"></package>
    </typeAliases>
    <!--多套开发环境-->
    <environments default="development">
        <!--开发环境-->
        <environment id="development">
            <!--事务管理器   默认使用JDBC进行事务管理-->
            <transactionManager type="JDBC"/>
            <!--数据源配置-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=UTF-8&amp;useUnicode=true&amp;serverTimezone=GMT%2B8"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--对应的mybatis的xml文件-->
        <mapper resource="mapper/UserDao.xml"/>
    </mappers>
</configuration>
  • SQL映射文件

UserDao.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">
<!--
  根据namespace查找对应创建dao接口
  根据方法名称查找对应的sql语句
-->
<mapper namespace="com.changan.dao.UserDao">
    <!--
        每一种sql语句对应每一种标签
        resultType 返回值类型
    -->
    <select id="findUsers" resultType="User">

      select * from user

    </select>

    <!--
        id对应方法名称
        parameterType 参数类型
     -->
    <insert id="addUser" parameterType="user">
      INSERT INTO `mybatis`.`user`(`id`, `name`, `age`, `email`) VALUES (null, #{name}, #{age}, #{email});
    </insert>

    <delete id="deleteUser">
      delete  from `USER` where id=#{id}
    </delete>

    <update id="updateUser">
      UPDATE `mybatis`.`user` SET `name` = #{name}, `age` = #{age}, `email` = #{email} WHERE `id` = 7;
    </update>
</mapper>

测试

MyBatisUtil

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

public class MyBaitsUtil {

    static SqlSession sqlSession = null;

    /**
     * 获取SqlSession
     * @return SqlSession对象
     */
    public static SqlSession getSqlSession(){
        String resource = "mybatis-config.xml";
        InputStream inputStream = null;
        try {
            inputStream = Resources.getResourceAsStream(resource);
        } catch (IOException e) {
            e.printStackTrace();
        }
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        sqlSession = sqlSessionFactory.openSession();
        return sqlSession;
    }

    /**
     * 关闭SqlSession
     */
    public static void closeSqlSession(SqlSession sqlSession){
        if(sqlSession!=null){
            sqlSession.close();
        }
    }
}

UserTest

package com.changan.test;

import com.changan.dao.UserDao;
import com.changan.entity.User;
import com.changan.utils.MyBaitsUtil;
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.Test;

import javax.annotation.Resource;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class UserTest {

    @Test
    public void testFind() {
        SqlSession sqlSession = MyBaitsUtil.getSqlSession();
        try {
            List<User> users = sqlSession.selectList("com.changan.dao.UserDao.findUsers");
            for (User user : users
            ) {
                System.out.println(user.toString());
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //每次用完记得关闭连接对象
            MyBaitsUtil.closeSqlSession(sqlSession);
        }
    }

    @Test
    public void testSelect() {
        /*ctrl+alt+L  代码对齐*/
        SqlSession sqlSession = MyBaitsUtil.getSqlSession();
        try {
            UserDao userDao = sqlSession.getMapper(UserDao.class);
            List<User> users = userDao.findUsers();
            //jdk8中提供的箭头函数
            users.forEach(user -> {
                System.out.println(user.toString());
            });
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            MyBaitsUtil.closeSqlSession(sqlSession);
        }
    }

    @Test
    public void testInsert() {
        SqlSession sqlSession = MyBaitsUtil.getSqlSession();
        try {
            //mybatis是支持事务的  默认是不开启事务的
            UserDao userDao = sqlSession.getMapper(UserDao.class);
            User user = new User();
            user.setName("luoya");
            user.setAge(18);
            user.setEmail("3838438@qq.com");
            //仅仅是在内存中增加了一个用户
            int i = userDao.addUser(user);
            //手动提交事务
            sqlSession.commit();
            System.out.println(i);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            MyBaitsUtil.closeSqlSession(sqlSession);
        }
    }

    @Test
    public void deleteUser() {
        SqlSession sqlSession = MyBaitsUtil.getSqlSession();
        try {
            //mybatis是支持事务的  默认是不开启事务的
            UserDao userDao = sqlSession.getMapper(UserDao.class);
            //仅仅是在内存中增加了一个用户
            int i = userDao.deleteUser(5L);
            //手动提交事务
            sqlSession.commit();
            System.out.println(i);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            MyBaitsUtil.closeSqlSession(sqlSession);
        }
    }

    @Test
    public void testupdate() {
        SqlSession sqlSession = MyBaitsUtil.getSqlSession();
        try {
            //mybatis是支持事务的  默认是不开启事务的
            UserDao userDao = sqlSession.getMapper(UserDao.class);
            User user = new User();
            user.setName("ange");
            user.setAge(38);
            user.setEmail("1351261434@qq.com");
            //仅仅是在内存中增加了一个用户
            int i = userDao.updateUser(user);
            //手动提交事务
            sqlSession.commit();
            System.out.println(i);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            MyBaitsUtil.closeSqlSession(sqlSession);
        }
    }
}

总结

步骤

  1. 创建项目
  2. 新建数据库和开发包
  3. 导入maven坐标
  4. 配置mybatis-config文件
  5. 编写实体类
  6. 编写dao接口
  7. 编写dao.xml文件
  8. 编写MyBaitsUtil文件
  9. 编写测试类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值