mybatis学习笔记-增删改的操作-对sqlsession的优化封装-优化代码

NathenJames      2022-06-13     685

关键词:

Mybatis学习笔记(二)-增删改的操作 -对SqlSession的优化封装-优化代码

1.对SqlSession的优化封装

从上一篇可以看到测试类有大量的代码冗余,那接下来对SqlSession的创建过程进行封装

​ 1.使用了静态代码块,随着类的加载而执行,而且只执行一次,由于工厂对象是一个超级重量级资源,所以创建一次就足够了,在类加载时候创建它

​ 2.和原来代码比起来有以下特点,减少了工厂的创建次数,减少了代码量,从下面编码可以看到减少了大约一半的代码,使其更加优雅

​ 3.扩展:如果需要确定DAO和Service的使用的是不是同一个Connection对象可以把Sqlsession加进本地线程里面,这里就不加了(懒)

package 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 java.io.IOException;
import java.io.InputStream;

//获取sqlseesiopn对象的封装
public class Mybatisutil {
    public static SqlSessionFactory sqlSessionFactory;
    //用于对创建工厂
    static {
        try {
            sqlSessionFactory=null;
            String resource = "Mybatis.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //返回SqlSession
    public static SqlSession getSqlSession() {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        return sqlSession;
    }


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

2.增删改的操作

依然使用上一篇的代码,对Mybatis的操作基本步骤:

  1. 在接口中声明方法
  2. 在对应接口配置文件中编写Sql
  3. 调用

1.增加记录操作

  • 在接口中声明方法

    由于我们要增加记录,所以把记录存在实体类对象中,注意必须返回值是void(坑)

    void InsertStudentinfo(StudentModle studentModle);
    
  • 在对应接口配置文件中编写Sql

    1.指定ID为接口中对应的方法

    2.指定参数类型parameterType为类:MyFirstMybatisApplication.Bean.StudentModle,用于对应的mapper接口方法接受的参数类型

    3.注意点:SQL参数必须和实体类的成员变量对应,因为我们是通过实体类传递信息,否则会抛出 There is no getter for property named xxx in xxx

    <insert id="InsertStudentinfo" parameterType="MyFirstMybatisApplication.Bean.StudentModle">
            insert into student (id,name,email,age) values( #{id},#{name},#{email},#{age})
        </insert>
    
  • 调用

    1.给对应需要的字段赋值即可,没有对应赋值的在传输实体类时候,没有赋值的值为null

    2.此处对代码进行了异常处理,如果出现问题会回滚事务

    3.注意对增删改操作进行事物的提交

public void test7() {
    //Sqlseesion的创建,可以发现明显少打几行代码
    SqlSession sqlSession = Mybatisutil.getSqlSession();
    StudentDAO studentDAO = sqlSession.getMapper(StudentDAO.class);
    try {
        StudentModle studentModle = new StudentModle();
        studentModle.setId(1);
        studentModle.setEmail("Ilovedyou@before.com");
        studentModle.setAge(22);
        studentModle.setName("DZYS");
        studentDAO.InsertStudentinfo(studentModle);
        sqlSession.commit();
    } catch (Exception e) {
        e.printStackTrace();
        sqlSession.rollback();
    }

}

2.删除记录操作

​ 具体操作和上面差不多,以及注意点

  • 在接口中声明方法

    void DeleStudentinfo(StudentModle studentModle);
    
  • 在对应接口配置文件中编写Sql

    <delete id="DeleStudentinfo" parameterType="MyFirstMybatisApplication.Bean.StudentModle">
        DELETE from student where id=#{id}
    </delete>
    
  • 调用

    public void test6() {
        SqlSession sqlSession = Mybatisutil.getSqlSession();
        StudentDAO studentDAO = sqlSession.getMapper(StudentDAO.class);
        try {
            StudentModle studentModle = new StudentModle();
            studentModle.setId(1);
            studentDAO.DeleStudentinfo(studentModle);
            sqlSession.commit();
        } catch (Exception e) {
            e.printStackTrace();
            sqlSession.rollback();
        }
    }
    

3.修改记录操作

  • 在接口中声明方法

    void UpdateStudentinfo(StudentModle studentModle);
    
  • 在对应接口配置文件中编写Sql

    • 依然要注意sql参数和实体类对应
    <update id="UpdateStudentinfo" parameterType="MyFirstMybatisApplication.Bean.StudentModle">
        update student set name=#{name},age=#{age} where id=#{id}
    </update>
    
  • 调用

    public void test5() {
        SqlSession sqlSession = Mybatisutil.getSqlSession();
        StudentDAO studentDAO = sqlSession.getMapper(StudentDAO.class);
        try {
            StudentModle studentModle = new StudentModle();
            studentModle.setId(1);
            studentModle.setAge(22);
            studentModle.setName("DZYS");
            studentDAO.UpdateStudentinfo(studentModle);
            sqlSession.commit();
            System.out.println("studentModle = " + studentModle);
        } catch (Exception e) {
            e.printStackTrace();
            sqlSession.rollback();
        }
    }
    

基本就这个套路

之前看一些老的教程发现如果传输空值会报错,比如在数据库中某个值不像给它有值,只想给它弄个null,那么在实体类传输就设置null到对应参数会报错

查阅资源得知:jdbcType这东西,需要在sql参数中指定和实体类对应的参数,那么jdbcType怎么和java内置参数对应呢?

这里有个表,来自于:http://blog.csdn.net/loongshawn/article/details/50496460

可以查阅

不过我在使用最新版本Mybatis没有出现这个情况,我的版本是5.3.7

git学习笔记03-本地git常用操作及原理-文件增删改

1、查看git状态gitstatus 这个可以告诉我们对git做了哪些操,比如增删改2、既然我们修改了东西,有的时候想看看修改了什么,毕竟我们的记忆力并不如电脑gitdiff文件名(默认和暂存区比较、啥事暂存区后面说)3、修改了之... 查看详情

mybatis学习2:实现增删改查操作crud(代码片段)

环境搭建见本专栏上篇。查询用户根据指定id查询用户1.编写接口//根据id查询用户UserselectUserById(intid);2.修改Mapper.xml<selectid="selectUserById"resultType="com.kuang.pojo.User">select*fromuserwhereid=#i 查看详情

mybatis的sql映射文件增删改查的学习

在sql映射文件中配置增删改查的操作:    1、增:    在sql映射文件中添加insert标签,并且增加对应的sql语句。(在之前博文示例的基础上添加)在对应的接口中添加对应的方法,方法名与sql映射文... 查看详情

spring5学习笔记(11)—“jdbctemplate操作数据库(增删改)”(代码片段)

JdbcTemplate操作数据库(增删改)一、准备工作二、JdbcTemplate—增加操作(add)三、JdbcTemplate—删除操作(delete)四、JdbcTemplate—更新操作(update)JdbcTemplate的增、删、改操作均由JdbcTemplate的upd 查看详情

spring5学习笔记(11)—“jdbctemplate操作数据库(增删改)”(代码片段)

JdbcTemplate操作数据库(增删改)一、准备工作二、JdbcTemplate—增加操作(add)三、JdbcTemplate—删除操作(delete)四、JdbcTemplate—更新操作(update)JdbcTemplate的增、删、改操作均由JdbcTemplate的upd 查看详情

mybatis实现单表增删改查操作

mybatis是对持久层进行了封装、mybatis文档地址:https://mybatis.org/mybatis-3/zh/index.html下面实现单表的增删改查操作。1.新建maven项目命名为mybatis、并在pom.xml中引入相关依赖<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.ap 查看详情

spring5学习笔记(13)—“jdbctemplate操作数据库(批量增删改)”(代码片段)

JdbcTemplate操作数据库(批量增删改)一、批量添加操作二、批量修改操作三、批量删除操作1.JdbcTemplate的批量增加、修改、删除操作均由JdbcTemplate的batchUpdate方法实现该方法有两个参数:参数一:sql(操作对应... 查看详情

框架mybatis入门(基于原生接口的xml版本),对数据库进行简单的增删改查操作(代码片段)

Mybatis是?MyBatis本是Apache的一个开源项目iBatis。是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQLMaps和DataAccessObjects(DAOs)MyBatis支持自定义SQL、存储过程以及高级映射。MyBatis免除了几乎所有的JDBC代码以及... 查看详情

mybatis数据库的增删改查

配置文件 以增加为例 对数据库操作进行封装所需的包文件目录  查看详情

mybatis实现简单的数据库增删改查操作

Mybatis实现简单的数据库增删改查操作框架:mybatis(3.5.2)数据库:mysql工具:idea1、新建一个maven项目,在pom文件中添加mybatis依赖及MySQL依赖<!--mybatis核心依赖--><!--https://mvnrepository.com/artifact/org.mybatis/mybatis--><dependency& 查看详情

mybatis实现简单的数据库增删改查操作

Mybatis实现简单的数据库增删改查操作框架:mybatis(3.5.2)数据库:mysql工具:idea 1.新建一个maven项目,在pom文件中添加mybatis依赖及MySQL依赖1<!--mybatis核心依赖-->2<!--https://mvnrepository.com/artifact/org.mybatis/mybatis-->3<de 查看详情

2021-08-13-mybatis学习笔记(代码片段)

Mybatis学习笔记1.增删改查(修改dao中接口类,xml和test类)1.1namespace1.2select.insert.update.delete.2.使用注解开发2.1面向接口编程:解耦2.2注解开发1.增删改查(修改dao中接口类,xml和test类)整个过程:1.编写接口2.... 查看详情

springboot+mybatis实现对员工的增删改查

SpringBoot+MyBatis实现对员工的增删改查一、使用idea新建SpringBoot项目File——>New——>Project——>SpringAssistant——>Next——>修改报名,项目名等信息——>Next——>在web中选中web,在SQL中选中MySQL、JDBS、MyBatis——>Next... 查看详情

7mybatis学习——基础增删改

sqlmapper中配置<insertid="addEmp"parameterType="employee">insertintoemployee(name,gender)values(#{name},#{gender})</insert><updateid="updateEmp">updateemployeesetname=#{name},gender=#{g 查看详情

[mybatis]快速搭建一个mybatis程序,实现对数据的增删改查

什么是MyBatis?MyBatis是一款优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis免除了几乎所有的JDBC代码以及设置参数和获取结果集的工作。MyBatis可以通过简单的XML或注解来配置和映射原始类型、接口和JavaPOJO... 查看详情

hibernate下的增删改查

...务逻辑层中的调用数据库的中间件演变:jdbc---hibernater---mybatishibernate和mybatis区别?1:hiberanter学习的难度要比mybatis要大,复杂度要高2:hibernate不需要写sql语句,自动生成,而mybatis需要写sql语句进行数据操作3:hibernate支持分页(A... 查看详情

springjdbc学习笔记-01简单的增删改查(代码片段)

文章目录1简介2使用2.1导入依赖2.2配置数据源2.3配置jdbcTemplate2.4查询2.5新增2.6修改2.7删除1简介Spring框架对于数据库的支持是有的,在springJdbc中,为我们提供了一个JdbcTemplate模版类,其中为我们大量的封装数据库操作... 查看详情

mybatis学习笔记11:解决字段名和属性的映射关系(代码片段)

解决字段名和属性的映射关系【Mybatis】学习笔记01:连接数据库,实现增删改【Mybatis】学习笔记02:实现简单的查【MyBatis】学习笔记03:配置文件进一步解读(非常重要)【MyBatis】学习笔记04:配置文件模板【MyBatis】学习笔记05... 查看详情