【Spring】— 初识MyBatis (二)

(接上一篇【Spring】[初识MyBatis(一)]

1.2 根据用户名模糊查询用户信息

【示例6-2】模糊查询的实现只需要在映射文件中通过元素编写相应的SQL语句,并通过SqlSession的查询方法执行该SQL语句即可。其具体实现步骤如下。

步骤01 在映射文件UserMapper.xml中添加根据用户名模糊查询用户信息列表的SQL语句,具体实现代码如下。

根据用户名模糊查询用户信息列表

<!--  根据用户名模糊查询用户信息  -->
    <select id="findUserByName" parameterType="String" resultType="com.ssm.po.User">
        select * from t_user where username like '%${value}%'
    </select>

与根据用户编号查询相比,上述配置代码中的属性id、parameterType和SQL语句都发生了相应变化。其中,SQL语句中的“${}”用来表示拼接SQL的字符串,即不加解释地原样输出。“${value}”表示要拼接的是简单类型参数。

注意 在使用“${}”进行SOL字符串拼接时,无法防止SQL注入问题。想要既能实现模糊查询,又能防止SOL注入,可以对上述映射文件UserMapper.xml中模糊查询的select语句进行修改,使用MySQL中的concat函数进行字符串拼接。具体修改示例如下所示。

在这里插入图片描述
步骤02 在测试类MybatisTest中添加一个测试方法findUserByNameTest(),其代码如下所示。

@Test
    public void findUserByNameTest() throws Exception {
    
    
        String resourse = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resourse);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        List<User> users = sqlSession.selectList("com.ssm.mapper.UserMapper.findUserByName","g");
        //循环输出结果集
        for (User user : users) {
    
    
            System.out.println(user.toString());
        }
        sqlSession.close();
    }

在上述代码中,由于可能查询出多条数据,因此调用SqlSession的selectList()方法来查询返回结果的集合对象,并使用for循环输出结果集对象。执行findUserByNameTest ()方法后,控制台的输出结果如图所示。

请添加图片描述

使用MyBatis框架已成功查询出了用户表中用户名带有“g”的两条客户信息。至此,MyBatis入门程序的查询功能就已经讲解完了。从上面两个查询方法中可以发现,MyBatis的操作大致可分为以下几个步骤。

  • 步骤01 读取配置文件。
  • 步骤02 根据配置文件构建 SqlSessionFactory。
  • 步骤03 通过SqlSessionFactory创建SqlSession。
  • 步骤04 使用SqlSession对象操作数据库(包括查询、添加、修改、删除以及提交事务等)。
  • 步骤05 关闭SqlSession。

2 添加客户

在MyBatis的映射文件中,添加操作是通过元素来实现的。例如,向数据库中的t_user表中插入一条数据可以通过如下配置来实现。

<!-- 添加用户信息 -->
    <insert id="addUser" parameterType="com.ssm.po.User">
        insert into t_user(username, jobs, phone)values (#{
    
    username}, #{
    
    jobs},#{
    
    phone})
    </insert>

在上述配置代码中,传入的参数是一个User类型,该类型的参数对象被传递到语句中时,#{username}会查找参数对象User的username属性,#{jobs}和#{phone}也是一样的,并将其属性值传入SQL语句中。

【示例6-3】为了验证上述配置是否正确,下面编写一个测试方法来执行添加操作。

在测试类MybatisTest中添加测试方法addUserTest(),其代码如下所示。

 @Test
    public void addUserTest() throws Exception {
    
    
        String resourse = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resourse);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //创建User对象,并向对象中添加数据
        User user = new User();
        user.setUsername("tom");
        user.setJobs("worker");
        user.setPhone("17339880001");
        //执行sqlSession的插入方法,返回SQL影响的行数
        int rows = sqlSession.insert("com.ssm.mapper.UserMapper.addUser", user);
        //通过返回结果判断插入是否执行成功
        if (rows > 0) {
    
    
            System.out.println("成功添加" + rows + "条数据!");
        } else {
    
    
            System.out.println("添加数据失败!");
        }
        //提交事务
        sqlSession.commit();
        //关闭sqlSession
        sqlSession.commit();
    }

上述代码中,创建了User对象,并向User对象中添加了属性值;然后通过SqlSession对象的insert()方法执行插入操作,并通过该操作返回的数据来判断插入操作是否执行成功;最后通过SqlSession的commit()方法提交事务,并通过SqlSession.close()方法关闭了SqlSession。

运行之后结果:

请添加图片描述
查看数据库数据:

请添加图片描述

3 更新用户

MyBatis的更新操作在映射文件中是通过配置元素来实现的。如果需要更新用户数据,可以通过如下代码配置来实现。

<!-- 更新用户信息 -->
    <update id="updateUser" parameterType="com.ssm.po.User">
       update t_user set username=#{username}, jobs=#{jobs}, phone=#{phone} where id=#{id}
    </update>

与插入数据的配置相比,更新操作配置中的元素与SQL语句都发生了相应变化,但其属性名却没有变。

【示例6-4】为了验证配置是否正确,下面以6.2.2小节中新插入的数据为例进行更新用户测试。

在测试类MybatisTest中添加测试方法updateUserTest(),将id为4的用户的jobs属性值修改为“teacher”,其代码如下所示。

	@Test
    public void updateUserTest() throws Exception {
    
    
        String resourse = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resourse);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //创建User对象,并对对象中的数据进行模拟更新
        User user = new User();
        user.setId(4);
        user.setUsername("tom");
        user.setJobs("teacher");
        user.setPhone("17339880001");
        //执行sqlSession的插入方法,返回SQL影响的行数
        int rows = sqlSession.insert("com.ssm.mapper.UserMapper.updateUser", user);
        //通过返回结果判断插入是否执行成功
        if (rows > 0) {
    
    
            System.out.println("成功添加" + rows + "条数据!");
        } else {
    
    
            System.out.println("添加数据失败!");
        }
        //提交事务
        sqlSession.commit();
        //关闭sqlSession
        sqlSession.commit();
    }

与添加用户的方法相比,更新操作的代码增加了id属性值的设置,并调用SqlSession的update()方法对id为4的用户的jobs属性值进行修改。

运行之后查看数据库数据:

在这里插入图片描述

4 删除用户

删除用户之前我们多建几条用户数据,如图所示:

在这里插入图片描述
MyBatis的删除操作在映射文件中是通过配置元素来实现的。在映射文件UserMapper.xml中添加删除客户信息的SQL语句。

 <!-- 删除用户信息 -->
    <delete id="deleteUser" parameterType="Integer">
       delete from t_user where id=#{
    
    id}
    </delete>

从上述配置的SQL语句中可以看出,我们只需要传递一个id值就可以将数据表中相应的数据删除。要测试删除操作的配置十分简单,只需使用SqlSession对象的delete()方法传入需要删除数据的id值即可。

【示例6-5】在测试类MybatisTest中添加测试方法deleteUserTest(),该方法用于将id为4的用户信息删除,其代码如下所示。

   @Test
    public void deleteUserTest() throws Exception {
    
    
        String resourse = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resourse);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //执行sqlSession的删除方法,返回SQL影响的行数
        int rows = sqlSession.delete("com.ssm.mapper.UserMapper.deleteUser", 7);
        //通过返回结果判断插入是否执行成功
        if (rows > 0) {
    
    
            System.out.println("成功删除了" + rows + "条数据!");
        } else {
    
    
            System.out.println("删除数据失败!");
        }
        //提交事务
        sqlSession.commit();
        //关闭sqlSession
        sqlSession.commit();
    }

运行之后结果:

在这里插入图片描述
查看数据库数据:

在这里插入图片描述
至此,MyBatis入门程序的增、删、改、查操作学习结束。

猜你喜欢

转载自blog.csdn.net/weixin_45627039/article/details/130610876
今日推荐