欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MyBatis(二)对表执行CRUD操作

程序员文章站 2022-05-23 17:54:01
...

上一篇博文MyBatis(一配置文件),我们讲了如何配置MyBatis配置文件,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对t_user表执行CRUD操作。本文中使用到的测试环境是上一篇博文中的测试环境。

使用MyBatis对表执行CRUD操作

1、创建数据库,新建一个t_user表,并添加数据
 SQL脚本如下:

create database db_user;
use db_user;
CREATE TABLE t_user(usre_id INT PRIMARY KEY AUTO_INCREMENT, user_name VARCHAR(20), user_age INT);
INSERT INTO t_user(user_name, user_age) VALUES('张三', 21);
INSERT INTO t_user(user_name, user_age) VALUES('李四', 22);
INSERT INTO t_user(user_name, user_age) VALUES('王五', 23);

MyBatis(二)对表执行CRUD操作
2、新建工具类,用于获取SqlSession会话
MyBatis(二)对表执行CRUD操作

public class DBUtil {
    /**
     * 每个数据库对应一个SqlSessionFactory
     */
    private static SqlSessionFactory sqlSessionFactory;

    /**
     * 1、静态块初始化,通过字节输入流读取配置文件
     */
    static {
        InputStream is=null;

        try {
            is=Resources.getResourceAsStream("sqlMapConfig.xml");
            /**
             * 2、获得SqlSessionFactory
             */
            sqlSessionFactory=new SqlSessionFactoryBuilder().build(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /**
     * 3、通过SqlSessionFactory获得SqlSession会话
     */
    public static SqlSession getsqlsession() {
        return sqlSessionFactory.openSession();
    }

}

3、新建实体类:User
MyBatis(二)对表执行CRUD操作

public class User {
    private int userId; //用户ID
    private String userName;    //用户名
    private int userAge;    //密码

    public int getUserId() {
        return userId;
    }
    public void setUserId(int userId) {
        this.userId = userId;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public int getUserAge() {
        return userAge;
    }
    public void setUserAge(int userAge) {
        this.userAge = userAge;
    }
    @Override
    public String toString() {
        return "User [userId=" + userId + ", userName=" + userName + ", userAge=" + userAge + "]";
    }

}

4、创建一个mapper包,专门用于存放定义操作user表的UserMapper接口和sql映射文件UserMapper.xml,如下图所示:
MyBatis(二)对表执行CRUD操作
UserMapper接口:用于定义CRUD操作的方法

public interface UserMapper {
    /**
     * 根据ID查询单条用户信息
     * @param id 用户ID
     * @return User对象
     */
    public User getUserInfoById(int id);

    /**
     * 添加一条用户信息
     * @param name  用户名
     * @param age   用户年龄
     * @return 受影响行数,1 添加成功
     */
    public int addUser(@Param("name")String name,@Param("age")int age);

    /**
     * 根据ID删除用户
     * @param id 用户ID
     * @return 受影响行数,1 删除成功
     */
    public int delUserById(int id);

    /**
     * 根据ID修改用户信息
     * @param name 修改的用户名
     * @param id    需要修改用户的ID
     * @return  受影响行数,1 修改成功
     */
    public int updateUserByID(@Param("name")String name,@Param("id")int id);
}

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="com.zh.mapper.UserMapper">

<resultMap type="User" id="userInfo">
    <id property="userId" column="user_id" javaType="int"></id>
    <result property="userName" column="user_name" javaType="java.lang.String"/>
    <result property="userAge" column="user_age" javaType="int"></result>
</resultMap>


<!-- 查询单条用户信息 ,id为Mapper接口的方法名,-->
<select id="getUserInfoById" resultMap="userInfo">
    select * from t_user where user_id=#{id}
</select>

<!-- 添加用户 -->
<insert id="addUser">
    insert into t_user(user_name,user_age) VALUES(#{name},#{age})
</insert>

<!-- 根据ID删除用户 -->
<delete id="delUserById">
    delete from t_user where user_id=#{id}
</delete>

<!-- 根据ID修改用户信息 -->
<update id="updateUserByID">
    update t_user set user_name=#{name} where user_id=#{id}
</update>
</mapper>

5、创建一个业务层包,用于存放Service接口和ServiceImpl实现类,如下图:
MyBatis(二)对表执行CRUD操作
UserService:定义CRUD方法,作用与UserMapper一致

public interface UserService {
    /**
     * 根据ID查询单条用户信息
     * @param id 用户ID
     * @return User对象
     */
    public User getUserInfoById(int id);

    /**
     * 添加一条用户信息
     * @param name  用户名
     * @param age   用户年龄
     * @return 受影响行数,1 添加成功
     */
    public int addUser(String name,int age);

    /**
     * 根据ID删除用户
     * @param id 用户ID
     * @return 受影响行数,1 删除成功
     */
    public int delUserById(int id);

    /**
     * 根据ID修改用户信息
     * @param name 修改的用户名
     * @param id    需要修改用户的ID
     * @return  受影响行数,1 修改成功
     */
    public int updateUserByID(String name,int id);

UserServiceImpl:业务实现类,重写UserService接口内的方法:

public class UserServiceImpl implements UserService{

    //获取sqlSession对象
    SqlSession sqlSession=DBUtil.getsqlsession();
    //通过sqlSession对象得到Mapper对象
    UserMapper mapper=sqlSession.getMapper(UserMapper.class);

    @Override
    public User getUserInfoById(int id) {
        User user = mapper.getUserInfoById(id);
        return user;
    }

    @Override
    public int addUser(String name, int age) {
        int result=mapper.addUser(name, age);
        //会话提交
        sqlSession.commit();
        return result;
    }

    @Override
    public int delUserById(int id) {
        int result = mapper.delUserById(id);
        sqlSession.commit();
        return result;
    }

    @Override
    public int updateUserByID(String name, int id) {
        int result = mapper.updateUserByID(name, id);
        sqlSession.commit();
        return result;
    }
}

6、创建一个测试类,用于测试方法较多,主方法用于麻烦,这里我们创建一个工具类:

public class UserAction extends TestCase{
    //获取业务层对象
    private static UserService service=new UserServiceImpl();

    /**
     * 获取单条用户信息
     */
    public void TestgetUserInfoById() {
        int id=1;
        User user=service.getUserInfoById(id);
        System.out.println(user);
    }

    /**
     * 添加数据
     */
    public void TestAddUser() {
        String name="马六";
        int age = 24;
        int result=service.addUser(name, age);
        if(result==1) {
            System.out.println("数据添加成功");
        }else {
            System.out.println("数据添加失败");
        }       
    }

    /**
     * 删除数据
     */
    public void TestDelUser() {
        int id=4;
        int result=service.delUserById(id);
        if(result==1) {
            System.out.println("数据删除成功");
        }else {
            System.out.println("数据删除失败");
        }
    }

    /**
     * 修改数据
     */
    public void TestUpdateUser() {
        String name="羊七";
        int id=5;
        int result=service.updateUserByID(name, id);
        if(result==1) {
            System.out.println("数据修改成功");
        }else {
            System.out.println("数据修改失败");
        }
    }
}

测试结果如下,控制台打印:
User [userId=1, userName=张三, userAge=21]
数据添加成功
数据删除成功
数据修改成功

相关标签: mybatis