第四天实训:Mybatis的简单应用

本文介绍了如何使用MyBatis框架连接数据库并进行基本的增删改查操作。通过实例演示了配置文件设置、Mapper文件定义及DAO层实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天学习了Mybatis的使用, MyBatis是一个实现了JPA( Java持久化接口 )规范的用来连接数据库并对其进行增删改查操作的开源框架(连接数据库的框架,与JDBC相似)
详细的Mybatis的资料pick以下链接 https://blog.youkuaiyun.com/a909301740/article/details/78698682

新建一个Mybatis项目,在WebContent下WEB_INF的lib文件夹下导入如图所示的两个jar包:

在src中新建一个mybatis-config.xml文件,这是Mybatis项目的配置文件,在environment(环境)标签下 完成了与mysql的数据连接:
<environment id="developmet">
                 <transactionManager type="JDBC"/>
                    <dataSource type="POOLED">  //数据源采用连接池的方式
                //配置文件中的键对应的值
                           <property name="driver"  value="com.mysql.cj.jdbc.Driver" />
                          <property name="url"  value="jdbc: mysql://localhost:3306/student?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=false"/ >
                          <property name="username" value="root"  />
                          <property name="password"  value="123456" />
                    </dataSource>
          </environment>

由于上面的代码格式被笔记编辑过无法显示代码的url,url的value值应该如下编写:
其中&amp;为逻辑运算符,充当and的角色

新建一个User.xml文件,用于实现数据库增删查改分页等方法。在mybatis-config.xml中加入<mappers>,引入Mapper映射文件。
        < mappers >
            < mapper resource = "com/icss/mapping/user.xml" />
         </ mappers >
<mappers>用来在mybatis初始化的时候,告诉mybatis需要引入哪些Mapper映射文件。

定义完增删查改的部分后,准备进入dao层的编写。这里先讲一下如何完成从xml到class函数的实现(表达或许不当,可以借助代码进行理解),导入相对应的包便可。
public void testFindUserById() {
            //将主配置文件进行解析
           String config = "mybatis-config.xml" ;
            //用反射机制
           InputStream is = testMybatis. class .getClassLoader().getResourceAsStream( config );//或使用Reader read进行读取也是可以的
            //得到工厂对象
           SqlSessionFactory factory = new SqlSessionFactoryBuilder().build( is );
            //从工厂中拿到我们链接在 sqlsession 的对象
           SqlSession sqlsession = factory .openSession();
           Object obj = sqlsession .selectOne( "getUserById" , 1);
           
           System. out .println( obj );
           
     }
如果每一个函数都需要这么一部分代码的话,不但会增加代码的编写量,也会使代码的可读性降低。
所以我们在这里用static的方法将这段代码封装起来。首先我们新建一个SQLSessionUtil.java,在下面编写以下代码
package com.icss.util;

import java.io.IOException;
import java.io.Reader;

import org.apache.ibatis.io.*;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class SQLSessionUtil {
    private static SqlSessionFactory factory = null;
    static Reader read = null;
    
    //静态块,SQLSessionUtil初始化先执行静态块
    static {
        String config ="mybatis-config.xml";
        
        try {
            read = Resources.getResourceAsReader(config);
            
            
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    private static SqlSessionFactory getSqlSessionFactory(){
        if(factory==null) {
            factory = new SqlSessionFactoryBuilder().build(read);
        }
        
        return factory;
    }
    
    public static SqlSession getSqlSession() {
        return getSqlSessionFactory().openSession();
    }
}

代码中使用了静态块,当整个SQLSessionUtil'初始化时,先执行静态块的代码,对主配置文件进行解析,用反射机制存入Reader read中。

getSqlSessionFactory()中先对factory进行判断,若为空则new一个factory。最后在getSqlSession()。

至于使用static的原因是 ,在类被加载的时候成员变量即被初始化,与类关联,只要类存在,static变量就存在。与非static对象不同的是,不需要依赖对象,不需要与对象进行绑定,不需要对象创建变量。具体static的作用可以参考下面的链接进行详读。
关于static和非static变量的区别:https://blog.youkuaiyun.com/a907691592/article/details/51668440

今天就到此结束了,晚安


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值