Mybatis之CRUD功能的实现、模糊查询和参数传递

1、接口编写

public interface UserMapper {
    //查询所有用户
    ArrayList<User> getUser();

    //添加用户
    int insertUser(User user);

    //根据主键删除用户
    int deleteUser(int id);
    //根据主键修改用户
    int updateUser(User user);
}

避免程序写死 修改功能 需要传入的参数 必须也得是对象

增删改返回值都是int 查询的返回值是一个集合

2、sql语句配置

<mapper namespace="com.llf.Mapper.UserMapper">
  <!--id mapper接口名
  resulsetType 要返回的类型 如果是集合 就写泛型的地址-->
    <select id="getUser" resultType="com.llf.pojo.User">
                select * from user
  </select>
    <insert id="insertUser" parameterType="com.llf.pojo.User">
        insert into User (id,name,password,email,birthday)
        values (#{id},#{name},#{password},#{email},#{birthday})
    </insert>
    <delete id="deleteUser" parameterType="int">
        delete from user where id=#{id}
    </delete>
    <update id="updateUser" >
        update user set password=#{password} ,email=#{email},birthday=#{birthday} where id=#{id}
    </update>
</mapper>
8.2.1、参数解释:

​ namespace:需要注册的接口的绝对路径 也就是编写的Mapper接口的路径

​ id:需要实现的接口的方法名

​ resulsetType :要返回的类型 如果是集合 就写泛型的地址

​ parameterType:参数类型 int 可以省略不写 如果是泛型 就写实体类的绝对地址

3、测试类测试

@Test
    public void update(){
    SqlSession session = MybatisUtils.getsession();
    UserMapper mapper = session.getMapper(UserMapper.class);
    String date="1998-02-03";
    Date date1 = DateUtil.string2Date(date);
    mapper.updateUser(new User(4, "赵六", "12456", "zl@qq.com", date1));
    session.commit();
    MybatisUtils.closeSqlSession();
}

在测试的过程中,需要注意的是 增删改都需要事务的提交(session.commit()), 否则数据库不会有变化 查询可以不用提交事务

4、使用map传递参数

Hashmap<>可以使用键值对的方式传递参数,与常规的对象传递参数相比

1、Hashmap可以自己定义参数的名字 而对象传参必须与实体类的变量名字一致

2、当一个表中字段较多 ,而我们需要对其进行更新操作时,使用对象传参我们需要将这些字段全部写出来,

​ 使用Hashmap 我们可以只传递我们需要修改的字段的值即可

Mapper接口区别

    //根据主键修改用户
    int updateUser(User user);
    //使用map更新信息
    int updateUser1(HashMap<String,Object> map);

sql语句配置区别 注意两者的参数类型的变化

  <update id="updateUser" parameterType="com.llf.pojo.User">
        update user set password=#{password} ,email=#{email},birthday=#{birthday} where id=#{id}
    </update>
    <update id="updateUser1" parameterType="map">
        update user set password=#{password}  where id=#{userid}
    </update>

我们可以验证 通过对象传参 参数必须和对象的成员变量一致 通过map传值 可以自定义参数的键

test测试

@Test
    public void update(){
    SqlSession session = MybatisUtils.getsession();
    UserMapper mapper = session.getMapper(UserMapper.class);
    String date="1998-02-03";
    Date date1 = DateUtil.string2Date(date);
    mapper.updateUser(new User(4, "赵六", "12456", "zl@qq.com", date1));
    session.commit();
    MybatisUtils.closeSqlSession();
}
@Test
    public void update1(){
    SqlSession session = MybatisUtils.getsession();
    UserMapper mapper = session.getMapper(UserMapper.class);
    HashMap<String, Object> map = new HashMap<>();
    map.put("password","1234566");
    map.put("userid",4);

    int i = mapper.updateUser1(map);
    System.out.println(i);
    session.commit();
    MybatisUtils.closeSqlSession();

}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JY0gEwUz-1624684157154)(C:\Users\machenike\AppData\Roaming\Typora\typora-user-images\image-20210626123848769.png)]

两种方法都可以实现参数的传递 但是 正规的用法应该是对象传参的方式 map传参属于我们说的野路子 不过在工作中 map的效率更高

5、模糊查询

在之前jdbc的时候,我们使用list拼接字符串的方式实现模糊查询 现在我们依旧可以使用这种方式。为了避免sql注入的问题,我们通过可以把通配符写死的方法 来实现模糊查询

两种方法的Mapper接口都一致

  //模糊查询
    ArrayList<User> selectBylike(HashMap<String,Object> map);
(1)、将通配符写死在xml文件中
  <select id="selectBylike" resultType="com.llf.pojo.User" parameterType="map">
        select * from user  where name like "%"#{values}"%";
    </select>
@Test
    public void selectBylike(){
    SqlSession session = MybatisUtils.getsession();
    UserMapper mapper = session.getMapper(UserMapper.class);
    HashMap<String, Object> map = new HashMap<>();
    map.put("values", "赵");
    ArrayList<User> users = mapper.selectBylike(map);
    for (User user : users) {
        System.out.println(user);
    }

    MybatisUtils.closeSqlSession();
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T37R8i5o-1624684157157)(C:\Users\machenike\AppData\Roaming\Typora\typora-user-images\image-20210626125724099.png)]

(2)、将通配符写死在java程序中
  <select id="selectBylike" resultType="com.llf.pojo.User" parameterType="map">
        select * from user  where name like #{values};
    </select>
@Test
    public void selectBylike(){
    SqlSession session = MybatisUtils.getsession();
    UserMapper mapper = session.getMapper(UserMapper.class);
    HashMap<String, Object> map = new HashMap<>();
    map.put("values", "%赵%");
    ArrayList<User> users = mapper.selectBylike(map);
    for (User user : users) {
        System.out.println(user);
    }

    MybatisUtils.closeSqlSession();
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zTZnace2-1624684157159)(C:\Users\machenike\AppData\Roaming\Typora\typora-user-images\image-20210626130337221.png)]

两种方法都可以实现模糊查询且比较安全

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值