(2)MyBatis之增删改查

1.引言

      在上一篇博客中,我们介绍了MyBatis最简单的使用(只是向数据库插入了一条数据),但是在上一篇博客中还存在一些问题,比如:

  • SQL语句是写死的,我们不可以给SQL语句传入参数
  • 虽然我们定义了Student类和student表的映射关系,但是我们没有用到

      在本篇博客中我们就解决上一篇博客中遗留的这两个问题。

2.MyBatis插入数据

2.1 插入一条数据(使用自定义类型Student

  • 编写我们的语句
  <insert id="add" parameterType="com.Student">
    insert into student(id,name,sal) values(#{id},#{name},#{sal})
  </insert>
  • 编写测试类
    @Test
    public void testStudent()
    {
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        try{
            //执行mynamespace.add1的sql语句,正好我们的映射文件想对应
            Student s=new Student();
            s.setId(2);
            s.setName("wpx");
            s.setSal(1000D);
            sqlSession.insert("mynamespace.add", s);
        }catch(Exception e){
            e.printStackTrace();
            sqlSession.rollback();
        }finally{
            sqlSession.commit();
        }
        MyBatisUtil.closeSqlSession();
    }
  • 运行结果

这里写图片描述

  • SQL语句参数解释
parameterType:代表sql传入的参数类型
如果传入的参数是自定义类型,比如我们这里的Student
那么我们在SQL中使用#{}来读取自定义类型的值,括号里面写自定义类型的属性,比如#{id}读取id属性
虽然我们括号里面写的是属性,但是还是通过get方法得到的参数,比如#{id},调用的是getId方法

3 MyBatis更新数据

3.1更新一条数据(传入自定义类型Student

  • 编写我们的语句
  <update id="update" parameterType="com.Student">
    update student set name=#{name},sal=#{sal} where id=#{id}
  </update>
  • 编写我们的测试类
    @Test
    public void testStudent()
    {
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        try{
            //执行mynamespace.update的sql语句,正好我们的映射文件想对应
            Student s=new Student();
            s.setId(2);
            s.setName("zlr");
            s.setSal(1000D);
            sqlSession.update("mynamespace.update", s);
        }catch(Exception e){
            e.printStackTrace();
            sqlSession.rollback();
        }finally{
            sqlSession.commit();
        }
        MyBatisUtil.closeSqlSession();
    }
  • 运行结果

这里写图片描述

3 MyBatis查找数据

3.1 查询一条记录(通过主键:基本类型)

  • 编写我们的SQL语句
  <select id="selectOne" parameterType="java.lang.Integer" resultMap="studentMap">
    select id,name,sal from student where id=#{id}
  </select>
  • 编写我们的测试类
@Test
    public void testSelectOne()
    {
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        try{
            Student student=sqlSession.selectOne("mynamespace.selectOne", 1);
            System.out.print(student);
        }catch(Exception e){
            e.printStackTrace();
            sqlSession.rollback();
        }finally{
            sqlSession.commit();
        }
        MyBatisUtil.closeSqlSession();
    }
  • 运行结果

这里写图片描述

  • 代码解释
注意第一点:
    这里我们传入的参数是基本数据类型:int类型
    我们同样使用#{}来取得参数,就好比例子中的#{id}
    但是需要注意的是括号里面的值随便填,这个例子也可以写成#{xxx},程序照样可以运行
注意第二点:
    因为select语句有返回值,所以设置resultMap属性,我们通过这个属性设置映射关系,也就是告诉mybatis,我们查询到的是一个什么样子的对象

3.2 查询所有记录

  • 编写我们的SQL语句

    <select id="selectAll" parameterType="com.Student" resultMap="studentMap">
        select id,name,sal from student
    </select>
  • 编写测试类
    @Test
    public void testSelectAll()
    {
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        try{
            List<Student> students=sqlSession.selectList("mynamespace.selectAll");
            System.out.print(students);
        }catch(Exception e){
            e.printStackTrace();
            sqlSession.rollback();
        }finally{
            sqlSession.commit();
        }
        MyBatisUtil.closeSqlSession();
    }
  • 运行结果

这里写图片描述

  • 代码解释
在本次事例中只需要注意一个地方:
    我们需要的类型是:List<Student>
    但是我们设置的类型是:parameterType="com.Student"

3.3 分页查询(使用Map类型,也可以使用自定义类型)

  • 编写SQL语句
  <select id="findAllWithFy" parameterType="map" resultType="com.Student">
    select id,name,sal from student limit #{pstart},#{psize}
  </select>
  • 编写测试类
    @Test
    public void testFindAllWithFy()
    {
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        try{
            Map map=new HashMap();
            map.put("pstart",1);
            map.put("psize",1);
            List<Student> students=sqlSession.selectList("mynamespace.findAllWithFy",map);
            System.out.print(students);
        }catch(Exception e){
            e.printStackTrace();
            sqlSession.rollback();
        }finally{
            sqlSession.commit();
        }
        MyBatisUtil.closeSqlSession();
    }
  • 运行结果

这里写图片描述

  • 代码解释
这个代码需要注意一个地方:
    #{}表达式,括号里面需要填写map的key值

4.MyBatis删除数据

4.1 删除一条数据

  • 编写SQL语句
  <delete id="delete" parameterType="java.lang.Integer">
    delete from student where id = #{id}
  </delete>
  • 编写测试类
    @Test
    public void testDelete()
    {
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        try{
            sqlSession.delete("mynamespace.delete", 2);
        }catch(Exception e){
            e.printStackTrace();
            sqlSession.rollback();
        }finally{
            sqlSession.commit();
        }
        MyBatisUtil.closeSqlSession();
    }
  • 运行结果

这里写图片描述

代码下载

本博客代码下载地址为:MyBatis之增删改查

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值