MyBatis(6)MyBatis Mapper代理

以下程序是在《 MyBatis(4)MyBatis入门程序 》 的基础上修改而来的。如果你没有从前面博客看过来,可以去《 MyBatis(4)MyBatis入门程序 》 中下载代码然后对照修改即可。

mapper namespace属性

mapper元素中的namespace属性在DAO开发中是为了程序之间的隔离,方便程序的管理。如果:
1、Mapper文件的名称与DAO接口的名称相同;
2、namespace的值与DAO接口的权限定类名相同;
3、select、update、delete、insert等语句的statement id与DAO接口中对应的方法名相同
则,可以采用Mapper代理的方法。

需求分析

对数据库中的用户表进行按ID查询、按用户名模糊查询、插入新用户、按ID删除用户、更新指定用户信息。

需求设计

DAO接口

public interface UserDao {
    public UserPojo selectUserByID (int id) throws Exception;

    public List<UserPojo> selectUserByName (String name) throws Exception;

    public int insertUser (UserPojo user) throws Exception;

    public void delUserByID (int id) throws Exception;

    public void updateUser (UserPojo user) throws Exception;
}

Mapper文件

新建UserDao.xml(与DAO接口的名称UserDao相同 )映射文件,并且namespace的名称与UserDao接口的权限定类名相同

<?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="indi.latch.mybatis.dao.UserDao"></mapper>

根据ID查询用户信息(statement id与对应的方法名相同)

<!--根据ID查询用户信息-->
<select id="selectUserByID" parameterType="int" resultType="indi.latch.mybatis.pojo.UserPojo">
    SELECT * FROM test.user WHERE id=#{id};
</select>

根据用户名查询用户信息(statement id与对应的方法名相同)

<!--根据名称模糊查询用户信息-->
<select id="selectUserByName" parameterType="String" resultType="indi.latch.mybatis.pojo.UserPojo">
    SELECT * FROM test.user WHERE name LIKE '%${value}%'
</select>

新增加用户

<!--新增加用户-->
<insert id="insertUser" parameterType="indi.latch.mybatis.pojo.UserPojo">
  <selectKey keyProperty="id" resultType="int" order="AFTER">
    SELECT LAST_INSERT_ID()
  </selectKey>

  INSERT INTO `test`.`user`
  (
    `name`,
    `pass`,
    `sex`,
    `address`
  )
  VALUES
  (
    #{name},
    #{pass},
    #{sex},
    #{address}
  )
</insert>

删除用户

<delete id="delUserByID" parameterType="int">
    DELETE FROM test.user WHERE id = #{id};
</delete>

更新用户

<update id="updateUser" parameterType="indi.latch.mybatis.pojo.UserPojo">
    UPDATE test.user SET name = #{name}, pass = #{pass}, sex=#{sex}, address=#{address} WHERE id = #{id};
</update>

测试

@Test
public void testSelectUser () throws Exception {
    SqlSession sqlSession = sqlSessionFactory.openSession();
    UserDao userDao = sqlSession.getMapper(UserDao.class);
    System.out.println(userDao.selectUser());

    sqlSession.close();
}

@Test
public void testSelectUserByID () throws Exception {
    SqlSession sqlSession = sqlSessionFactory.openSession();
    UserDao userDao = sqlSession.getMapper(UserDao.class);
    System.out.println(userDao.selectUserByID(1));

    sqlSession.close();
}

@Test
public void testSelectUserByName () throws Exception {
    SqlSession sqlSession = sqlSessionFactory.openSession();
    UserDao userDao = sqlSession.getMapper(UserDao.class);
    System.out.println(userDao.selectUserByName("张"));

    sqlSession.close();
}

@Test
public void testInsertUser () throws Exception {
    UserPojo user = new UserPojo();
    user.setName("张三龙");
    user.setPass("Zhang Sanlong");
    user.setSex(0);
    user.setAddress("上海市 静安区");

    SqlSession sqlSession = sqlSessionFactory.openSession();
    UserDao userDao = sqlSession.getMapper(UserDao.class);
    userDao.insertUser(user);
    sqlSession.commit();

    System.out.println(user.getId());

    sqlSession.close();
}

@Test
public void testUpdateUser () throws Exception {
    SqlSession sqlSession = sqlSessionFactory.openSession();
    UserDao userDao = sqlSession.getMapper(UserDao.class);

    UserPojo user = new UserPojo();
    user.setId(6);  //insert方法返回的ID
    user.setName("张三龙");
    user.setPass("Zhang Sanlong");
    user.setSex(1);
    user.setAddress("上海市 静安区");
    userDao.updateUser(user);
    sqlSession.commit();

    sqlSession.close();
}

@Test
public void testDeleteUser () throws Exception {
    SqlSession sqlSession = sqlSessionFactory.openSession();
    UserDao userDao = sqlSession.getMapper(UserDao.class);

    userDao.delUserByID(6);  //insert方法的ID
    sqlSession.commit();
    sqlSession.close();
}

代码

  1. git@code.csdn.net:xl890727/mybatisdemo.git
  2. https://code.csdn.net/xl890727/mybatisdemo.git
    中的mapper分支
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值