学习MyBatis必知必会(5)~了解myBatis的作用域和生命周期并抽取工具类MyBatisUtil、mybatis执行增删改查操作

简介: 学习MyBatis必知必会(5)~了解myBatis的作用域和生命周期并抽取工具类MyBatisUtil、mybatis执行增删改查操作

一、了解myBatis的作用域和生命周期[错误的使用会导致非常严重的并发问题]

(1)SqlSessionFactoryBuilder

[ 作用:仅仅是用来创建SqlSessionFactory,作用域:方法作用域(局部变量) ]

(2)SqlSessionFactory(类似连接池)

[ 生命周期:一旦被创建就应该在应用的运行期间一直存在,作用域:应用作用域变量(使 用单例模式/静态单例模式) ]

(3)SqlSession(类似连接对象)

[ 特点:非线程安全,不能共享,作用域:请求或方法作用域(局部变量) ]


二、抽取MyBatis工具类[用来创建Sqlsession]

✿ 在理解myBatis的作用域和生命周期基础上,抽取MyBatis工具类:

public class MyBatisUtil {
  //创建一个sqlSessionFactory对象【应用对象(静态单例模式)】
  private static SqlSessionFactory factory = null;
  static {
    try {
      InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
      factory = new SqlSessionFactoryBuilder().build(in);
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
  //返回sqlSession对象
  public static SqlSession getSession() {
    return factory.openSession();
  }
}
  • 通过factory.openSession() 默认是不提交事务的方式,当修改了对象的属性之后,发现数据库的表的记录的列值没有改变----因为默认是不提交事务,需要手动提交事务
//手动提交事务
session.commit();


三、mybatis执行增删改查操作:

1、mybatis的映射文件[UserMapper.xml] 编写增删改查sql

【 把sql存放到insert|update|delete|select 元素中去】

<mapper namespace="com.shan.hello.UserMapper">
      <!-- 保存操作 -->
    <insert id="insert">
      insert into t_user (name, salary) values (#{name}, #{salary});
    </insert>
    <!-- 保存操作,并设置返回自动生成的主键【useGeneratedKeys、keyProperty】
      useGeneratedKeys:是否需要返回自动生成的主键     keyProperty:把自动生成的主键设置到对象的哪个属性(OID)
     -->
    <insert id="keyInsert" useGeneratedKeys="true" keyProperty="id">
      insert into t_user (name, salary) values (#{name}, #{salary});
    </insert>
    <!-- 删除操作 -->
    <delete id="delete">
      delete from t_user where id = #{id};
    </delete>
    <!-- 更改操作 -->
    <update id="update">
      update t_user set name = #{name}, salary = #{salary} where id = #{aid}; 
    </update>
      <!-- 查询操作 -->
    <select id="get" parameterType="java.lang.Long" resultType="com.shan.hello.User">
      select * from t_user where id = #{id}
    </select>
    <select id="getList" parameterType="java.lang.Long" resultType="com.shan.hello.User">
      select * from t_user;
    </select>
</mapper>


2、测试mybatis的增删改查:

/* 测试查询 */
  @Test
  public void testGetList3() {
    //jdk7try-finally结构的另外一种写法,将关闭资源的finally部分内容放大try后边的括号内容
    try(SqlSession session = MyBatisUtil.getSession();){
      //4、进行数据库操作(CRUD)
      User user = session.selectOne("com.shan.hello.UserMapper.get", 2L);
    }
  }
  /* 测试更改 */
  @Test
  public void testUpdate() {
    User user = new User();
    user.setId(4L);
    user.setName("好贱");
    user.setSalary(new BigDecimal(100));
    //jdk7try-finally结构的另外一种写法,将关闭资源的finally部分内容放大try后边的括号内容
    try(SqlSession session = MyBatisUtil.getSession();){
      //4、进行数据库操作(CRUD)
      int rows = session.update("com.shan.hello.UserMapper.update", user);
      session.commit();
    }
  }
  /* 测试删除 */
  @Test
  public void testDelete() {
    //jdk7try-finally结构的另外一种写法,将关闭资源的finally部分内容放大try后边的括号内容
    try(SqlSession session = MyBatisUtil.getSession();){
      //4、进行数据库操作(CRUD)
      int rows = session.delete("com.shan.hello.UserMapper.delete", 4L);
      session.commit();
    }
  }
  /* 测试保存 */
  @Test
  public void testInsert() {
    User user = new User();
    user.setName("就是贱");
    user.setSalary(new BigDecimal(1));
    //jdk7try-finally结构的另外一种写法,将关闭资源的finally部分内容放大try后边的括号内容
    try(SqlSession session = MyBatisUtil.getSession();){
      //4、进行数据库操作(CRUD)
      int rows = session.insert("com.shan.hello.UserMapper.insert", user);
      session.commit();
      System.out.println(user);
    }
  }
  /* 测试保存(获取自动生成的主键) */
  @Test
  public void testKeyInsert() {
    User user = new User();
    user.setName("贱");
    user.setSalary(new BigDecimal(1));
    //jdk7try-finally结构的另外一种写法,将关闭资源的finally部分内容放大try后边的括号内容
    try(SqlSession session = MyBatisUtil.getSession();){
      //4、进行数据库操作(CRUD)
      int rows = session.insert("com.shan.hello.UserMapper.keyInsert", user);
      session.commit();
      System.out.println(user);
    }
  }


✿ 获取主键的作用

---注册时,一次性填写过多信息,不友好,分成两次填写呗【获取主键,将其传递给第二个填写注册信息界面

目录
相关文章
|
8月前
|
XML Java 数据库连接
二、搭建MyBatis采用xml方式,验证CRUD(增删改查操作)
二、搭建MyBatis采用xml方式,验证CRUD(增删改查操作)
260 21
|
8月前
|
人工智能 Java 数据库连接
MyBatis Plus 使用 Service 接口进行增删改查
本文介绍了基于 MyBatis-Plus 的数据库操作流程,包括配置、实体类、Service 层及 Mapper 层的创建。通过在 `application.yml` 中配置 SQL 日志打印,确保调试便利。示例中新建了 `UserTableEntity` 实体类映射 `sys_user` 表,并构建了 `UserService` 和 `UserServiceImpl` 处理业务逻辑,同时定义了 `UserTableMapper` 进行数据交互。测试部分展示了查询、插入、删除和更新的操作方法及输出结果,帮助开发者快速上手 MyBatis-Plus 数据持久化框架。
610 0
|
10月前
|
缓存 NoSQL Java
Mybatis学习:Mybatis缓存配置
MyBatis缓存配置包括一级缓存(事务级)、二级缓存(应用级)和三级缓存(如Redis,跨JVM)。一级缓存自动启用,二级缓存需在`mybatis-config.xml`中开启并配置映射文件或注解。集成Redis缓存时,需添加依赖、配置Redis参数并在映射文件中指定缓存类型。适用于查询为主的场景,减少增删改操作,适合单表操作且表间关联较少的业务。
197 6
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
文章介绍了MyBatis的简单增删改查操作,包括创建数据表、实体类、配置文件、Mapper接口及其XML文件,并解释了`#{}`预编译参数和`@Param`注解的使用。同时,还涵盖了resultType与resultMap的区别,并提供了完整的代码实例和测试用例。
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
2645 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
Java 关系型数据库 数据库连接
mybatis-plus学习
MyBatis-Plus ,MyBatis 最佳搭档,只做增强不做改变,为简化开发、提高效率而生。
173 5
|
SQL XML Java
mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql/insert/delete/update/select)(增删改查)用法
当然,这些仅是MyBatis功能的初步介绍。MyBatis还提供了高级特性,如动态SQL、类型处理器、插件等,可以进一步提供对数据库交互的强大支持和灵活性。希望上述内容对您理解MyBatis的基本操作有所帮助。在实际使用中,您可能还需要根据具体的业务要求调整和优化SQL语句和配置。
240 1
|
druid Java 数据库连接
SpringBoot项目整合MybatisPlus持久层框架+Druid数据库连接池,以及实现增删改查功能
SpringBoot项目整合MybatisPlus和Druid数据库连接池,实现基本的增删改查功能。
1347 0
|
SQL Java 数据库连接
后端框架的学习----mybatis框架(5、分页)
这篇文章介绍了如何在MyBatis框架中实现分页功能,包括使用SQL的`limit`语句进行分页和利用MyBatis的`RowBounds`对象进行分页的方法。
|
SQL Java 数据库连接
后端框架的学习----mybatis框架(7、使用注解开发)
这篇文章讲述了如何使用MyBatis框架的注解方式进行开发,包括在接口上使用注解定义SQL语句,并通过动态代理实现对数据库的增删改查操作,同时强调了接口需要在核心配置文件中注册绑定。