myBatis配置和测试(含模糊查询MAP)


myBatis配置和测试

SQL增删改需要提交事务commit

  1. 工具类 myBatisUtils
  2. 配置文件 ybatis-3-config.xml
  3. 返回类型 user
  4. 接口 UserDao
  5. sql绑定配置文件 userDao.xml
  6. 测试类 TEST
  7. maven过滤配置

可能会遇到的问题

  1. 配置文件没有注册
  2. 绑定接口错误。
  3. 方法名不对
  4. 返回类型不对
  5. Maven导出资源问题

模糊查询

1.Java代码执行的时候,传递通配符% %

List userList = mapper.getuserLike("%李%");
select * from mybatis.user where name like #{value}

2.在sql拼接中使用通配符!

List userList = mapper.getuserLike("李");
select * from mybatis.user where name like %"#{value}"%"

工具类

package utils;

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 java.io.IOException;
import java.io.InputStream;

/**
 * @author liu
 */
public class myBatisUtils {
   private static SqlSessionFactory sqlSessionFactory =null;
    static {
        //mybatis第一步,获取sqlSessionFactory对象
        try {
            String resource = "mybatis-config.xml";
            InputStream ips = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(ips);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
//既然有了sqlSessionFactory,顾名思义,可以创造SqlSession的实例
    //SqlSession完全包含了面向数据库的所有sql命令和方法
    public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
    }

}

mybatis-3-config.xml

<?xml version="1.0" encoding="UTF8" ?>


    
        
            
            
                
                
                
                
            
        
    
    
    
        
    

返回类型 user

package pojo;

public class User {
    private int id;
    private String name;
    private String pwd;

    public User(int id, String name, String pwd) {
        this.id = id;
        this.name = name;
        this.pwd = pwd;
    }

    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;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

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

做一个接口提交sql

package dao;

import pojo.User;

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

public interface UserDao {
    //查所有用户
    List runSQL();

    //查某个用户
    List SQLgetID(int id);

    //查某个用户
    List SQLgetID2(Map map);

    //insert一个用户
    int addUser(User user);

    //update修改用户
    int updateUser(User user);

    //如果对象参数很多,可以用万能的map去处理
    int updateUser2(Map map);

    //delete 删除用户
    int deleteUser(int id);
}

userDao.xml

  • Map传递参数,直接在sql中取出key即可!
  • 对象传递参数,直接在sql中取对象的属性即可!
  • 只有一个基本类型参数的情况下,可以直接在sql中取到!

SQL绑定接口和方法
注意sql语句的标签更改

<?xml version="1.0" encoding="UTF-8" ?>



    

    

    


    
        insert into myBatis.user(id,name,pwd) value(#{id},#{name},#{password})
    

    
    
        update myBatis.user set name=#{name},pwd=#{password} where id=#{id};
    

    
    
        update myBatis.user set name=#{USERname},pwd=#{USERpassword} where id=#{USERid};
    

    
    
        delete from myBatis.user  where id=#{id};
    


测试

package dao;

import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import pojo.User;
import utils.myBatisUtils;

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

public class daotest {
    @Test
    public void test01() {
        //第一步:获得sqlSession对象
        SqlSession sqlSession1 = myBatisUtils.getSqlSession();
        //方式一:getMapper
        UserDao mapper = sqlSession1.getMapper(UserDao.class);
        List userList = mapper.runSQL();
        for (User user : userList) {
            System.out.println(user);
        }

        //关闭sqlSession
        sqlSession1.close();
    }

    @Test
    public void testSelect() {
        //第一步:获得sqlSession对象
        SqlSession sqlSession2 = myBatisUtils.getSqlSession();

        UserDao mapper = sqlSession2.getMapper(UserDao.class);
        List users = mapper.SQLgetID(2);
        System.out.println(users);

        //关闭sqlSession
        sqlSession2.close();
    }

    @Test
    public void testSelect2() {
        //第一步:获得sqlSession对象
        SqlSession sqlSession2 = myBatisUtils.getSqlSession();
        UserDao mapper = sqlSession2.getMapper(UserDao.class);

        Map map = new HashMap<>();
        map.put("USERid",3);
        map.put("USERname","ti");

        List users = mapper.SQLgetID2(map);

        System.out.println(users);
        //关闭sqlSession
        sqlSession2.close();
    }


    @Test
    public void testadd() {
        //第一步:获得sqlSession对象
        SqlSession sqlSession3 = myBatisUtils.getSqlSession();
        UserDao mapper = sqlSession3.getMapper(UserDao.class);

        int num = mapper.addUser(new User(5, "ttt", "654"));
        if (num > 0) {
            //增删改需要提交事务
            sqlSession3.commit();
            //关闭sqlSession
            sqlSession3.close();
        }
    }


    @Test
    public void updateUser() {
        //第一步:获得sqlSession对象
        SqlSession sqlSession4 = myBatisUtils.getSqlSession();
        UserDao mapper = sqlSession4.getMapper(UserDao.class);

        int num = mapper.updateUser(new User(4, "ttt", "654321"));
        if (num > 0) {
            //增删改需要提交事务
            sqlSession4.commit();
            //关闭sqlSession
            sqlSession4.close();
        }
    }

    @Test
    public void updateUser2() {
        //第一步:获得sqlSession对象
        SqlSession sqlSession4 = myBatisUtils.getSqlSession();
        UserDao mapper = sqlSession4.getMapper(UserDao.class);

        Map map = new HashMap();
        map.put("USERpassword","1234567");
        map.put("USERid",3);

        int num = mapper.updateUser2(map);
        if (num > 0) {
            //增删改需要提交事务
            sqlSession4.commit();
            //关闭sqlSession
            sqlSession4.close();
        }
    }

    @Test
    public void deleteUser() {
        //第一步:获得sqlSession对象
        SqlSession sqlSession5 = myBatisUtils.getSqlSession();
        UserDao mapper = sqlSession5.getMapper(UserDao.class);

        int num = mapper.deleteUser(4);
        if (num > 0) {
            //增删改需要提交事务
            sqlSession5.commit();
            //关闭sqlSession
            sqlSession5.close();
        }
    }
}

maven会过滤,需要加上配置