Mybatis实现增删改查、模糊查询、多条件查询

项目总体结构如下:

Mybatis实现增删改查、模糊查询、多条件查询_第1张图片

数据库准备:在 数据库dbmybatis中创建一张category的表,我录入了几条记录方便测试,表字段结构如下图:

Mybatis实现增删改查、模糊查询、多条件查询_第2张图片Mybatis实现增删改查、模糊查询、多条件查询_第3张图片

1.建立好了表后使用idea新建一个Maven项目,pom.xml加入如下依赖:


    
    
        mysql
        mysql-connector-java
        5.1.46
    
    
    
        org.mybatis
        mybatis
        3.3.0
    
    
        junit
        junit
        4.12
    




    
        
            maven-compiler-plugin
            
                1.8
                1.8
            
        
    

2.resources下创建mybatis的配置文件mybatis-config.xml。

设置别名是为了在具体的mapper.xml中不用写实体的完整路径。只需要写类名,且不区分大小写。




     
        
    
    
    
        
            
            
                
                
                
                
            
        
    
    
    
        
    

3.创建实体Category.java。

package com.byh.pojo;

public class Category {

    private int id;
    private String name;

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Category{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

4.创建CategoryMapper.xml.其中编写了对category表的增删改查、模糊、多条件查询的语句。

注意:namespace的值是自己项目中所对应的mapper.java接口。一定不能写错。






    
            insert into category ( name ) values (#{name})
    
    
            delete from category where id= #{id}
    
    
            update category set name=#{name} where id=#{id}
    
    
    

    
    

5.然后写对应的接口CategoryMapper 。

这里接口中的方法有如下规定:

(1)方法名和对应的mapper配置文件中查询语句的id相同

Mybatis实现增删改查、模糊查询、多条件查询_第4张图片

(2)返回类型和resultType的类型一致,没有就是void。

(3)方法中的参数列表中的类型和parameterType一致。

(4)mapper配置文件的namespace对应mapper接口类的全路径。

package com.byh.mapper;

import com.byh.pojo.Category;

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

public interface CategoryMapper {

    void addCategory(Category category);

    void delCategory(Category category);

    void updateCategory(Category category);

    void getCategoryById(int id);

    List listCategory();

    List listCategoryByName(String name);

    List listCategoryByIdAndName(Map map);

}

6.创建测试。下面贴出了完整的增删改查、模糊、多条件查询的测试通过的代码:

import com.byh.mapper.CategoryMapper;
import com.byh.pojo.Category;
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.Before;
import org.junit.Test;

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

public class Demo1 {

    private SqlSession session ;
    private CategoryMapper categoryMapper;
    @Before
    public void bef() throws IOException {
        //mybatis的配置文件
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        //构建sqlSession的工厂
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //创建能执行映射文件中sql的sqlSession
        session=sqlSessionFactory.openSession();
        categoryMapper = session.getMapper(CategoryMapper.class);
    }

    /**
     * 关闭SqlSession的方法
     * @param session
     */
    public void close(SqlSession session){
        session.commit();
        session.close();
    }
    /*
    1. 程序向找Mybatis找数据
    2. mybatis从数据库中:
        (1).通过mybatis-config.xml 定位是哪个数据库,
        (2).通过Category.xml执行对应的select语句
        (3).基于Category.xml把返回的数据库记录封装在Category对象中
        (4).把多个Category对象装在一个Category集合中
        这样找到数据
    3. 返回一个Category集合
     */
    @Test  //查询所有
    public void findAll() throws IOException {
        List cs=categoryMapper.listCategory();
        for (Category c : cs) {
            System.out.println(c.getName());
        }
    }
    @Test //增加
    public void add() throws IOException {
        Category c = new Category();
        c.setName("我是新增的分类");
        categoryMapper.addCategory(c);
        findAll();
        //提交和关闭,调用自定义方法
        close(session);
    }
    @Test //删除
    public void del() throws IOException {
        findAll();
        System.out.println("------------删除后-----------");
        Category c = new Category();
        c.setId(5);
        categoryMapper.delCategory(c);//这里的5是一个数据库存在的id
        findAll();
        close(session);
    }
    @Test //更新
    public void update() throws IOException {
        findAll();
        System.out.println("------------更新后-----------");
        Category c = session.selectOne("getCategory",2);//查询单个对象
        c.setName("分类2被修改了a");
        categoryMapper.updateCategory(c);

        findAll();
        close(session);
    }
    @Test //模糊查询
    public void like() throws IOException {
        findAll();
        System.out.println("------------模糊查询-----------");
        //返回符合条件的结果集
        List cs=categoryMapper.listCategoryByName("了");
        for (Category c : cs) {
            System.out.println(c.getName());
        }
    }
    @Test //多条件
    public void moreLike() throws IOException {
        findAll();
        //这里查询的是id大于1并且分类的name中带有数字2的记录,为了直观,建议数据库多录入几条数据测试
        Map params = new HashMap<>();
        params.put("id", 1);
        params.put("name", "2");
        List cs = categoryMapper.listCategoryByIdAndName(params);
        System.out.println("------------多条件-----------");
        for (Category c : cs) {
            System.out.println(c.getName());
        }
    }

}

你可能感兴趣的:(Mybatis实现增删改查、模糊查询、多条件查询)