【Mybatis】(五)执行CRUD操作

简介: 【Mybatis】(五)执行CRUD操作

文章目录


引言


1、定义UserMapper.xml

2、定义UserMapper接口

3、单元测试类


引言


经过第一章节【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();
    }
}



目录
相关文章
|
2月前
|
SQL Java 数据库连接
MyBatis-Plus:简化 CRUD 操作的艺术
MyBatis-Plus 是一个基于 MyBatis 的增强工具,它旨在简化 MyBatis 的使用,提高开发效率。
54 1
MyBatis-Plus:简化 CRUD 操作的艺术
|
6月前
|
XML Java 数据库连接
【MyBatis】MyBatis操作数据库(一)
【MyBatis】MyBatis操作数据库(一)
52 1
|
6月前
|
XML Java 数据库连接
如何使用 MyBatis 来进行增、删、改、查操作
如何使用 MyBatis 来进行增、删、改、查操作
220 2
|
6月前
|
SQL 存储 Java
基于MyBatis的增删改查操作
基于MyBatis的增删改查操作
43 1
|
2月前
|
SQL Java 数据库连接
Mybatis方式完成CRUD操作
Mybatis方式完成CRUD操作
41 0
|
6月前
|
缓存 Java 数据库连接
我们后端程序员不是操作MyBatis的CRUD Boy
大家好,我是南哥。一个对Java程序员进阶成长颇有研究的人,今天我们接着新的一篇Java进阶指南。为啥都戏称后端是CRUD Boy?难道就因为天天怼着数据库CRUD吗?要我说,是这个岗位的位置要的就是你CRUD,你不得不CRUD。哪有公司天天能给你搭建高并发、高可用、大数据框架的活呢,一条业务线总要成长吧,慢慢成熟了就要装修工来缝缝补补、美化美化,也就是CRUD的活。不能妄自菲薄CRUD Boy,我们是后端工程师。今天来指南下操作数据库之MyBatis框架。
130 3
我们后端程序员不是操作MyBatis的CRUD Boy
|
5月前
|
SQL 缓存 Java
使用MyBatis优化Java持久层操作
使用MyBatis优化Java持久层操作
MybatisPlus-标准CRUD制作,新增boolean save(T t),删除 ~ delete(int id),修改 ~ update(T t),根据id查询,T getById....
MybatisPlus-标准CRUD制作,新增boolean save(T t),删除 ~ delete(int id),修改 ~ update(T t),根据id查询,T getById....
|
6月前
|
SQL XML Java
【MyBatis】 MyBatis框架下的高效数据操作:深入理解增删查改(CRUD)
【MyBatis】 MyBatis框架下的高效数据操作:深入理解增删查改(CRUD)
47 1
|
5月前
|
SQL 缓存 Java
使用MyBatis优化Java持久层操作
使用MyBatis优化Java持久层操作