mybatis学习(二、CRUD)

二、CRUD(增删改查)

回顾:

namespace

namespace里面的包名要与 DAO/Mapper 接口的包名一致!

1.select

选择,查询语句

<select id="getUserList" resultType="com.lzt.pojo.User">
    select * from mybatis.user
</select>
    
<select id="getUserById" parameterType="int" resultType="com.lzt.pojo.User">
    select * from mybatis.user where id=#{id}//这里的id是传进来的参数
</select>
  • id:就是对应namespace的方法名;
  • resultType:sql语句执行的返回值(完整的包.类名称);
  • parameterType:参数(形参)类型;

编写步骤:

  1. 编写接口 UserMapper

    //查询全部用户
    List<User> getUserList();
    
  2. 编写对应mapper中的SQL语句 UserMapper.xml

    <!--select查询语句-->
    <select id="getUserList" resultType="com.lzt.pojo.User">
        select * from mybatis.user
    </select>
    
  3. 编写测试 UserMapperTest

    @Test
    public void test(){
        //第一步:获得sqlSession
        SqlSession sqlSession = null;
    
        try {
            sqlSession = MybatisUtils.getSqlSession();
    
            //方式1:getMapper直接取得接口的实例(执行SQL,建议使用)
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            List<User> userList = mapper.getUserList();
    
            //方式2:通过sqlSession的方法取得对象(官方不建议使用)
            //List<User> userList = sqlSession.selectList("com.lzt.dao.UserDao.getUserList");
    
            for (User user : userList) {
                System.out.println(user);
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //关闭sqlSession
            sqlSession.close();
        }
    }
    

2.insert / update / delete

参照以下代码

  • 接口类 UserMapper
package com.lzt.dao;

import com.lzt.pojo.User;

import java.util.List;

public interface UserMapper {

    //查询全部用户
    List<User> getUserList();

    //根据id查询用户
    User getUserById(int id);

    //插入一个user
    int addUser(User user);

    //修改一个user
    int updateUser(User user);

    //删除一个user
    int deleteUser(int id);
}
  • mapper配置文件 UserMapper.xml
<?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:绑定一个对应的DAO/Mapper接口-->
<mapper namespace="com.lzt.dao.UserMapper">

    <!--select查询语句-->
    <select id="getUserList" resultType="com.lzt.pojo.User">
        select * from mybatis.user
    </select>

    <select id="getUserById" parameterType="int" resultType="com.lzt.pojo.User">
        select * from mybatis.user where id=#{id}
    </select>

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

    <update id="updateUser" parameterType="com.lzt.pojo.User">
        update mybatis.user set name=#{name},pwd=#{pwd}  where id=#{id};
    </update>

    <delete id="deleteUser" parameterType="int">
        delete from  mybatis.user where id=#{id}
    </delete>

</mapper>
  • 测试类 UserMapperTest
package com.lzt.dao;

import com.lzt.pojo.User;
import com.lzt.util.MybatisUtils;
import org.apache.ibatis.jdbc.SQL;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class UserMapperTest {
    @Test
    public void test(){
        //第一步:获得sqlSession
        SqlSession sqlSession = null;

        try {
            sqlSession = MybatisUtils.getSqlSession();

            //方式1:getMapper直接取得接口的实例(执行SQL,建议使用)
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            List<User> userList = mapper.getUserList();

            //方式2:通过sqlSession的方法取得对象(官方不建议使用)
            //List<User> userList = sqlSession.selectList("com.lzt.dao.UserDao.getUserList");

            for (User user : userList) {
                System.out.println(user);
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //关闭sqlSession
            sqlSession.close();
        }
    }

    @Test
    public void testGetUserById(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User userById = mapper.getUserById(3);
        System.out.println(userById);

        sqlSession.close();
    }

    //增删改需要提交事务
    @Test
    public void testAddUser(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int msg = mapper.addUser(new User(5,"小爱","123456"));
        if (msg>0){
            System.out.println("插入成功~!");
        }else{
            System.out.println("插入失败~!");
        }

        //提交事务
        sqlSession.commit();
        sqlSession.close();

    }

    @Test
    public void testUpdateUser(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int msg = mapper.updateUser(new User(5,"爱爱","123456"));
        if (msg>0){
            System.out.println("修改成功~!");
        }else{
            System.out.println("修改失败~!");
        }

        //提交事务
        sqlSession.commit();
        sqlSession.close();
    }

    @Test
    public void testDeleteUser(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int msg = mapper.deleteUser(5);
        if (msg>0){
            System.out.println("删除成功~!");
        }else{
            System.out.println("删除失败~!");
        }

        //提交事务
        sqlSession.commit();
        sqlSession.close();
    }
}

3.万能的Map

假设,我们的实体类,或者数据库中的表,字段或者参数过多,而我们不需要对所有的字段进行修改时,可以考虑使用map。

  1. Map传递参数,直接在SQL中取出key即可 parameterType="map"

  2. 对象传递参数,直接在SQL中取出对象的属性即可 parameterType="user"

  3. 只有一个基本类型参数的情况下,可以直接在SQL中取到 parameterType="int"(只有一个形参可以不写)

  4. 多个参数用Map,或者注解

  • 接口

    //万能的Map
    int addUserMap(Map<String,Object> map);
    
  • mapper配置文件

    <insert id="addUserMap" parameterType="map">
        <!--传递map的key-->
       insert into mybatis.user(id, name, pwd) value (#{userId},#{userName},#{userPwd})
    </insert>
    
  • 测试类

    @Test
    public void testAddUserMap(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
    
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    
        Map<String, Object> map = new HashMap<>();
        map.put("userId",5);
        map.put("userName","Mick");
        map.put("userPwd","12345ss");
        int msg = mapper.addUserMap(map);
        if (msg>0){
            System.out.println("插入成功~!");
        }else{
            System.out.println("插入失败~!");
        }
    
        //提交事务
        sqlSession.commit();
        sqlSession.close();
    
    }
    

4.模糊查询

模糊查询怎么写?

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

    List<User> user = mapper.getUserByKey("%李%");
    
  2. 在SQL拼接中使用通配符

    select * from mybatis.user where name like "%"#{value}"%"
    
posted @ 2021-03-02 09:01  HoneyOneD  阅读(44)  评论(0)    收藏  举报