MyBatis第三课 Java注解的方式操作CRUD

Posted 笔触狂放

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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产生不一样的兴趣,动力开始更强了吧!!!

以上是关于MyBatis第三课 Java注解的方式操作CRUD的主要内容,如果未能解决你的问题,请参考以下文章

SpringMVC第三课 SpringMVC框架对Java注解使用

第三课 文件处理和函数

第三课:JAVA反射机制

mybatis执行CRUD操作的两种方式配置和注解

phtyon第三课

**注解方式整合Mybatis**