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<user> userList = mapper.getuserLike("%李%");
select * from mybatis.user where name like #{value}

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

List<user> 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" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=ture&amp;useSSL=true&amp;characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <!--每一个Mappper.XML都需要在MyBatis核心配置文件中注册-->
    <mappers>
        <mapper resource="UserDao.xml"/>
    </mappers>
</configuration>

方式一:通过路径绑定【推荐使用】

<mappers>
    <mapper resource="com/shu/mapper/UserMapper.xml"/>
</mappers>

方式二:使用class文件绑定注册
注意点:
接口和他的Mapper配置文件必须同名
接口和他的Mapper配置文件必须在同一个包下

<mappers>
    <mapper class="com.shu.mapper.UserMapper"/>
</mappers>

方式三:使用包扫描进行注入
注意点:
接口和他的Mapper配置文件必须同名
接口和他的Mapper配置文件必须在同一个包下

<mappers>
    <package name="com.shu.mapper"/>
</mappers>

返回类型 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<User> runSQL();

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

    //查某个用户
    List<User> SQLgetID2(Map<String,Object> map);

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

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

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

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

userDao.xml

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

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

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace绑定接口,ID绑定方法-->
<mapper namespace="dao.UserDao">
    <select id="runSQL" resultType="pojo.User">
        select * from myBatis.user;
    </select>

    <select id="SQLgetID" resultType="pojo.User" parameterType="int">
        select * from myBatis.user where id=#{id};
    </select>

    <select id="SQLgetID2" resultType="pojo.User" parameterType="map">
        select * from myBatis.user where id=#{USERid} and name=#{USERname};
    </select>

<!--对象中的属性可以取出来-->
    <insert id="addUser" parameterType="pojo.User">
        insert into myBatis.user(id,name,pwd) value(#{id},#{name},#{password})
    </insert>

    <!--对象中的属性可以取出来-->
    <update id="updateUser" parameterType="pojo.User">
        update myBatis.user set name=#{name},pwd=#{password} where id=#{id};
    </update>

    <!--用MAP传参代替user-->
    <update id="updateUser2" parameterType="map">
        update myBatis.user set name=#{USERname},pwd=#{USERpassword} where id=#{USERid};
    </update>

    <!--对象中的属性可以取出来-->
    <delete id="deleteUser" parameterType="pojo.User">
        delete from myBatis.user  where id=#{id};
    </delete>

</mapper>

测试

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<User> 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<User> 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<String, Object> map = new HashMap<>();
        map.put("USERid",3);
        map.put("USERname","ti");

        List<User> 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<String, Object>();
        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会过滤,需要加上配置

   <!--在build中配置resources,来防止我们资源导出失败的问题-->
  <!--  <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>-->
posted @   小幼虫虫  阅读(143)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示