自家的 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>

图片 1

此间可以指定 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对象 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>
网站地图xml地图