MyBatis快速入门第三讲——dao层开发方法

本文介绍了MyBatis中两种DAO层开发方式:原始DAO开发和Mapper动态代理开发。重点讲解了Mapper动态代理的开发规范,包括接口、映射文件、加载映射文件和测试程序的编写,旨在解决原始开发方式带来的问题。
摘要由CSDN通过智能技术生成

在实际开发中,我们总归是要开发dao层的,使用MyBatis开发dao层,通常有两个方式,即原始dao开发方式和Mapper接口开发方式。在本文中我会使用MyBatis这个框架开发dao层来一一实现以下功能:

  1. 根据用户id查询用户信息;
  2. 根据用户名称模糊查询用户信息列表;
  3. 添加用户信息。

温馨提示:本文案例代码的编写是建立在前文《MyBatis快速入门第二讲——MyBatis的快速入门》案例基础之上的!

MyBatis常用API的使用范围

在使用MyBatis这个框架开发dao层之前,你应该知道一下MyBatis常用的API。

SqlSessionFactoryBuilder的使用范围

SqlSessionFactoryBuilder用于创建SqlSessionFactory,SqlSessionFactory一旦创建完成就不需要SqlSessionFactoryBuilder了,因为SqlSession是通过SqlSessionFactory生产的,所以可以将SqlSessionFactoryBuilder当成一个工具类使用,最佳使用范围是方法范围(即方法体内局部变量)。

SqlSessionFactory的使用范围

SqlSessionFactory是一个接口,接口中定义了openSession的不同重载方法,SqlSessionFactory的最佳使用范围是整个应用运行期间,一旦创建后可以重复使用,通常以单例模式管理SqlSessionFactory。

SqlSession的使用范围

SqlSession中封装了对数据库的操作,如查询、插入、更新、删除等。通过SqlSessionFactory创建SqlSession,而SqlSessionFactory是通过SqlSessionFactoryBuilder进行创建的。
SqlSession是一个面向程序员的接口,SqlSession中定义了一些数据库操作方法,所以SqlSession作用是操作数据库,并且SqlSession对象要存储数据库连接、事务和一级缓存结构等。
每个线程都应该有它自己的SqlSession实例。SqlSession的实例不能共享使用,它是线程不安全的(多线程访问系统,当多线程同时使用一个SqlSession对象时会造成数据冲突问题)。由于SqlSession对象是线程不安全的,因此它的最佳使用范围是请求或方法范围(也可说为SqlSession的最佳使用场合是在方法体内作为局部变量来使用),绝对不能将SqlSession实例的引用放在一个类的静态字段或实例字段中。
打开一个SqlSession,记得使用完毕就要关闭它。通常会把这个关闭操作放到finally代码块中以确保每次都能执行该关闭操作。

SqlSession session = sqlSessionFactory.openSession();
try {
   
	// do work
} finally {
   
 	session.close();
}

原始dao开发方式

原始dao开发方式需要程序员自己编写dao层接口以及其实现类。首先,我们要在工程的src目录下创建一个com.meimeixia.mybatis.dao包,并在该包下编写一个UserDao接口。

package com.meimeixia.mybatis.dao;

import java.util.List;

import com.meimeixia.mybatis.pojo.User;

/**
 * 用户信息持久化接口
 * @author liayun
 *
 */
public interface UserDao {
   

	/**
	 * 根据用户ID查询用户信息
	 * @param id
	 * @return
	 */
	User getUserById(Integer id);
	
	/**
	 * 根据用户名查找用户列表
	 * @param userName
	 * @return
	 */
	List<User> getUserByUserName(String userName);
	
	/**
	 * 添加用户
	 * @param user
	 */
	void insertUser(User user);

}

然后,再在src目录下创建一个com.meimeixia.mybatis.dao.impl包,在该包下编写以上UserDao接口的一个实现类(即UserDaoImpl.java)。

package com.meimeixia.mybatis.dao.impl;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.meimeixia.mybatis.dao.UserDao;
import com.meimeixia.mybatis.pojo.User;
import com.meimeixia.mybatis.utils.SqlSessionFactoryUtils;

/**
 * 用户信息持久化实现
 * @author liayun
 *
 */
public class UserDaoImpl implements UserDao {
   

	@Override
	public User getUserById(Integer id) {
   
		SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
		User user = sqlSession.selectOne("user.getUserById", id);
		sqlSession.close();
		return user;
	}

	@Override
	public List<User> getUserByUserName(String userName) {
   
		SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
		List<User> list = sqlSession.selectList("user.getUserByUserName", userName);
		sqlSession.close();
		return list;
	}

	@Override
	public void insertUser(User user) {
   
		SqlSession sqlSession = SqlSessionFactoryUtils
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

李阿昀

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

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

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

打赏作者

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

抵扣说明:

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

余额充值