Javaweb - SqlSessionFactory工具类

SqlSessionFactory工具类

代码优化

//2.1获取SqlSessionFactory对象
String resouce = "mybatis.config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

问题

  1. 代码重复:工具类
  2. SqlSessionFactory 工厂只创建一次,不要重复创建

编写代码

com.taotao.util.SqlSessionfactoryUtils

package com.taotao.util;

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

import java.io.IOException;
import java.io.InputStream;

/**
 * create by 刘鸿涛
 * 2022/3/28 9:54
 */
@SuppressWarnings({"all"})
public class SqlSessionfactoryUtils {
    private static SqlSessionFactory sqlSessionFactory;
    //静态代码块会随着类的加载而自动执行,且只执行一次
    static{
        String resource = "mybatis.config.xml";
        InputStream inputStream = null;
        try {
            inputStream = Resources.getResourceAsStream(resource);
        } catch (IOException e) {
            e.printStackTrace();
        }
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    }

    public static SqlSessionFactory getSqlSessionFactory(){
        return sqlSessionFactory;
    }
}

试用SqlSessionFactory工具类

RegisterServlet.java

package com.taotao.web;

import com.taotao.mapper.UserMapper;
import com.taotao.pojo.User;
import com.taotao.util.SqlSessionfactoryUtils;
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 javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;

/**
 * create by 刘鸿涛
 * 2022/3/26 23:04
 */
@SuppressWarnings({"all"})
@WebServlet(urlPatterns = "/registerServlet")
public class RegisterServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.接收用户数据
        String username = req.getParameter("username");
        String password = req.getParameter("password");

        //封装用户对象
        User user = new User();
        user.setUsername(username);
        user.setPassword(password);

        //2.调用mapper 根据用户名查询用户对象
        //2.1 获取sqlSessionFactory对象
//        String resource = "mybatis.config.xml";
//        InputStream inputStream = Resources.getResourceAsStream(resource);
//        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSessionFactory sqlSessionFactory = SqlSessionfactoryUtils.getSqlSessionFactory();

        //2.2获取SqlSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //2.3获取Mapper
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

        //2.4调用方法
        User u = userMapper.selectByUsername(username);
        System.out.println(user);
        //设置utf-8编码格式以及识别html标签
        resp.setContentType("text/html;charset=utf-8");

        //3.判断用户对象是否为null
        if (u == null){
            //用户名不存在,添加用户
            userMapper.add(user);
            //提交事务
            sqlSession.commit();

            //释放资源
            sqlSession.close();
            resp.getWriter().write("create user successful!!");
        }else {
            //用户名存在,给出提示信息
            resp.getWriter().write("can't create the user,the user is exists");
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

而sqlSession对象则不能封装,因为他表示用户每次连接服务器所需要的对象,而我们的工具类一般是static静态代码块,所以不封装sqlSession对象

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鬼鬼骑士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值