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);
        }
    }


}

 这篇博客就学到这,下午的时间开始练算法题。。。。。。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值