MyBatis详解(2)--MyBatis初体验(基于注解)

需求缘起

其实上一节中我们使用的就是xml方式了,现在我们换一种方式,通过注解的方式来操作数据库。

本小节代码

mybatis-demo-article(2)

1.定义接口文件UserInfoMapper.java

在上一小节项目的基础上定义接口文件UserMapper.java,在这个类中我们写几个接口,对应上一节的几个功能。
在这里插入图片描述

package com.mybatis.demo.mapper;

import com.mybatis.demo.model.UserInfo;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;

/**
 * @auther kklu
 * @date 2019/10/11 19:01
 * @describe
 */

public interface UserInfoMapper {
    //根据 id 查询 user_info 表数据
    @Select("select * from user_info where id = #{id}")
    UserInfo selectUserInfoById(int id) throws Exception;

    //查询 user_info 表所有数据
    @Select("select * from user_info")
    List<UserInfo> selectUserInfoAll() throws Exception;

   //根据 id 查询 user_info 表数据
    @Select("select * from user_info where username like '%${value}%'")
    List<UserInfo> selectLikeUserName(String username) throws Exception;

    //向 user_info 表插入一条数据
    @Insert("insert into user_info(username,password) value(#{username},#{password})")
    void insertUserInfo(UserInfo userInfo) throws Exception;

    //根据 id 修改 user_info 表数据
    @Update("update user_info set username=#{username} where id=#{id}")
    void updateUserInfoById(UserInfo userInfo) throws Exception;

    //根据 id 删除 user_info 表数据
    @Delete("delete from user_info where id=#{id}")
    void deleteUserInfoById(int id) throws Exception;
}


2.在配置文件mybatis-config.xml中注册UserMapper接口

配置文件mybatis-config.xml 在上一节中已经说明,这里需要做些修改,

    <mappers>
        <!--基于注解的方式,接口UserInfoMapper的包路径-->
        <mapper class="com.mybatis.demo.mapper.UserInfoMapper"/>
        <!--基于xml的方式,mapper.xml文件的路径-->
        <!--<mapper resource="mapper/UserInfoMapper.xml"/>-->
    </mappers>

3.删除UserInfoMapper.xml文件

为了不影响学习,把上一节中的UserInfoMapper.xml 文件删除。这个文件的功能已经用注解的方式替代了。

4. 测试

测试也需要做些修改

package com.mybatis.demo.mapper;

import com.mybatis.demo.model.UserInfo;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

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

/**
 * @auther kklu
 * @date 2019/9/29 15:49
 * @describe
 */

@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class UserInfoMapperTest {
    private static SqlSessionFactory sqlSessionFactory;
    private static SqlSession sqlSession ;
    private static UserInfoMapper userInfoMapper;
    @BeforeClass
    public static void init() {
        try {
            //将工具类读入 reader
            Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
            //创建 SqlSessionFactory 对象,该对象包含了mybatis-config.xml相关配置信息
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
            sqlSession = sqlSessionFactory.openSession();
            userInfoMapper = sqlSession.getMapper(UserInfoMapper.class);
            reader.close();
        } catch (IOException ignore) {
            ignore.printStackTrace();
        }
    }


    //根据id查询user表数据
    @Test
    public void testSelectUserInfoById() {
        try {
            UserInfo userInfo = userInfoMapper.selectUserInfoById(1);
            log.info("userInfo={}", userInfo);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //不要忘记关闭 sqlSession
            sqlSession.close();
        }
    }

    //查询所有user表所有数据
    @Test
    public void testSelectUserInfoAll() {
        try {
            List<UserInfo> listUser = userInfoMapper.selectUserInfoAll();
            for (UserInfo userInfo : listUser) {
                log.info("userInfo={}", userInfo);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //不要忘记关闭 sqlSession
            sqlSession.close();
        }
    }

    //模糊查询:根据 user 表的username字段
    @Test
    public void testSelectLikeUserName() {
        try {
            List<UserInfo> listUser = userInfoMapper.selectLikeUserName("J");
            for (UserInfo userInfo : listUser) {
                log.info("userInfo={}", userInfo);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //不要忘记关闭 sqlSession
            sqlSession.close();
        }
    }

    //向 user 表中插入一条数据
    @Test
    public void testInsertUser() {
        try {
            UserInfo user = new UserInfo();
            user.setUsername("黎明");
            user.setPassword("123456");
            userInfoMapper.insertUserInfo(user);
            //提交插入的数据
            sqlSession.commit();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //不要忘记关闭 sqlSession
            sqlSession.close();
        }
    }

    //根据 id 更新 user 表的数据
    @Test
    public void testUpdateUserById() {
        try {
            //如果设置的 id不存在,那么数据库没有数据更改
            UserInfo user = new UserInfo();
            user.setId(7L);
            user.setUsername("Jack");
            userInfoMapper.updateUserInfoById(user);
            sqlSession.commit();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //不要忘记关闭 sqlSession
            sqlSession.close();
        }
    }

    //根据 id 删除 user 表的数据
    @Test
    public void testDeleteUserInfoById() {
        try {
            userInfoMapper.deleteUserInfoById(8);
            sqlSession.commit();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //不要忘记关闭 sqlSession
            sqlSession.close();
        }
    }
}

不出意外,测试的效果跟上一节是一致的。

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值