• 我的 MyBatis 实现的 Dao 层


      

         学了 Mybatis 之后,发现用 Mybatis 写 Dao层实在是简便多了,主要是在表的映射这块简单了很多。下面是我实现的使用 Mybatis 实现的简单的操作用户表的 Dao 层。

    使用 Mybatis 实现 DAO 层,一共有两种方式:

    1. 原始的 DAO 层的实现
    2. 使用 Mapper 代理方式【这里又分两种:直接配置 Mapper 代理;使用包扫描配置 Mapper 代理】

    两种方式都需要创建实体类,接口类;

    第一种方式需要

    • 创建接口的实现类,并且要继承 SqlSessionDaoSuppurt【用于获取 SqlSession 对象,用于执行CRUD】 ;
    • 需要在 SqlMapConfig.xml 文件中注册对应的 Mapper.xml 文件资源
    • 当然,DAO 层的实现类必须在 Spring 容器中配置 bean

    第二种方式需要遵守四个原则:

    • Mapper 接口中方法名 == XxxMappe.xml 文件的中每个 statement 的 id 名
    • 接口方法返回值类型要和 XxxMapper.xml 文件的中定义的每个 sql 的返回值类型 resultType 一致
    • 接口方法参数类型和 XxxMapper.xml 文件的入参类型 parameType 要一致
    • XxxMapper.xml 文件的 namespace 属性必须是对应接口类的全类名

    第二种方式 - 01:【直接配置 Mapper 代理的实现】

    • 需要在 applicationContext.xml 文件中添加 MapperFactoryBean 的配置,并且注入 SqlSessionFactory 以及需要被代理的对象

    (即之前的 Mapper接口类)

    下面是一个简单的配置:

    <!-- Mapper代理的方式开发方式一,配置Mapper代理对象 -->
    <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
        <!-- 配置Mapper接口 -->
        <property name="mapperInterface" value="com.msym.cloudnote.dao.UserDao" />
        <!-- 配置sqlSessionFactory -->
        <property name="sqlSessionFactory" ref="sqlSessionFactory" />
    </bean>

    如果没有在mybatis-config.xml 中写 <mappers> 标签指定 XxxMapper.xml 文件的话,或者没有 mybatis-config.xml 文件的话,也可以像如下配置:【其中 mapperLocations 指定的是 XxxMapper.xml 文件】

    <!-- 配置SqlSessionFactoryBean,用于Mapper的动态代理 -->
        <bean class="org.mybatis.spring.SqlSessionFactoryBean">
            <!-- 指定连接资源 -->
            <property name="dataSource" ref="dbpool" />
            <!-- 采用通配符的方式,指定映射文件-->
            <property name="mapperLocations" value="classpath:mapper/*.xml" />
        </bean>

    image

    这里可以指定 sqlMapConfig.xml 的路径,如果整合到 Spring的配置文件的话,就可以通过 mapperLocation,指定 Mapper 文件的位置。

    其中配置的 MapperFactoryBean 是属于 mybatis-spring 整合包。

    测试方法:

    public class UserMapperTest {
        private ApplicationContext context;
    
        @Before
        public void setUp() throws Exception {
            this.context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
        }
    
        @Test
        public void testQueryUserById() {
            // 根据接口,获取 Mapper 对象
            UserMapper userMapper = this.context.getBean(UserMapper.class);
            User user = userMapper.queryUserById(1);
            System.out.println(user);
        }
    }

    第二种方式 - 02:【采用包扫描设置 Mapper 代理的实现】

    • 需要在 applicationContext.xml 文件中添加 MapperScannerConfigurer 的配置,并注入 Mapper接口所在的包即可,不需要注入 sqlSessionFactory 了【扫描器会自动扫描基本包的及其子类下所有的类】
    <!-- Mapper代理的方式开发方式二,扫描包方式配置代理 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- 注入基本包,配置Mapper接口所在包 -->
        <property name="basePackage" value="com.msym.cloudnote.dao" />
    </bean>
    代理出来的 Mapper对象 id 就是接口类名,首字母小写。

    UserDAO接口文件:

    package com.msym.cloudnote.dao;
    
    import com.msym.cloudnote.entity.User;
    
    /**
     * 用于操作用户表
     * 
     * @author 码上猿梦 http://www.cnblogs.com/daimajun/
     */
    public interface UserDAO {
        /**
         * 根据名字查
         * @param name
         * @return
         */
        public User findUserByName(String name);
        /**
         * 增加用户,用于注册
         * @param user
         * @return
         */
        public int addUser(User user);
        
        /**
         * 根据用户Id,获取用户信息
         * @param userId
         * @return
         */
        public User findUserById(String userId);
        
        /**
         * 修改密码
         * @param user
         * @return
         */
        public int modifyPwd(User user);
    }

    对应的 UserMapper.xml 文件:

    <?xml version="1.0" encoding="UTF-8" ?>  
    <!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
    
    <mapper namespace="com.msym.cloudnote.dao.UserDAO">
        <!-- 修改密码 -->
        <update id="modifyPwd" parameterType="com.msym.cloudnote.entity.User">
            update cn_user
            set
                cn_user_password = #{ password }
            where
                cn_user_id = #{ id }
        </update>
        <!-- 根据Id查询用户信息 -->
        <select id="findUserById" parameterType="string"
                resultType="com.msym.cloudnote.entity.User">
                select
                    cn_user_id as id,
                    cn_user_name as name,
                    cn_user_password as password,
                    cn_user_token as token,
                    cn_user_nick as nick
                from
                    cn_user
                where
                    cn_user_id = #{ userId }
        </select>
        <!-- 根据用户名查询用户信息 -->    
        <select id="findUserByName" parameterType="string" 
                resultType="com.msym.cloudnote.entity.User">
            select
                cn_user_id as id,
                cn_user_name as name,
                cn_user_password as password,
                cn_user_token as token,
                cn_user_nick as nick
            from
                cn_user
            where
                cn_user_name = #{ name }
        </select>
        
        <!-- 用户注册 -->
        <insert id="addUser" parameterType="com.msym.cloudnote.entity.User">
            insert into cn_user(
                cn_user_id,
                cn_user_name,
                cn_user_password,
                cn_user_token,
                cn_user_nick
            ) values(
                #{ id },
                #{ name },
                #{ password },
                #{ token },
                #{ nick }            
            )
        </insert>
        
    </mapper>
  • 相关阅读:
    vue中使用router全局守卫实现页面拦截
    Java入门之Maven创建Web项目
    Java入门之Maven安装并集成IDE
    Java入门之IDE配置Tomcat
    Java入门之Tomcat运行
    Java入门之Tomcat安装及环境变量配置
    Java入门之IDE集成开发环境安装及配置
    Java入门之JDK安装及环境变量配置
    查看SQL Server中的锁表及解锁
    DES加密解密
  • 原文地址:https://www.cnblogs.com/daimajun/p/7106057.html
Copyright © 2020-2023  润新知