SqlSessionFactory工具类
代码优化
//2.1获取SqlSessionFactory对象
String resouce = "mybatis.config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
问题
- 代码重复:工具类
- 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对象