【Mybatis】(五)执行CRUD操作

147 阅读2分钟

文章目录

引言

经过第一章节【Mybatis】(一)MyBatis入门 & 第一个MyBatis实例 ,我们已经初步搭建了 MyBatis 框架,实现了查询所有记录的功能,并用 JUnit 进行了单元测试,接下来我们将在此基础上使用基于XML的方式对表进行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="cn.kgc.dao.user.UserMapper">
  
    <!--
    namespace:名称空间;指定为接口的全类名
    id:唯一标识,此时与接口的方法名相对应(getEmpById)
    resultType:返回值类型
    #{id}:从传递过来的参数中取出id值
    public Employee getEmpById(Integer id);
     -->

  <select id="login" resultType="user" parameterType="string">
      select u.*
      from smbms_user u
      left join  smbms_address ad
      on u.id=ad.userId
      left join smbms_role ro
      on u.userRole=ro.id
      where userCode=#{userCode}
      and userPassword=#{userPassword}
  </select>
  
    <!--共用结果集-->
    <resultMap id="userDetail" type="user">
        <id property="id" column="id"/>
        <result property="userCode" column="userCode"/>
        <result property="userName" column="userName"/>
        <result property="gender" column="gender"/>
        <result property="birthday" column="birthday"/>
        <result property="phone" column="phone"/>
        <result property="address" column="address"/>
        <association property="role" javaType="role">
            <id property="id" column="id"/>
            <result property="roleName" column="roleName"/>
        </association>
        <association property="addr" javaType="address">
            <id property="id" column="id"/>
            <result property="tel" column="tel"/>
        </association>
    </resultMap>

    <!--详情页面展示-->
    <select id="userList" resultMap="userDetail" >
        select u.*,r.*
        from smbms_user u
        left join
        smbms_role r
        on u.userRole=r.id
    </select>

    <!--根据用户查询详情-->
    <select id="getUserListByName" resultMap="userDetail" parameterType="string">
        select u.*,r.*
        from smbms_user u
        left join
        smbms_role r
        on u.userRole=r.id
        where u.userName like concat("%",#{uname},"%")
   </select>

    <!--根据职位名称查询详情-->
    <select id="getUserListByRoleName" resultMap="userDetail" parameterType="string">
        select u.*,r.*roleName
        from smbms_user u
        left join
        smbms_role r
        on u.userRole=r.id
        where r.roleName=#{roleName}
    </select>

    <!--根据用户名和用户角色查询详情-->
    <select id="getUserByNameAndRole" resultMap="userDetail" parameterType="string">
        select u.*,r.roleName
        from smbms_user u
        left join
        smbms_role r
        on u.userRole=r.id
       <where>
           <if test="roleName !=null">
               r.roleName=#{roleName}
           </if>
           <if test="userName!=null">
               and u.userName like concat("%",#{userName},"%")
           </if>
       </where>
   </select>

    <!--用户信息修改-->
    <update id="modifyUserById" parameterType="user">
       update smbms_user set
          userName=#{userName},
          gender=#{gender},
          birthday=#{birthday},
          phone=#{phone},address=#{address},
          userRole=(
            select id from smbms_role
              where roleName=#{userRoleName}
            )
          where id=#{id}
    </update>

    <!--新增用户-->
    <insert id="addUser" parameterType="user">
        insert into  smbms_user
        (userCode,userName,userPassword,gender,
        birthday,phone,address,userRole,createdBy,creationDate)
        values (
        #{userCode},#{userName},#{userPassword}, #{gender}, #{birthday},#{phone}, #{address},
        (select id from smbms_role where roleName =#{userRoleName}),
        #{createdBy},#{creationDate}
        )
    </insert>

    <!--删除用户-->
    <delete id="deleteUserById" parameterType="int">
        delete from smbms_user where id=#{id}
    </delete>
</mapper>

2、定义UserMapper接口

package cn.kgc.dao.user;

import cn.kgc.entity.User;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface UserMapper {

    User login(User user);
    List<User> userList();
    List<User> getUserListByName(String uame);
    List<User> getUserListByRoleName(String roleName);
    void modifyUserById(User user);
    void addUser(User user);
    void deleteUserById(int id);

    List<User> getUserByNameAndRole(@Param(value = "userName") String userName,@Param(value = "roleName") String roleName);
    
}

3、单元测试类

package cn.kgc.dao.user;
import cn.kgc.entity.User;
import cn.kgc.util.MyBatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.log4j.Logger;
import org.junit.*;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.logging.SimpleFormatter;

public class UserMapperTest {
    Logger logger=Logger.getLogger(UserMapperTest.class);
   
    @Test
    public void test(){
        //测试方法
        SqlSessionFactory factory=null;
        SqlSession session=null;
        int count=0;
            //1.读取mybatis配置,转成io流
    //        InputStream is= Resources.getResourceAsStream("mybatis-config.xml");
            //2.利用io流对factory对象赋值
    //        factory= new SqlSessionFactoryBuilder().build(is);
            //3.由工厂创建SqlSession对象
            session= MyBatisUtil.getSession();
            //由session对象进行语句查询
        // 调用getMapper(UserMapper.class)执行UserMapper接口方式
            count=session.getMapper(UserMapper.class).cnt();
    //        count=session.selectOne("cn.kgc.dao.user.UserMapper.cnt");
            MyBatisUtil.closeSession();
            logger.info(count);
    }

    @Test
    public void login(){
        SqlSession session=MyBatisUtil.getSession();
        User user=new User();
        user.setUserCode("yangguo");
        user.setUserPassword("0000000");
        user=session.getMapper(UserMapper.class).login(user);
        logger.info(user);
        logger.info(user.getAge());
        MyBatisUtil.closeSession();
    }

    @Test
    public void userList(){
        SqlSession session=MyBatisUtil.getSession();
        List<User> users=session.getMapper(UserMapper.class).userList();
        logger.info(users);
        MyBatisUtil.closeSession();
    }

    @Test
    public void getUserListByName(){
        SqlSession session=MyBatisUtil.getSession();
        List<User> users=session.getMapper(UserMapper.class).getUserListByName("赵");
        logger.info(users);
        MyBatisUtil.closeSession();
    }

    @Test
    public void getUserListByRoleName(){
        SqlSession session=MyBatisUtil.getSession();
        List<User> list=session.getMapper(UserMapper.class).getUserListByRoleName("经理");
        logger.info(list);
        MyBatisUtil.closeSession();
    }

    @Test
    public void modifyUserById() {
        SqlSession session=MyBatisUtil.getSession();
        User user=new User();
        user.setId(15);
        user.setUserName("赵敏");
        user.setGender(1);
        try {
            user.setBirthday(new SimpleDateFormat("yyyy-mm-dd").parse("1987-12-12"));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        user.setPhone("18136249881");
        user.setAddress("北京市昌平区");
        session.getMapper(UserMapper.class).modifyUserById(user);
        MyBatisUtil.closeSession();
    }

    @Test
    public void addUser(){
        SqlSession session=MyBatisUtil.getSession();
        User user=new User();
        user.setUserCode("sun");
        user.setUserName("小孙");
        user.setUserPassword("1111111");
        user.setGender(1);
        user.setCreatedBy(1);
        user.setUserRoleName("普通员工");
        try {
            user.setBirthday(new SimpleDateFormat("yyyy-mm-dd").parse("2000-12-12"));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        user.setPhone("18136649881");
        user.setAddress("北京市昌平区老钢厂");
        session.getMapper(UserMapper.class).addUser(user);
        MyBatisUtil.closeSession();
    }

    @Test
    public void deleteUserById(){
        SqlSession session=MyBatisUtil.getSession();
        session.getMapper(UserMapper.class).deleteUserById(16);
        MyBatisUtil.closeSession();
    }


    @Test
    public void getUserByNameAndRole(){
        SqlSession session=MyBatisUtil.getSession();
        List<User> list=session.getMapper(UserMapper.class).getUserByNameAndRole("赵","经理");
        logger.info(list);
        MyBatisUtil.closeSession();
    }
}