MyBatis映射器的两种方式实现增删改查

映射器是MyBatis中最重要,最复杂的组件,它由一个接口和对应的XML文件(或注解)组成。以下我们分别通过XML和注解两种方式实现增删改查。

首先是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="javastudy.UserMapper">
    <!-- 查询 -->
    <select id="selectUser" resultType="javastudy.User">
        select * from User where id=#{id}
    </select>

    <select id="selectAll" resultType="javastudy.User">
        select * from User
    </select>

    <insert id="addUser" parameterType="javastudy.User">
        insert into user(userName,userPwd) values (#{userName},#{userPwd})
    </insert>

    <update id="updateUser" parameterType="javastudy.User">
        update user set userName=#{userName},userPwd=#{userPwd} where id=#{id}
    </update>

    <delete id="deleteUser" parameterType="int">
        delete from user where id=#{id}
    </delete>
</mapper>

我们稍微讲解一下:
mapper元素中的属性namespace所对应的是一个接口的全限定名,于是MyBatis上下文就可以通过它找到对应的接口。
select元素表明这是一条查询语句,属性id标识了这条SQL,MyBatis在默认的 情况下提供自动映射,只要SQL返回的列名能和POJO对应起来即可。所以此时MyBatis就可以把SQL查询的结果通过自动映射的功能映射成为一个POJO。

注解实现映射器

除了XML方式定义映射器外,还可以采用注解的方式定义映射器,它只需要一个接口就可以通过MyBatis的注解来注入SQL,代码如下:

package javastudy;

import java.util.List;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

public interface UserMapper {
    @Select("select * from User where id=#{id}")
    public User selectUser(int id);
    @Select("select * from User")
    public List<User> selectAll();
    @Insert("insert into user (userName,userPwd) values (#{userName},#{userPwd})")
    public void addUser(User user);
    @Update("update user set userName=#{userName},userPwd=#{userPwd} where id=#{id}")
    public void updateUser(User user);
    @Delete("delete from user where id=#{id}")
    public void deleteUser(int id);

}

值得注意的是,这两种方法只能使用一种,如果在UserMapper.xml和UserMapper.java都实现了映射器的话,将会出错。
注解方式的测试类来测试注解的正误:

package Test;

import static org.junit.Assert.*;

import java.io.IOException;
import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import javastudy.User;
import javastudy.UserMapper;
import utility.MyBatisUtils;

public class MapperTest {

    @Test
    public void testSelectAll() throws IOException {
        SqlSession session=MyBatisUtils.openSession();
        UserMapper mapper=session.getMapper(UserMapper.class);
        List<User> list=mapper.selectAll();
        System.out.println(list);
        session.commit();
        session.close();
    }

    @Test
    public void testSelectUser() throws IOException {
        SqlSession session=MyBatisUtils.openSession();
        UserMapper mapper=session.getMapper(UserMapper.class);

        User user=mapper.selectUser(1);
        System.out.println(user);
        session.commit();
        session.close();
    }

    @Test
    public void testAddUser() throws IOException {
        SqlSession session=MyBatisUtils.openSession();
        UserMapper mapper=session.getMapper(UserMapper.class);
        User user=new User();
        user.setUserName("陈新");
        user.setUserPwd("555");
        mapper.addUser(user);
        session.commit();
        session.close();
    }

    @Test
    public void testDeleteUser() throws IOException {
        SqlSession session=MyBatisUtils.openSession();
        UserMapper mapper=session.getMapper(UserMapper.class);

        mapper.deleteUser(7);
        session.commit();
        session.close();
    }

    @Test
    public void testUpdateUser() throws IOException {
        SqlSession session=MyBatisUtils.openSession();
        UserMapper mapper=session.getMapper(UserMapper.class);
        User user2=new User();
        user2.setId(5);
        user2.setUserName("小山");
        user2.setUserPwd("999");
        mapper.updateUser(user2);
        session.commit();
        session.close();
    }
}

另外这两种方式在MyBatis基本配置文件中mybatis-cfg.xml的写法也不一样。
XML配置的写法:

    <mappers>
        <mapper resource="javastudy/userMapper.xml"/>
    </mappers>

注解的写法

    <mappers>
        <mapper class="javastudy.UserMapper"/>
    </mappers>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值