使用mybatis实现增删改查

0、注意

  • 增删改都要提交事务,不然写的sql语句不能生效
  • 增删改的在xml中都有对应的标签,不要用成 select 标签(但个人不小心用错了好像一样而可以执行?最好还是用对应的标签吧)
  • sql语句中用#{}来取值
  • 注意注释

1、插入(insert)

首先在之前定义的userDao接口中定义一个方法,插入需要传入一个用户对象作为参数

    //插入一个用户
    void insertUser(User user);

然后在绑定的userMapper.xml文件中“实现”这个方法,编写sql语句,注意这里参数类型为User

    <insert id="insertUser" parameterType="com.wt.pojo.User">
        <!--若传入的参数是个对象,获取对象中的属性值直接通过#{属性名}就能得到-->
        insert into mybatis.user(id,name,pwd) values (#{id},#{name},#{pwd});
    </insert>

最后去测试一下

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

        UserDao mapper = sqlSession.getMapper(UserDao.class);

        mapper.insertUser(new User(4,"Jeny","222222"));

        //注意,在进行增删改操作时必须要用到事务,如果这里不提交,那么代码运行没有问题但表并没有被增删改,需要提交事务后才能实现增删改
        sqlSession.commit();
        sqlSession.close();

    }

2、修改(update)

在接口中定义方法

	//修改一个用户
    void updateUser(User user);

通过绑定的mapper配置文件“实现”这个方法

    <update id="updateUser" parameterType="com.wt.pojo.User">
        <!--一样,对象中的属性值用#{}取-->
        update mybatis.user set pwd=#{pwd} where id=#{id};
    </update>

再测试

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

        UserDao mapper = sqlSession.getMapper(UserDao.class);

        mapper.updateUser(new User(3,"Joe","123123"));

        sqlSession.commit();
        sqlSession.close();
    }

3、删除(delete)

在接口中定义方法

    //删除一个用户
    void deleteUser(int id);

通过绑定的mapper配置文件“实现”这个方法

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

再测试

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

        UserDao mapper = sqlSession.getMapper(UserDao.class);

        mapper.deleteUser(3);

        sqlSession.commit();
        sqlSession.close();
    }

4、查询(select)

根据id查询一个用户,依然是
在接口中定义方法

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

通过绑定的mapper配置文件“实现”这个方法

    <!--传入参数,要设置parameterType-->
    <select id="getUserById" parameterType="int" resultType="com.wt.pojo.User">
        <!--获取传入的参数用取值符号#{形参名}-->
        select * from mybatis.user where id=#{id};
    </select>

再测试

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

        UserDao mapper = sqlSession.getMapper(UserDao.class);

        //传入参数
        User userById = mapper.getUserById(2);

        System.out.println(userById.getId());
        System.out.println(userById.getName());

        sqlSession.close();

    }

模糊查询:

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

注意下面的字符串拼接

    <select id="getUsers" parameterType="String" resultType="com.wt.pojo.User">
    	<!--注意这里的字符串拼接-->
        select * from mybatis.user where name like "%"#{value}"%";
    </select>
    @Test
    public void selectTest02(){
    
    
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        UserDao mapper = sqlSession.getMapper(UserDao.class);

        List<User> users = mapper.getUsers("T");

        for(User user:users){
    
    
            System.out.println(user.getName());
        }

        sqlSession.close();
    }

5、后言

关于传入参数,有一个map可以用(万能的map),可以自由的传入参数而不用把一整个对象传入。这个后面会再写。增删改查也可以用注解来实现,虽然可以让代码变得更加简洁,但面对复杂的sql语句就不太行,我个人更喜欢用配置文件。

猜你喜欢

转载自blog.csdn.net/kitahiragawa/article/details/113035741