前一节介绍过如何使用mybatis查询数据库表t_user中的数据,本节介绍如何使用mybatis对数据库表t_user进行crud操作
步骤如下:
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">
<!--
为这个mapper指定一个唯一的namespace,
namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的
例如namespace="com.cn.mapping.userMapper"就是com.cn.mapping(包名)+userMapper(userMapper.xml文件去除后缀)
-->
<mapper namespace="com.cn.mapping.UserMapper">
<!--
在select标签中编写查询的SQL语句, 设置select标签的id属性为selectUser,
id属性值必须是唯一的,不能够重复
使用parameterType属性指明查询时使用的参数类型,
resultType属性指明查询返回的结果集类型
resultType="com.cn.vo.UserVO" 就表示将查询结果封装成一个UserVO类的对象返回
UserVO类就是t_user表所对应的实体类
-->
<!--
根据id查询得到一个user对象
-->
<select id="selectUser" parameterType="int"
resultType="com.cn.vo.UserVO">
select * from t_user where id=#{id}
</select>
<!--
2、创建新用户
因为创建新用户需要传递参数,参数用parameterType指定
#{username},其中username为实体类UserVO中的字段,必须对应
-->
<insert id="insertUser" parameterType="com.cn.vo.UserVO">
insert into t_user(
id,
username,
password
)values(
#{id},
#{username},
#{password}
)
</insert>
<!-- 3、修改用户 -->
<update id="updateUser" parameterType="com.cn.vo.UserVO">
update t_user t set t.username=#{username},
t.password=#{password}
where t.id=#{id}
</update>
<!--
4、删除用户
根据id删除,需要传递的参数为int类型
-->
<delete id="deleteUser" parameterType="int">
delete t.* from t_user t where t.id=#{id}
</delete>
<!--
5、查询所有的用户
查询无需传递参数不需要parameterType,但是查询需要返回结果集,需要设置结果类型resultType
-->
<select id="selectAllUser" resultType="com.cn.vo.UserVO">
select t.* from t_user t
</select>
</mapper>
2、测试
crud测试需要创建session工厂和session.这些步骤都是公用的,可以创建一个工具类,代码如下:
package com.cn.utils;
import java.io.IOException;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
/**
* mybatis工具类
* */
public class MybatisUtil {
/**
* 创建sqlSessionFacoty
* @throws IOException
* */
public static SqlSessionFactory getSqlSessionFactory(){
String resource="mybatis.cfg.xml";
Reader reader=null;
SqlSessionFactory sqlSessionFactory=null;
try{
//本次不使用类加载器加载配置文件,而是通过 mybatis提供的Resources类加载mybatis的配置文件
reader=Resources.getResourceAsReader(resource);
sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
}catch(Exception e){
e.printStackTrace();
}
return sqlSessionFactory;
}
/**
* 得到sqlSession
* 适应于:提交事务操作的增加、删除和修改操作的sqlSession获取
* */
public static SqlSession getSqlSession(boolean isAutoCommit){
return getSqlSessionFactory().openSession(isAutoCommit);
}
/**
* 得到sqlSession
* 适用于查询方式的获得sqlSession
* */
public static SqlSession getSqlSession(){
return getSqlSessionFactory().openSession();
}
}
2.1、通过用户id查询用户测试代码如下:
package com.cn.test;
import org.apache.ibatis.session.SqlSession;
import com.cn.utils.MybatisUtil;
import com.cn.vo.UserVO;
/**
* 通过id查询用户测试
* */
public class SelectUserById {
public static void main(String[] args) {
//1.通过MybatisUtil工具类获取sqlSession
SqlSession sqlSession=MybatisUtil.getSqlSession();
//2.映射sql的标识字符串
String statement="com.cn.mapping.UserMapper.selectUser";
//3.执行查询操作
UserVO userVO=sqlSession.selectOne(statement,1);
//4.打印结果
System.out.println(userVO.toString());
}
}
2.2、查询所有用户,测试代码如下:
package com.cn.test;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import com.cn.utils.MybatisUtil;
import com.cn.vo.UserVO;
/**
* 查询所有用户测试
* */
public class SelectAllUser {
public static void main(String[] args) {
//1.通过mybatis工具类获得sqlSession
SqlSession sqlSession=MybatisUtil.getSqlSession();
//2.映射sql的标识字符串
String statement="com.cn.mapping.UserMapper.selectAllUser";
//3.执行session操作
List<UserVO> userList=sqlSession.selectList(statement);
//4.循环遍历结果集
for(UserVO userVO:userList){
System.out.println(userVO.toString());
}
}
}
2.3、新增用户,测试代码如下:
package com.cn.test;
import org.apache.ibatis.session.SqlSession;
import com.cn.utils.MybatisUtil;
import com.cn.vo.UserVO;
public class InsertUser {
public static void main(String[] args) {
//1.工具类获得sqlSession
SqlSession session=MybatisUtil.getSqlSession(true);
//2.sql映射标识字符串
String statement="com.cn.mapping.UserMapper.insertUser";
//3.执行session操作
UserVO userVO=new UserVO(1101,"Rise","123456");
int result=session.insert(statement,userVO);
System.out.println(result);
}
}
2.4、删除用户,测试代码如下:
package com.cn.test;
import org.apache.ibatis.session.SqlSession;
import com.cn.utils.MybatisUtil;
/**
* 删除用户
* */
public class DeleteUser {
public static void main(String[] args) {
//1.获得sqlSession
SqlSession session=MybatisUtil.getSqlSession(true);
//2.执行sql映射标识的字符串
String statement="com.cn.mapping.UserMapper.deleteUser";
//3.执行session操作
int result=session.delete(statement, 1101);
System.out.println(result);
}
}
2.5、修改用户,测试代码如下:
package com.cn.test;
import org.apache.ibatis.session.SqlSession;
import com.cn.utils.MybatisUtil;
import com.cn.vo.UserVO;
/**
* 修改用户测试
* */
public class UpdateUser {
public static void main(String[] args) {
//1.获得sqlSession
SqlSession session=MybatisUtil.getSqlSession(true);
//2.执行sql映射的标识字符串
String statement="com.cn.mapping.UserMapper.updateUser";
//3.执行session操作
UserVO userVO=new UserVO();
userVO.setId(1);
userVO.setUsername("admin");
userVO.setPassword("123456");
int result=session.update(statement, userVO);
System.out.println(result);
}
}