MyBatis学习笔记(三):CRUD

三、使用 MyBatis 完成 CRUD

JDBC 代码中占位符采用的是 ?,在 MyBatis 中是 #{ }

3.1 insert(Create)

  • Mapper 中使用 #{ } 占位,不将 sql 写死

    <?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="org.mybatis.example.BlogMapper">
        <insert id="insertStu">
            insert into t_student(sno, sname, ssex)
            VALUES (null, #{sname}, #{ssex});
        </insert>
    </mapper>
    
  • 使用 Map 集合,动态传参。Mapper 的 #{ } 中需要写 map 集合中的 key(底层调用了 map.get(key))

    public class StuMapperTest {
        @Test
        public void testInsert() {
            Map<String, Object> map = new HashMap<>();
            map.put("sname", "mike");
            map.put("ssex", "man");
    
            SqlSession sqlSession = SqlSessionUtil.openSession();
            sqlSession.insert("insertStu", map);
            sqlSession.commit();
            sqlSession.close();
        }
    }
    
  • 也可以使用 bean 类完成传参,将 Mapper 的 #{ } 中修改为属性名即可(底层调用了 bean 类的 get 方法,严格来说:#{ } 中传的参数是 get 方法名去掉 get,剩下的全小写)

3.2 delete(Delete)

  • StuMapper.xml

    <delete id="deleteStu">
    	delete from t_student where sno = #{sno};
    </delete>
    
  • 测试删除方法

    @Test
    public void testDelete() {
        SqlSession sqlSession = SqlSessionUtil.openSession();
        sqlSession.delete("deleteStu", 11);
        sqlSession.commit();
        sqlSession.close();
    }
    

3.3 update(Update)

  • StuMapper.xml

    <update id="updateStu">
        update t_student set sno = #{sno}, sname = #{sname}, ssex = #{ssex} where sno = #{sno};
    </update>
    
  • 测试修改方法

    @Test
    public void testUpdate() {
        SqlSession sqlSession = SqlSessionUtil.openSession();
        Student student = new Student(10L, "Alice","woman" );
        sqlSession.update("updateStu", student);
        sqlSession.commit();
        sqlSession.close();
    }
    

3.4 select(Retrieve)

  • StuMapper.xml

    • 注意:必须写 resultType 属性,不然 mybatis 无法确定返回值类型,就会报错
    <!-- 查询一条 -->
    <select id="selectStu" resultType="com.shameyang.mybatis.bean.Student">
        select * from t_student where sno = #{sno};
    </select>
    
    <!-- 查询多条,不需要加 where -->
    <select id="selectAll" resultType="com.shameyang.mybatis.bean.Student">
        select * from t_student;
    </select>
    
  • 测试查询一条记录

    @Test
    public void testSelect() {
        SqlSession sqlSession = SqlSessionUtil.openSession();
        sqlSession.selectOne("selectStu", 1);
        sqlSession.close();
    }
    
  • 测试查询多条记录

    @Test
    public void testSelectAll() {
        SqlSession sqlSession = SqlSessionUtil.openSession();
        List<Student> students =  sqlSession.selectList("selectAll");
        students.forEach(System.out::println); // lambda 表达式
        sqlSession.close();
    }
    

3.5 SQL Mapper 的 namespace

SQL Mapper 配置文件中,<mapper> 标签的 namespace 属性翻译为命名空间,主要是为了防止 sqlId 冲突

  • xml 文件中

    <mapper namespace="命名空间">
        <insert id="insertStu">
            insert into t_student(sno, sname, ssex)
            VALUES (null, #{sname}, #{ssex});
        </insert>
        ...
    </mapper>
    
  • Java 程序中

    sqlSession.insert("命名空间.insertStu");
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值