(接上一篇【Spring】[初识MyBatis(一)])
目录
- 1.2 根据用户名模糊查询用户信息
- 2 添加客户
- 3 更新用户
- 4 删除用户
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入门程序的增、删、改、查操作学习结束。