mybatis使用过程中的问题

2025-10-31 09:13:03

1、1 原生态的jdbc代码

public static void main(String[] args) {

Connection connection = null;

PreparedStatement preparedStatement = null;

ResultSet resultSet = null;

try {

//1、加载数据库驱动

Class.forName("com.mysql.jdbc.Driver");

//2、通过驱动管理类获取数据库链接

connection =  DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8", "root", "root");

//3、定义sql语句 ?表示占位符

String sql = "select * from user where username = ?";

//4、获取预处理statement

preparedStatement = connection.prepareStatement(sql);

//5、设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值

preparedStatement.setString(1, "王五");

//6、向数据库发出sql执行查询,查询出结果集

resultSet =  preparedStatement.executeQuery();

mybatis使用过程中的问题

2、//7、遍历查询结果集

while(resultSet.next()){

User user

System.out.println(resultSet.getString("id")+"  "+resultSet.getString("username"));

}

} catch (Exception e) {

e.printStackTrace();

}finally{

//8、释放资源

if(resultSet!=null){

try {

resultSet.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

if(preparedStatement!=null){

try {

preparedStatement.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

if(connection!=null){

try {

connection.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

mybatis使用过程中的问题

3、1 问题总结

在创建连接时,存在硬编码

配置文件(全局配置文件)

在执行statement时存在硬编码

配置文件(映射文件)

频繁的开启和关闭数据库连接,会造成数据库性能下降。

数据库连接池(全局配置文件)

mybatis使用过程中的问题

1、public class UserDaoImpl implements UserDao {

// 依赖注入

private SqlSessionFactory sqlSessionFactory;

public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {

this.sqlSessionFactory = sqlSessionFactory;

}

@Override

public User findUserById(int id) throws Exception {

// 创建SqlSession

SqlSession sqlSession = sqlSessionFactory.openSession();

mybatis使用过程中的问题

2、// 调用SqlSession的增删改查方法

// 第一个参数:表示statement的唯一标示

User user = sqlSession.selectOne("test.findUserById", id);

System.out.println(user);

// 关闭资源

sqlSession.close();

return sqlSession.selectOne("test.findUserById", 1);

}

@Override

public List<User> findUsersByName(String name) {

// 创建SqlSession

SqlSession sqlSession = sqlSessionFactory.openSession();

// 调用SqlSession的增删改查方法

// 第一个参数:表示statement的唯一标示

List<User> list = sqlSession.selectOne("test.findUsersByName", name);

System.out.println(list);

// 关闭资源

sqlSession.close();

return list;

}

@Override

public void insertUser(User user) {

// 创建SqlSession

SqlSession sqlSession = sqlSessionFactory.openSession();

// 调用SqlSession的增删改查方法

// 第一个参数:表示statement的唯一标示

sqlSession.insert("test.insertUser", user);

System.out.println(user.getId());

// 提交事务

sqlSession.commit();

// 关闭资源

sqlSession.close();

}

}

mybatis使用过程中的问题

3、SqlSessionFactory,它的生命周期,应该是应用范围,全局范围只有一个工厂,使用单例模式来实现这个功能。与spring集成之后,由spring来对其进行单例管理。

mybatis使用过程中的问题

4、SqlSession,它内部含有一块数据区域,存在线程不安全的问题,所以应该将sqlsession声明到方法内部。

mybatis使用过程中的问题

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
相关推荐
  • 阅读量:127
  • 阅读量:52
  • 阅读量:154
  • 阅读量:150
  • 阅读量:53
  • 猜你喜欢