【MyBatis】第四课 Java注解的方式操作CRUD

概念

根据前面文章对MyBatis框架的学习【MyBatis】第三课 MyBatis映射文件的CRUD操作<方式二>初学者应该对该框架有一定的认识了,本文对该框架介绍第三种操作方式,使用Java注解的方式,可以加快并简化代码的操作,使开发者对于功能的完成效率更高。

操作步骤

创建web项目,将所需要的jar架包导入lib文件夹,并关联至项目,将主配置文件和数据库连接配置参数导入资源文件夹,如果对该操作还是不熟悉的初学者,请先阅读【MyBatis】第一课 MyBatis的框架的搭建和使用

那么我们前几篇文章中对于MyBatis框架操作数据库sql语句都需要映射文件,那么现在不需要了,我们只需要在dao层创建接口文件。 

在接口中,使用@Select,@Insert,@Update,@Delete创建执行sql语句

例如,代码如下:

package com.book.dao;

import com.book.entity.Book;
import org.apache.ibatis.annotations.*;

import java.util.List;
import java.util.Map;

/**
 * Created by admin on 2022/3/16.
 */
public interface IBookDao {

    //查询book表中所有图书的数量
    @Select("select count(*) from book")
    int getCount();

    

}

这时候,需要打开Mybatis-config.xml主配置文件,将之前的映射文件的路径改为接口文件的路径,不然运行会报映射文件找不到错误……

 那么我们再使用JUnit单元测试,建立测试的包中创建测试类,代码如下:

package com.book.test;

import com.book.dao.IBookDao;
import com.book.entity.Book;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Created by admin on 2022/3/16.
 */
public class BookTest {

    public SqlSession ss=null;
    public IBookDao dao=null;

    public void init(){
        //将主配置文件转换成输入流
        try {
            InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
            ss= new SqlSessionFactoryBuilder().build(is).openSession();
            dao=ss.getMapper(IBookDao.class);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Test
    public void one(){
        init();
        int count = dao.getCount();
        System.out.printf("获得的图书的总数量为:"+count+"本");
    }

   
}

通过对one方法做单元测试,可即看到结果

 那么如果执行的查询语句,需要传递条件数据,需要加上@Param注解

//查询书籍编号为2的书名
    //当需要传入参数的时候,加上@Param注解,注解中的变量名需要与占位符的名称保持一致
    @Select("select name from book where id=#{id}")
    String getName(@Param("id") int id);

    //查询书籍编号为1的书名,作者,价格,数量
    @Select("select name,author,price,count from book where id=#{id}")
    Map<String,Object> getBook(@Param("id")int id);

    //查询作者为罗贯中,价格为98的书籍编号,书名和数量
    @Select("select id,name,count from book where author=#{author} and price=#{price}")
    Map<String,Object> getBookInfo(@Param("author")String author,@Param("price")double price);

执行代码如下:

 @Test
    public void two(){
        init();
        String name = dao.getName(2);
        System.out.println(name);
    }

    @Test
    public void three(){
        init();
        Map<String, Object> book = dao.getBook(1);
        System.out.println(book);
    }

    @Test
    public void  four(){
        init();
        Map<String, Object> map = dao.getBookInfo("罗贯中", 98);
        System.out.println(map);
    }

当传入的条件参数更多时,再使用这种方式可能就显得累赘了,建议还是使用Map集合或者自定义实体类进行封装大量的数据,比米娜增加开发者的工作量。

 @Select("select id,name,count from book where author=#{author} and price=#{price}")
    Map<String,Object> getBookInfo1(Map<String,Object> map);

    //查询book表中的所有图书信息
    @Select("select * from book")
    List<Map<String,Object>> selectAll();
 @Test
    public void  four1(){
        init();
        Map<String,Object> map=new HashMap<>();
        map.put("author","罗贯中");
        map.put("price",98);
        Map<String, Object> m = dao.getBookInfo1(map);
        System.out.println(m);
    }

    @Test
    public void five(){
        init();
        List<Map<String, Object>> maps = dao.selectAll();
        maps.forEach(map-> System.out.println(map));
    }

那么对于执行添加,修改,删除操作的案例如下:

/添加数据
    @Insert("insert into book values(#{id},#{name},#{author},#{price},#{count})")
    int addBook(Book book);

    //修改数据
    //修改书名为《童话故事》的价格为40,数量为1200
    @Update("update book set price=#{price},count=#{count} where name=#{name}")
    int updateBook(Book book);

    //删除数据
    //清空数据库表的所有数据
    @Delete("delete from book")
    int delAll();

测试的代码如下:

 @Test
    public void six(){
        init();
        Book book=new Book(0,"《童话故事》","安徒生",120,30);
        int i = dao.addBook(book);
        ss.commit();
        if (i>0)
            System.out.println("添加成功");
    }

    @Test
    public void seven(){
        init();
        Book book=new Book();
        book.setName("《童话故事》");
        book.setPrice(40);
        book.setCount(1200);
        int i = dao.updateBook(book);
        ss.commit();
        if (i>0)
            System.out.println("修改成功");
    }

    @Test
    public void eight(){
        init();
        int i = dao.delAll();
        ss.commit();
        if (i>0)
            System.out.println("数据已全部清空");
    }

总结

通过对MyBatis框架的学习,很明显的发现比我们用JDBC原生的代码操作更简便,对于初学者来说,可能现在开始才是对Java产生不一样的兴趣,动力开始更强了吧!!!

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笔触狂放

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值