老司机带你玩:MyBatis入门

一. 认识 MyBatis

1、MyBatis是什么?

MyBatis 是一款一流的支持自定义 SQL、存储过程和高级映射的持久化框架。MyBatis 几乎消除了所有的 JDBC 代码,也基本不需要手工去设置参数和获取检索结果。MyBatis 能够使用简单的 XML 格式或者注解进行来配置,能够映射基本数据元素、Map 接口和 POJOs(普通 java 对象)到数据库中的记录。

2、持久化框架是什么?

传统的jdbc进行操作,它代码都是套路代码,很多时候有重复的代码,虽然我们可以写工具类简化编码,但是毕竟不方便。所以就开始流行框架。
框架是什么?实际上框架就是一个编码的半成品,它自动的搭建好了我们要进行操作的大部分设置。对于用户来讲,只是去填充必要的设置或者编码。

3、什么是持久化?

就是把内存中的对象转成数据库表中的记录;反之把表中的记录转成对象。这样下次的时候我们可以到表中找到记录,反正可以把记录加载到内存的对象中。我们做这样的操作的框架就是所谓的持久化框架。
如图所示

4、常见的持久化框架有哪些,它们的区别是什么?

1)Hibernate:全自动的对象关系映射(ORM)的框架,操作的时候操作对象,框架自动映射程表中的记录。操作简单,但是配置很有技巧,它表现在性能优化的时候需要深入了解,很不容易掌握。它是一个重量级的ORM框架,非常耗费资源。它不需要写SQL语句,语句由框架自动的生成,你自己看不到语句。非常方便移植,只要改它的方言即可(方言就是指定#数据库的类型的)
2)MyBatis:半自动的ORM框架,通过操作SQL语句来映射表中的记录。它方便使用,但是写SQL需要有基础知识。不方便移植,比如针对mysql数据库和oracle数据库的时候,可能语句需要修改。

二. 使用MyBatis的有哪些准备工作?

在这里插入图片描述

1.首先创建一个MyBatis项目

第一步
第二步

2. 接下来配置核心文件:SqlMapConfig.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="db.properties"></properties>
    <!--
       开放模式、测试模式、线上模式
       这里设置成开发模式
    -->
    <environments default="development">
        <environment id="development">
            <!--设置事务模式-->
            <transactionManager type="jdbc"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/java/mapper/UserMapper.xml"/>
    </mappers>
</configuration>

3.每个表写一个映射配置文件 UserMapper.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.java.mapper.UserMapper">
    <select id="getUserList" resultType="com.java.entity.User">
        SELECT userId,
            userName,
            password
        FROM USER
    </select>
</mapper>

4.基于接口映射操作,那么就添加接口,传统方式不添加接口

package com.java.test;

import com.java.entity.User;
import com.java.mapper.UserMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.IOException;
import java.io.Reader;
import java.util.List;

public class UserTest {
    @Test
    public void getUserList() throws Exception {
        //1、创建SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
        //2、创建SqlSessionFactory
        String configFile="mybatis-config.xml";
        Reader reader= Resources.getResourceAsReader(configFile);
        SqlSessionFactory factory=builder.build(reader);
        //3、串讲SqlSession对象
        SqlSession sqlSession = factory.openSession();
        /*
            传统方式:缺陷是com.java.mapper.UserMapper包名很容易写错,不建议使用
            接口映射方式:
                 1)UserMapper.xml的namespace中要写上接口的全路径名
                 2)sqlSession.getMapper(UserMapper.class)返回一个接口的实现类的代理对象
        */
        //List<User> list = sqlSession.selectList("com.java.mapper.UserMapper.getUserList");

        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        System.out.println("UserMapper接口的实现类的代理对象:"+mapper);
        List<User> list = mapper.getUserList();
        if(null!=list){
            for(User user:list){
                System.out.println(user);
            }
        }
        //4、关闭SqlSession对象
        sqlSession.close();
    }
}

5. 核心API进行操作(添加mybatis支持的jar)

三 . 核心API

1)SqlSessionFactoryBuilder:创建SqlSessionFactory的工场。它是用过就丢失,它最好是写在方法体里面,作为局部变量使用。
2)SqlSessionFactory:是创建SqlSession的工场。该对象一旦创建,会在整个项目运行的时候始终存在。所以我们建议大家只创建1次,单例模式。它是重量级的对象,销毁内存大。
3)SqlSession:进行crud用改对象进行操作。

四.工具类的编写

package com.java.util;

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.Reader;

public class MyBatisUtil {
    private static SqlSessionFactory factory;
    static {
        //1、创建SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
        try {
            //2、创建SqlSessionFactory
            String configFile="mybatis-config.xml";
            Reader reader= null;
            reader = Resources.getResourceAsReader(configFile);
            factory=builder.build(reader);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 创建SqlSession对象
     * @return
     */
    public static SqlSession createSqlSession(){
        /*
            1)openSession(boolean):默认是true,当true的时候自动提交事务
            2)增加、删除、修改必须提交事务。查询可以提交也可以不提交
         */
       return factory.openSession(false);// 默认值就是true
    }
    public static void closeSqlSession(SqlSession sqlSession){
        if(null!=sqlSession){
            sqlSession.close();
        }
    }

}

五.添加操作

1、添加数据后,如果要获得添加记录的主键值(前提是自动增长)useGeneratedKeys=“true”,keyProperty=“userId”

2、编码

@Test
public void addUser(){
    SqlSession sqlSession=null;
    try{
        sqlSession = MyBatisUtil.createSqlSession();
        User user=new User();
        user.setUserName("王涛11");
        user.setPassword("123");
        int rows = sqlSession.getMapper(UserMapper.class).addUser(user);
        System.out.println("rows====>"+rows);

        Integer userId = user.getUserId();
        System.out.println("userId====>"+userId);
        //int i=20/0;
        //必须操作增、删、改的时候进行提交事务,否则不会添加到表
        sqlSession.commit();
    }catch (Exception e){
        e.printStackTrace();
        MyBatisUtil.closeSqlSession(sqlSession);
    }finally {
        sqlSession.rollback();
    }
}

六.删除操作

1)修改UserMapper.xml

<delete id="deleteUser" parameterType="java.lang.Integer">
    DELETE FROM `USER`
    WHERE userId=#{userId}
</delete>

2)编写测试方法

@Test
public void deleteUser(){
    SqlSession sqlSession=null;
    try{
        sqlSession = MyBatisUtil.createSqlSession();
        int rows = sqlSession.getMapper(UserMapper.class).deleteUser(7);
        System.out.println("rows====>"+rows);
        sqlSession.commit();
    }catch (Exception e){
        e.printStackTrace();
        MyBatisUtil.closeSqlSession(sqlSession);
    }finally {
        sqlSession.rollback();
    }
}

七.修改操作

1)修改UserMapper.xml

(注意:由于测试中要先进行查询单条,然后对查询的结果进行修改,所以得添加一个查询单条的配置)

SELECT userId,
userName,
password
FROM USER
WHERE userId=#{userId}

UPDATE `USER` SET userName=#{userName}, `password`=#{password} WHERE userId=#{userId}

2)编写测试方式

@Test
public void updateUser(){
SqlSession sqlSession=null;
try{
sqlSession = MyBatisUtil.createSqlSession();
User user = sqlSession.getMapper(UserMapper.class).getUserById(1);
user.setUserName(“刘备”);
user.setPassword(“1234”);
Integer rows=sqlSession.getMapper(UserMapper.class).updateUser(user);
System.out.println(“rows:=====>”+rows);
sqlSession.commit();
}catch (Exception e){
e.printStackTrace();
MyBatisUtil.closeSqlSession(sqlSession);
}finally {
sqlSession.rollback();
}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值