← 返回首页
Mybatis基础教程(十七)
发表时间:2022-03-11 20:07:14
单表的CRUD(基于注解)

1.mybatis常用注解

MyBatis可以利用SQL映射文件来配置,也可以利用Annotation来设置。MyBatis提供的一些常用的基本注解如下表所示。

注解 说明
@Insert 实现新增
@Delete 实现删除
@Update 实现更新
@Select 实现查询
@Result 实现结果集封装
@Results 可以与@Result 一起使用,封装多个结果集
@ResultMap 实现引用@Results 定义的封装
@One 实现一对一结果集封装
@Many 实现一对多结果集封装
@Param 当映射器方法需多个参数,这个注解可以被应用于映射器方法参数来给每个参数一个名字。
@Many 实现一对多结果集封装
@Options 映射语句的属性

实例

在第二章的单表的CRUD案例基础上,实现基于注解的单表CRUD。

项目结构图如下:

用户实体类

//Users.java
//用户实体类,对应我们users表。
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Users {

    private Integer uid; //用户编号
    private String username; //用户名
    private String password; //密码
    private String mobile; //手机号码
    private String email; //电子邮箱
    private String type; //用户类型

}

在com.dao包下新建UsersMapper.java接口。

//UsersMapper.java
package com.dao;

import com.entity.Users;
import org.apache.ibatis.annotations.*;
import java.util.List;
import java.util.Map;

public interface UsersMapper {

    @Select("select * from users")
    public List<Users> getAllUsers();

    @Select("select * from users where uid=#{uid}")
    public Map<String,Object> geUserByUidReturnMap(Integer uid);

    @Select("select * from users where uid=#{uid}")
    public Users getUserByUid(Integer uid);

    @Insert("insert into users (username,password,mobile,email,type) values (#{username},#{password},#{mobile},#{email},#{type}) ")
    @Options(useGeneratedKeys=true,keyProperty = "uid", keyColumn = "uid")
    public int addUser(Users u);

    @Update("update users set username = #{username},password=#{password},mobile=#{mobile},email=#{email},type=#{type} where uid = #{uid}")
    public int updateUser(Users u);

    @Delete("delete from users where uid = #{uid}")
    public int deleteUser(Integer uid);

}

在mybatis-config.xml里,添加映射接口。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--配置属性-->
    <!--加载这个属性文档-->
    <properties resource="db.properties"/>

    <!--配置映射类的别名-->
    <typeAliases>
        <typeAlias alias="Users" type="com.entity.Users"/>
    </typeAliases>

    <!--数据源配置-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${mysql.driver}"/>
                <property name="url" value="${mysql.url}"/>
                <property name="username" value="${mysql.username}"/>
                <property name="password" value="${mysql.password}"/>
            </dataSource>
        </environment>
    </environments>

    <!--映射接口-->
    <mappers>
        <mapper class="com.dao.UsersMapper"></mapper>
    </mappers>

</configuration>

编写测试类。

package com.mapper;

import com.dao.UsersMapper;
import com.entity.Users;
import com.util.SqlSessionFactoryUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class UsersMapperCrudTest {

    //测试根据用户编号查询用户资料
    @Test
    public void testQueryUserByUid() {
        SqlSession session = null;
        Users u = null;
        try {
            session = SqlSessionFactoryUtil.openSqlSession();
            UsersMapper usersMapper = session.getMapper(UsersMapper.class);
            u = usersMapper.getUserByUid(3);
            System.out.println(u);
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            if (session != null) {
                session.close();
            }
        }
    }

    //测试查询所有用户
    @Test
    public void testQueryAllUsers() {
        SqlSession session = null;
        try {
            session = SqlSessionFactoryUtil.openSqlSession();
            UsersMapper usersMapper= session.getMapper(UsersMapper.class);
            List<Users> usersList = usersMapper.getAllUsers();
            usersList.forEach(System.out::println);

        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            if (session != null) {
                session.close();
            }
        }
    }

    //测试新用户
    @Test
    public void testInsertUser() {
        SqlSession session = null;
        Users u = new Users();
        u.setUsername("王大锤");
        u.setPassword("123456");
        u.setMobile("18991167567");
        u.setEmail("5465657687@126.com");
        u.setType("student");
        try {
            session = SqlSessionFactoryUtil.openSqlSession();
            UsersMapper usersMapper = session.getMapper(UsersMapper.class);
            int result = usersMapper.addUser(u);
            System.out.println("受影响记录条数:" + result);
            System.out.println("新增用户主键:" + u.getUid());
            session.commit();
        } catch (Exception ex) {
            ex.printStackTrace();
            session.rollback();
            session.commit();
        } finally {
            if (session != null) {
                session.close();
            }
        }
    }

    //测试更新用户
    @Test
    public void testUpdateUser() {
        SqlSession session = null;
        Users u =null;

        try {
            session = SqlSessionFactoryUtil.openSqlSession();
            UsersMapper usersMapper = session.getMapper(UsersMapper.class);
            u = usersMapper.getUserByUid(11);
            u.setPassword("888888");
            u.setMobile("13991988765");
            int result = usersMapper.updateUser(u);
            session.commit();
        } catch (Exception ex) {
            ex.printStackTrace();
            session.rollback();
            session.commit();
        } finally {
            if (session != null) {
                session.close();
            }
        }
    }

    //测试删除用户
    @Test
    public void testDeleteUser() {
        SqlSession session = null;
        try {
            session = SqlSessionFactoryUtil.openSqlSession();
            UsersMapper usersMapper = session.getMapper(UsersMapper.class);
            int result = usersMapper.deleteUser(11);

            session.commit();
        } catch (Exception ex) {
            ex.printStackTrace();
            session.rollback();
            session.commit();
        } finally {
            if (session != null) {
                session.close();
            }
        }
    }

    //测试查询所有用户返回Map
    @Test
    public void testQueryAllUsersWithMap() {
        SqlSession session = null;
        try {
            session = SqlSessionFactoryUtil.openSqlSession();
            UsersMapper usersMapper = session.getMapper(UsersMapper.class);
            Map<String, Object> map = usersMapper.geUserByUidReturnMap(3);
            Set<String> keySet = map.keySet();
            Iterator<String> iterator = keySet.iterator();
            while (iterator.hasNext()) {
                String key = iterator.next();
                Object u = map.get(key);
                System.out.println(key + "=" + u);
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            try {
                if (session != null) {
                    session.close();
                    session = null;
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }
}