Mybatis实现DAO层开发(原始Dao开发方式和Mapper接口代理开发方式)

本文介绍了Mybatis实现DAO层的两种方式:传统开发方式和Mapper接口代理开发方式。传统方式涉及SqlSession、SqlSessionFactoryBuilder、SqlSessionFactory和SqlSession的使用,以及UserMapper.xml映射文件、UserDao接口及实现类的开发。而代理开发方式简化了流程,仅需定义DAO接口和映射文件,Mybatis通过JDK动态代理生成实现类。

Mybatis实现DAO层开发

使用Mybatis开发Dao,通常有两个方法,即原始Dao开发方式和Mapper接口代理开发方式。而现在主流的开发方式是接口代理开发方式,这种方式总体上更加简便。我们的课程讲解也主要以接口代理开发方式为主。

一 . Mybatis实现DAO的传统开发方式

传统方式开发DAO 的说明,需求如下:

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

1. SqlSession的使用分析

SqlSession中封装了对数据库的操作,如:查询、插入、更新、删除等。

通过SqlSessionFactory创建SqlSession,而SqlSessionFactory是通过SqlSessionFactoryBuilder进行创建。

2. SqlSessionFactoryBuilder

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

3.  SqlSessionFactory

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

4. SqlSession

SqlSession是一个面向用户的接口, sqlSession中定义了数据库操作方法。

每个线程都应该有它自己的SqlSession实例。SqlSession的实例不能共享使用,它也是线程不安全的。因此最佳的范围是请求或方法范围。绝对不能将SqlSession实例的引用放在一个类的静态字段或实例字段中。

打开一个 SqlSession;使用完毕就要关闭它。通常把这个关闭操作放到 finally 块中以确保每次都能执行关闭。如下:


SqlSession session = sqlSessionFactory.openSession();

try {
        // do work
} finally {
       session.close();
}

 

5. 开发UserMaaper.xml映射文件

在UserMapper.xml映射文件中,按照需求开发相关的配置,具体需求如下:

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

重新配置UserMapper.xml文件,配置如下:


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="test">

    <!--根据id查询-->
    <select id="findByUserId" parameterType="java.lang.Integer" resultType="com.itheima.domain.User">
        SELECT * FROM user WHERE id=#{id}
    </select>


    <!--模糊查询-->
    <select id="findUserByUsername" parameterType="java.lang.String" resultType="com.itheima.domain.User">
        SELECT * FROM  user WHERE  username LIKE '${value}'
    </select>

    <!--添加用户-->
    <insert id="saveUser" parameterType="com.itheima.domain.User">
        <selectKey keyColumn="id" keyProperty="id" resultType="java.lang.Integer" order="AFTER">
            SELECT LAST_INSERT_ID()
        </selectKey>
        INSERT INTO user(username,birthday,sex,address)VALUES(#{username},#{birthday},#{sex},#{address})
    </insert>
</mapper>

6. 开发UserDao接口及UserDaoImpl实现类

UserDao代码:


public interface UserDao {

    /**
     * 根据ID查找
     * @param id
     * @return
     */
    U
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值