mybatis学习记录------4

czsy      2022-04-28     508

关键词:

一 mybatis开发dao的方法

1 SqlSessionFactoryBuilder:

通过SqlSessionFactoryBuilder创建会话工厂SqlSessionFactory,将SqlSessionFactoryBuilder当成一个工具类使用即可,不需要使用单例管理SqlSessionFactoryBuilder。在需要创建SqlSessionFactory时候,只需要new一次SqlSessionFactoryBuilder即可。

2 SqlSessionFactory 

通过SqlSessionFactory创建SqlSession,使用单例模式管理sqlSessionFactory(工厂一旦创建,使用一个实例)。将来mybatisspring整合后,使用单例模式管理sqlSessionFactory

3 SqlSession

 

SqlSession是一个面向用户(程序员)的接口。SqlSession中提供了很多操作数据库的方法:如:selectOne(返回单个对象)selectList(返回单个或多个对象)。SqlSession是线程不安全的,在SqlSesion实现类中除了有接口中的方法(操作数据库的方法)还有数据域属性。

SqlSession最佳应用场合在方法体内,定义成局部变量使用。

二 原始dao开发方法(程序员需要些dao接口和dao实现类)

1 在src文件夹下新建dao包,在包内新建接口userDao

 

package pers.czs.mybatis.dao;

import pers.czs.mybatis.po.User;

public interface userDao {
    //根据id查询用户信息
    public User findUserById(int id) throws Exception;
    
    //添加用户
    public void insertUser(User user) throws Exception;
    
    //删除用户
    public void deleteUser(int id) throws Exception;
}

 

2 在dao包内新建接口实现类userDaoImpl

package pers.czs.mybatis.dao;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import pers.czs.mybatis.po.User;

public class userDaoImpl implements userDao{
    
    //需要向dao实现类中注入SqlSessionFactory
    //这里通过构造方法注入
    private SqlSessionFactory sqlSessionFactory;
    public userDaoImpl(SqlSessionFactory sqlsessionFactory) {
        this.sqlSessionFactory = sqlsessionFactory;
    }
    
    @Override
    public User findUserById(int id) throws Exception {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        User user = sqlSession.selectOne("test.findUserById",29);
        sqlSession.close();
        return user;
    }

    @Override
    public void insertUser(User user) throws Exception {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        sqlSession.insert("test.insertUser", user);
        sqlSession.commit();
        sqlSession.close();
    }

    @Override
    public void deleteUser(int id) throws Exception {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        sqlSession.insert("test.deleteUser", id);
        sqlSession.commit();
        sqlSession.close();
    }
    
}

3 新建测试类userDaoImplTest

package pers.czs.mybatis.first;

import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import pers.czs.mybatis.dao.userDao;
import pers.czs.mybatis.dao.userDaoImpl;

public class userDaoImplTest {
    
    @Test
    public void testFindUserByid() throws Exception {
        //Mybatis配置文件
        String resource = "SqlMapConfig.xml";
        //得到配置文件流
        InputStream inputStream = Resources.getResourceAsStream(resource);
        //创建会话工厂,传入配置文件信息
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        
        //创建userDao对象
        userDao dao = new userDaoImpl(sqlSessionFactory);
        
        //调用userDao的方法
        System.out.println(dao.findUserById(29));
    }
}

4 执行结果

技术图片

4 原始dao开发问题

dao接口实现类方法中存在大量模板方法,设想能否将这些代码提取出来,大大减轻程序员的工作量。

 

调用sqlsession方法时将statementid硬编码了

 

调用sqlsession方法时传入的变量,由于sqlsession方法使用泛型,即使变量类型传入错误,在编译阶段也不报错,不利于程序员开发。

 


mybatis结果映射与mybatis缓存初探学习记录(代码片段)

MyBatis高级结果映射(一对一、一对多、多对多的映射),延迟加载,查询缓存(一级缓存),二级缓存的学习记录;1、学习中所使用到的例子,数据库基础分析2、高级结果映射3、延迟加载4、... 查看详情

mybatis学习第4节--多参数传递

第一种方法使用索引一般不使用,不记录第二种方法使用注解接口List<Shop>getShopListByPageAno(@Param(value="offset")intoffset,@Param(value="pagesize")intpagesize);mapper<selectid="getShopListByPageAno"resultMap="simpleResultM 查看详情

mybatis学习记录

分三部分记录,MyBatis,MyBatisSpring和MybatisGenerator。这一片记录MyBatis的一些学习心得。基本概念SqlSession:创建查询使用的是SqlSession,叫做Session,实际上也是维护了一个数据库的连接,内部通过Connection对象连接数据库。SqlSessionFac... 查看详情

mybatis学习记录5mybatis的二级缓存

 主题  之前学习了一下MyBatis的一级缓存,主要涉及到BaseExecutor这个类.现在准备学习记录下MyBatis二级缓存. 配置二级缓存与初始化发生的事情首先二级缓存默认是不开启的,需要自己配置开启.如上图,需要在configuration里去... 查看详情

mybatis学习记录------3

一删除用户1映射文件<!--删除用户根据ID删除用户--><deleteid="deleteUser"parameterType="java.lang.Integer">deletefromuserwhereid=#{id}</delete>2测试@TestpublicvoiddeleteUserTest()throwsIOException{//Mybatis 查看详情

mybatis学习过程记录(代码片段)

一、Mybatis1、mybatis-config.xml<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEconfigurationPUBLIC"-//mybatis.org//DTDConfig3.0//EN""http://mybatis.org/dtd/myba 查看详情

mybatis学习记录------2

 一 单条记录查询上篇博客的例子便是单条记录查询二多条记录查询1在映射文件中加入如下sql查询,${}:表示拼接sql串,将接收到的参数不加任何修饰拼接在sql中,${value}:接收输入参数的内容,如果传入类型是简单类型,$... 查看详情

mybatis学习记录3mappermethod类

主题  之前学习了一下MapperProxy的生产过程,自定义Mapper类的对象是通过动态代理生产的,调用自定义方法的时候实际上是调用了MapperMethod的execute方法:mapperMethod.execute(sqlSession,args);所以想再简单学习记录下MapperMethod类 组成从... 查看详情

mybatis源码学习记录

1、mybatis源码分析相关文章(1)https://www.cnblogs.com/zhjh256/p/8512392.html2、mybatis设计模式相关文章(1)http://www.crazyant.net/2022.html?hmsr=toutiao.io&utm_medium=toutiao.io&am 查看详情

mybatis原理分析学习记录(代码片段)

以下个人学习笔记,仅供参考,欢迎指正。MyBatis是支持定制化SQL、存储过程以及高级映射的持久层框架,其主要就完成2件事情:封装JDBC操作利用反射打通Java类与SQL语句之间的相互转换MyBatis的主要设计目的就是让我们对执行SQL... 查看详情

mybatis学习记录6typehandler

主题  因为对MyBatis在JDBC数据和Java对象之间数据转化比较感兴趣,所以就记录并学习一下TypeHandler. 使用场景如上图所示,观察下接口方法就能明白.TypeHandler主要用于JDBC数据与Java对象数据之间转化,比如更新数据库的时候可以... 查看详情

mybatis学习记录------1

一认识mybatismybatis是一个优秀的数据持久层框架,在实体类和SQL语句之间建立映射关系,是一种半自动化的ORM(对象,关系映射)实现。其封装性要低于Hibernate,性能优越,并且小巧、简单易学,应用也越来越广泛。二搭建mybatis... 查看详情

mybatis学习-4

Category与Article双向一对多关联  (1)将CategoryDao进行实现 publicclassCategoryDaoImplextendsBaseDao<Category>implementsCategoryDao{ @OverridepublicbooleanaddCategory(Categorycategory){try{ 查看详情

mybatis-spring开发记录贴(新手)

 初学MyBatis-Spring,发个帖子记录一下自己的学习历程,先写个自己的编程步骤。1.先进行数据库设计。2.根据所设计的数据,写出相应的POJO,并写出setter和getter方法。3.编写Mapper接口,并写出其相应的xml文件。4.编写MyBatisConfig... 查看详情

mybatis-plus工具学习笔记---[基本概述,入门案例搭建,通用service接口使用](代码片段)

...查询总记录数4.2测试批量存储数据功能近期也是计划学习mybatis-plus,扩展知识;推荐官方文档食用学习–>https://baomidou.com/Mybatis-plus官方文档本次学习根据B站尚 查看详情

mybatis-plus工具学习笔记---[基本概述,入门案例搭建,通用service接口使用](代码片段)

...查询总记录数4.2测试批量存储数据功能近期也是计划学习mybatis-plus,扩展知识;推荐官方文档食用学习–>https://baomidou.com/Mybatis-plus官方文档本次学习根据B站尚 查看详情

mybatis学习过程记录(代码片段)

一、Mybatis1、mybatis-config.xml<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEconfigurationPUBLIC"-//mybatis.org//DTDConfig3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><!--外部引入db--><propertiesresourc... 查看详情

employeemapper.xml例子,学习佟刚老师的mybatis课程,记录下的employeemapper.xml,注释详细

<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.atguigu.mybatis.dao.Employ 查看详情