Mybatis实现增删改查(CRUD)

摘要:Mybatis笔记_02-2021.06.13,笔记内容均为观看B站视频@狂神说

  • 一般性流程:前面已经实现第一个Mybatis程序时,已经将环境、依赖配置完成

  • 进一步实现功能只需要修改:

    ①编写接口类:添加我们需要实现的功能(定义方法),如:UserMapper.java;

    ②编写Mapper文件:实现我们的功能,方法,如:UserMapper.xml;

    ③编写测试类:测试我们编写的代码,如:UserMapperTest.java;

    ④注意点:增删改必须要提交事务;

1.知识回顾及注意事项

  • 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=帮定对应的Mapper接口(原理:相当于我们实现了这个接口)-->
<mapper namespace="com.riove.dao.UserMapper">

    <!--SQL语句: id = "接口中的方法名" resultType = “全类名,返回类型” -->
    <select id="getUserList" resultType="com.riove.pojo.User">
        <!--执行SQL语句-->
        select * from book.t_user
    </select>

</mapper>
注意:1.namespace="这里写的是接口的全类名" ;

	 2.id = "实现接口中的方法";

	 3.resultType = ①全类名,返回SQL语句返回值类型;②普通数据类型,如:int、String等";

	 4.parameterType="传入参数类型";
    
     5.#{"参数名"}: #{}相当于前面所学的占位符;
	 
	 6.实体类中对象的属性可以直接拿出来(编写实体类应与数据库字段一一对应),如:#{id},#{username},#{password},#{email}

2.增加(Create)

UserMapper.java

    //插入一个新的用户,参数是User对象
    void addUser(User user);

UserMapper.xml

    	<!--插入一个新的用户,参数是User对象-->
        <!--对象中的属性可以直接取出来-->
        <insert id="addUser" parameterType="com.riove.pojo.User">
            insert into t_user (id,username,password,email) values(#{id},#{username},#{password},#{email});
        </insert>

UserMapperTest.java

	@Test
    public void addUserTest() {
        //1.获取的SqlSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        try {
            //2.获取SqlSession绑定的接口类
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            //3.测试方法
            mapper.addUser(new User(6,"pojo","pojo","pojo@qq.com"));
            //4.提交事务
            sqlSession.commit();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //5.关闭资源
            sqlSession.close();
        }
    }

3.查询、检索(Retrieve)

UserMapper.java

//查询所有用户
    List<User> getUserList();

    //通过id查询用户
    User getUserById(int id);

UserMapper.xml

	<!--查询所有用户-->
    <select id="getUserList" resultType="com.riove.pojo.User">
        select * from book.t_user;
    </select>
    <!--通过id查询用户-->
    <select id="getUserById" parameterType="int" resultType="com.riove.pojo.User">
        select * from t_user where id = #{id};
    </select>

UserMapperTest.java

	@Test
    public void getUserListTest() {

        //1.获取的SqlSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        try {
            //2.执行Sql,面向接口,通过获取接口实现方法
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            //3.实现方法
            List<User> userList = mapper.getUserList();
            //4.输出
            for (User user : userList) {
                System.out.println(user);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //5.关闭SqlSession
            sqlSession.close();
        }

    }

    @Test
    public void getUserByIdTest() {
        //1.获取的SqlSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        try {
            //2.获取SqlSession绑定的接口类,然后通过接口实现方法
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            //3.测试(实现)方法
            User userById = mapper.getUserById(1);
            System.out.println(userById);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //4.关闭资源
            sqlSession.close();
        }
    }

4.更新(Update)

UserMapper.java

    //通过id,修改用户信息
    void updateUserById(User user);

UserMapper.xml

    <!--通过id,修改用户信息-->
    <update id="updateUserById" parameterType="com.riove.pojo.User">
        update t_user
        set  username = #{username},password = #{password},email = #{email}
        where id = #{id};
    </update>

UserMapperTest.java

    @Test
    public void updateUserByIdTest() {
        //1.获取的SqlSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        try {
            //2.获取SqlSession绑定的接口类
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            //3.测试方法
            mapper.updateUserById(new User(6,"AABB","abc123","AABB@qq.com"));
            //4.提交事务
            sqlSession.commit();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //5.关闭资源
            sqlSession.close();
        }
    }

5.删除(Delete)

UserMapper.java

    //通过id,删除用户
    void deleteUserById(int id);

UserMapper.xml

    <!--通过id,删除用户-->
    <delete id="deleteUserById" parameterType="int">
        delete from t_user where id = #{id};
    </delete>

UserMapperTest.java

	@Test
    public void deleteByIdTest() {
        //1.获取的SqlSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        try {
            //2.获取SqlSession绑定的接口类
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            //3.测试方法
            mapper.deleteUserById(6);
            //4.提交事务
            sqlSession.commit();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //5.关闭资源
            sqlSession.close();
        }
    }

6.Map的应用

  • 使用场景:当需要传入大量的参数并且需要自定义参数名时,可以通过使用Map进行参数的传递

6.1 什么是Map?

    /*
    *Map<Key,Value> map,是一对键值对;
    *键,Key:基本数据类型;
    *值,Value,我们传入值的类型;
    *注意:一个键只对应一个值,可以通过键获取里面的值
    */
    如:Map<String,String> map = new HashMap<String, Object>();
	   map.put("map_name","Hello");
	假设我们进行输入:System.out.println(map_name);
	结		   果:Hello

6.2 通过传入Map参数进行查询

UserMapper.java

    //通过id查询用户,参数类型为Map
    User getUserById2(Map<String, Object> map);

UserMapper.xml

    <!--通过id查询用户,参数类型为Map-->
    <select id="getUserById2" parameterType="map" resultType="com.riove.pojo.User">
        select *
        from t_user
        where id = #{map_id};
    </select>

UserMapperTest.java

	@Test
    public void getUserById2Test() {
        //1.获取的SqlSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        try {
            //2.获取SqlSession绑定的接口类,然后通过接口实现方法
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            //3.传入一个Map<>类型的参数
            Map<String,Object> map = new HashMap<String, Object>();
            map.put("map_id",5);
            //4.测试(实现)方法
            User userById = mapper.getUserById2(map);
            System.out.println(userById);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //5.关闭资源
            sqlSession.close();
        }
    }

6.3 通过传入Map参数进行插入

UserMapper.java

    //插入一个新的用户,参数类型为Map
    void addUser2(Map<String,String> map);

UserMapper.xml

    <!--插入一个新的用户,参数类型为Map-->
    <!--我们可以将map理解为一个实体类,我们可以自定义参数名(这叫键,key),传入的值(这叫值,value)-->
    <insert id="addUser2" parameterType="map">
        insert into t_user (username,password,email)
        values(#{map_username},#{map_password},#{map_email});
    </insert>

UserMapperTest.java

	@Test
    public void addUser2Test() {
        //1.获取的SqlSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        try {
            //2.获取SqlSession绑定的接口类
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            //3.编写Map参数
            Map<String,String> map = new HashMap<String, String>();
            map.put("map_username","Hello");
            map.put("map_password","hello");
            map.put("map_email","Hello@qq.com");
            //4.测试方法
            mapper.addUser2(map);
            //5.提交事务
            sqlSession.commit();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //6.关闭资源
            sqlSession.close();
        }
    }

6.4 Map应用小结

​ 我们可以将Map当做一个可以临时的、可自定义的实体类(官方:实体类的原型就是Map),当我们需要传入大量的值和数据时,我们可以通过使用Map来进行传递,而不需要重新去定义一个实体类,并且可以临时定义,键值可自定义。

7. 模糊查询

模糊查询有两种传值方式:

  • 1.可以在编写SQL代码时,将通配符("%")进行拼接好,用户只需要输入:值(Value);

UserMapper.java

    //模糊查询
    List<User> getUserListByLike(String value);

UserMapper.xml

    <!--模糊查询-->
    <select id="getUserListByLike" parameterType="String" resultType="com.riove.pojo.User">
        select *
        from t_user
        where username like "%"#{value}"%";
    </select>

UserMapperTest.java

	@Test
    public void getUserListByLikeTest() {

        //1.获取的SqlSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        try {
            //2.执行Sql,面向接口,通过获取接口实现方法
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            //3.实现方法
            List<User> userList = mapper.getUserListByLike("o");
            //4.输出
            for (User user : userList) {
                System.out.println(user);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //5.关闭SqlSession
            sqlSession.close();
        }

    }
  • 2.可以在编写传值代码块时,用户需要输入:通配符("%")+值(Value);

UserMapper.java

    //模糊查询
    List<User> getUserListByLike(String value);

UserMapper.xml

    <!--模糊查询2-->
    <select id="getUserListByLike" parameterType="String" resultType="com.riove.pojo.User">
        select *
        from t_user
        where username like #{value};
    </select>

UserMapperTest.java

	@Test
    public void getUserListByLikeTest() {

        //1.获取的SqlSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        try {
            //2.执行Sql,面向接口,通过获取接口实现方法
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            //3.实现方法
            List<User> userList = mapper.getUserListByLike("%o%");
            //4.输出
            for (User user : userList) {
                System.out.println(user);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //5.关闭SqlSession
            sqlSession.close();
        }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值