Mybatis實現增刪改查

學習完實現第一個Mybatis第一個程序之後,要開始寫一個最最最基本的增刪改查了。這篇文章主要會講述以下幾個方面的內容:

一、第一個Mybatis的重構

二、Mybatis主配置文件的介紹

三、Mybatis實現簡單的增刪改查

首先開始第一個部分

一、第一個Mybatis的重構

學了好幾個持久層的框架,發現他每一個框架都需要進行編寫工具類,Mybatis也不例外。

package 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;


/**
 * mybatis的工具類
 */
public class MybatisUtil {

    //聲明一個sqlSession對象
    public static volatile SqlSessionFactory sqlSessionFactory;

    public static SqlSession getSqlSession() {
        try {
            if (sqlSessionFactory == null) {
                InputStream resourceAsStream = Resources.getResourceAsStream("mybatis.xml");
                synchronized (MybatisUtil.class) {
                    if (sqlSessionFactory == null) {
                        sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return sqlSessionFactory.openSession();
    }
}

這個工具類的主要目的就是爲了獲得sqlSession對象,然後更方便實現增刪改查的方法,寫完上面這個工具類,那麼就可以在dao的實現類中獲取sqlsession對象,然後調用裏面的方法。

@Override
    public void insertStudent(Student student) {
        SqlSession sqlSession = MybatisUtil.getSqlSession();
        sqlSession.insert("insertStudent",student);
        sqlSession.commit();
    }

這樣就能夠持續的用sqlSession了,不用每一次都需要加載mybatis.xml配置文件

二、Mybatis主配置文件的介紹

Mybatis的配置文件是非常重要的,下面就是簡單的介紹常用的配置:

數據庫連接配置:

 db.properties文件:

jbdc.drive=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/learnmybatis?serverTimezone=UTC
jdbc.user=root
jdbc.password=自己的數據庫連接密碼

數據庫環境配置:

 

transactionManager標籤
該標籤用於指定MyBatis所使用的事務管理器。 MyBatis 支持兩種事務管理器類型:

  • JDBC:該事務器就是我們之前通過Connection的commit()方法提交,通過rollback()方法回滾,默認是需要手動提交的。
  • MANAGED:由容器來管理事務的整個事務的生命週期,默認情況下會關閉連接,將來學習spring框架之後,就不用在配置事務管理器了,spring會使用自帶的管理器。

dataSource標籤

該項主要用於配置數據源和數據庫連接基本屬性,有以下三種內建的數據源類型:

  • UNPOOLED:該配置表示不使用連接池,每次請求都會創建一個數據庫連接,使用完畢後再關閉。當項目對數據庫性能要求不大的時候,可以使用該配置。
  • POOLED:改配置表示使用mybatis自帶的數據庫連接池,可以在dataSource下的property屬性中設置數據庫連接池的基本信息,該部分可以在mybatis的官網中看到。
  • JNDI:配置外部數據源

 mapper映射配置:

<mappers>
    <!--使用相對於類路徑的資源引用-->
    <mapper resource="XXXXX/StudentMapper.xml"/>
</mappers>

 使用別名:

這個意思就是在mapper文件中編寫代碼時,要引用相應包下面的類,爲了減少代碼量所寫的配置文件:

具體例子:

配置之前:

<mapper namespace="zhiguo98">
    <!--parameterType可省略-->
    <insert id="insertStudent" parameterType="domain.Student">
        INSERT INTO t_student(name,age,score) VALUES (#{name},#{age},#{score})
    </insert>
</mapper>

 

配置之後: 

關於Mybatis的配置就說這麼多,其實有的地方我也不太懂,不懂的地方用到了再去查吧!

 三、Mybatis實現簡單的增刪改查

首先就是要編寫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="zhiguo98">
    <!--parameterType可省略-->
    <!--增加-->
    <insert id="insertStudent" parameterType="student">
        INSERT INTO t_student(name,age,score) VALUES (#{name},#{age},#{score})
    </insert>

    <!--刪除-->
    <delete id="deleteStudent" parameterType="student">
        delete from t_student where id=#{id}
    </delete>

    <!--修改-->
    <update id="updateStudent" parameterType="student">
        update t_student set name=#{name},age=#{age},score=#{score} where id=#{id}
    </update>

    <!--查詢一個-->
    <select id="findOne" resultType="student">
        select * from t_student where id=#{id}
    </select>

    <!--查詢多個-->
    <select id="findAll" resultType="student">
        select * from t_student
    </select>
</mapper>

StudentDao.java文件:

package dao;

import domain.Student;

import java.util.List;

public interface StudentDao {
    public abstract void insertStudent(Student student);

    public abstract void deleteStudent(int id);

    public abstract void updateStudent(Student student);

    public abstract Student findOne(int id);

    public abstract List<Student> findAll();
}

StudentDaoImpl2.java文件:

package dao.impl;

import dao.StudentDao;
import domain.Student;
import org.apache.ibatis.session.SqlSession;
import utils.MybatisUtil;

import java.util.List;

public class StudentDaoImpl2 implements StudentDao {


    /**
     * 插入一個數據
     * @param student
     */
    @Override
    public void insertStudent(Student student) {
        SqlSession sqlSession = MybatisUtil.getSqlSession();
        sqlSession.insert("insertStudent",student);
        sqlSession.commit();
    }

    /**
     * 根據id刪除一個數據
     * @param id
     */
    @Override
    public void deleteStudent(int id) {
        SqlSession sqlSession = MybatisUtil.getSqlSession();
        sqlSession.delete("deleteStudent",id);
        sqlSession.commit();

    }

    /**
     * 更新一條信息
     * @param student
     */
    @Override
    public void updateStudent(Student student) {
        SqlSession sqlSession = MybatisUtil.getSqlSession();
        sqlSession.update("updateStudent",student);
        sqlSession.commit();

    }

    /**
     * 根據id查詢一條信息
     * @param id
     * @return
     */
    @Override
    public Student findOne(int id) {
        SqlSession sqlSession = MybatisUtil.getSqlSession();
        Student stu = sqlSession.selectOne("findOne", id);
        System.out.println(stu);
        sqlSession.commit();
        return stu;
    }

    /**
     * 查詢所有的信息
     * @return
     */
    @Override
    public List<Student> findAll() {
        SqlSession sqlSession = MybatisUtil.getSqlSession();
        List<Student> findAll = sqlSession.selectList("findAll");
        for (Student student : findAll) {
            System.out.println(student);
        }
        return findAll;
    }
}

測試文件:

package test;

import dao.StudentDao;
import dao.impl.StudentDaoImpl;
import dao.impl.StudentDaoImpl2;
import domain.Student;
import org.junit.jupiter.api.Test;

import java.util.List;

public class StudentTest01 {

    /**
     * 測試插入一條數據
     */
    @Test
    public void insertStudent(){
        StudentDao studentDao = new StudentDaoImpl2();
        Student student = new Student();
        student.setName("zhiguo98");
        student.setAge(12);
        student.setScore(99.0);
        studentDao.insertStudent(student);
    }

    /**
     * 測試刪除一條數據
     */
    @Test
    public void deleteStudent(){
        StudentDao studentDao = new StudentDaoImpl2();
        studentDao.deleteStudent(2);
    }

    /**
     * 測試更新信息方法
     *
     */
    @Test
    public void updateStudent(){
        StudentDao studentDao = new StudentDaoImpl2();
        Student student = new Student(1,"zhiguo98",23,23);
        studentDao.updateStudent(student);
    }


    /**
     * 測試查找一條信息的方法
     */
    @Test
    public void findOne(){
        StudentDao studentDao = new StudentDaoImpl2();
        Student one = studentDao.findOne(3);
        System.out.println(one);
    }

    /**
     * 測試查詢所有的方法
      */
    @Test
    public void findAll(){
        StudentDao studentDao = new StudentDaoImpl2();
        List<Student> all = studentDao.findAll();
        for (Student student : all) {
            System.out.println(student);
        }
    }


}

 這篇博客就學到這,下午的時間開始練算法題。。。。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章