MyBatis - 初学笔记

MyBatis - 初学笔记

前提准备:

mysql假数据:
/*
Navicat MySQL Data Transfer

Source Server         : test
Source Server Version : 50520
Source Host           : localhost:3306
Source Database       : employeedb

Target Server Type    : MYSQL
Target Server Version : 50520
File Encoding         : 65001

Date: 2021-05-09 16:46:28
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `dept`
-- ----------------------------
DROP TABLE IF EXISTS `dept`;
CREATE TABLE `dept` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `dept_name` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of dept
-- ----------------------------
INSERT INTO `dept` VALUES ('1', '开发部');
INSERT INTO `dept` VALUES ('2', '市场部');
INSERT INTO `dept` VALUES ('3', '客服部');

-- ----------------------------
-- Table structure for `userinfo`
-- ----------------------------
DROP TABLE IF EXISTS `userinfo`;
CREATE TABLE `userinfo` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `e_name` varchar(20) DEFAULT NULL,
  `sex` varchar(10) DEFAULT NULL,
  `email` varchar(100) DEFAULT NULL,
  `deptid` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `FK_userinfo` (`deptid`),
  CONSTRAINT `FK_userinfo` FOREIGN KEY (`deptid`) REFERENCES `dept` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=72 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of userinfo
-- ----------------------------
INSERT INTO `userinfo` VALUES ('1', '小明', '女', 'ee33@.com', '3');
INSERT INTO `userinfo` VALUES ('2', '张三', '女', 'zhangshan@126.com', '2');
INSERT INTO `userinfo` VALUES ('3', '李四', '男', 'lisi@126.com', '1');
INSERT INTO `userinfo` VALUES ('4', '王五', '男', 'wangwu@126.com', '3');
INSERT INTO `userinfo` VALUES ('5', '刘兴', '男', 'ldh@126.com', '3');
INSERT INTO `userinfo` VALUES ('6', '李晓红', '女', 'lixh@126.com', '3');
INSERT INTO `userinfo` VALUES ('7', '王璐璐', '男', 'wlulu@126.com', '1');
INSERT INTO `userinfo` VALUES ('8', '刘亮亮', '男', 'liull@126.com', '1');
INSERT INTO `userinfo` VALUES ('9', 'jim', '男', 'jim@126.com', '1');
INSERT INTO `userinfo` VALUES ('10', '李晓辉', '男', 'lxh@126.com', '1');
INSERT INTO `userinfo` VALUES ('11', '王明', '男', 'wm@126.com', '1');
INSERT INTO `userinfo` VALUES ('12', '杨丹丹', '女', 'yangdd@126.com', '1');
INSERT INTO `userinfo` VALUES ('13', '郭欣莉', '女', 'guoxl@126.com', '1');
INSERT INTO `userinfo` VALUES ('14', '刘璐', '女', 'ere@23.com', '3');
INSERT INTO `userinfo` VALUES ('15', 'tom', '男', 'tom@126.com', '1');
INSERT INTO `userinfo` VALUES ('16', '于洪', '女', 'yh@12.com', '2');
INSERT INTO `userinfo` VALUES ('17', '刘小莉', '女', 'yy@23.com', '1');

-- ----------------------------
-- Procedure structure for `CountProc`
-- ----------------------------
DROP PROCEDURE IF EXISTS `CountProc`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `CountProc`(OUT param1 INT)
BEGIN
    SELECT COUNT(*) INTO param1 FROM student;
    END
;;
DELIMITER ;

-- ----------------------------
-- Procedure structure for `mycursor`
-- ----------------------------
DROP PROCEDURE IF EXISTS `mycursor`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `mycursor`(IN id INT)
BEGIN
     ##声明游标
      DECLARE testcursor CURSOR FOR SELECT `name`,age FROM student WHERE id < id;
      
    END
;;
DELIMITER ;

-- ----------------------------
-- Procedure structure for `proc`
-- ----------------------------
DROP PROCEDURE IF EXISTS `proc`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `proc`()
BEGIN
	SELECT * FROM student;
    END
;;
DELIMITER ;

-- ----------------------------
-- Procedure structure for `proc2`
-- ----------------------------
DROP PROCEDURE IF EXISTS `proc2`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `proc2`(IN `name` VARCHAR(100), IN age INT, IN address VARCHAR(100))
BEGIN
    INSERT INTO  student VALUES(NULL,`name`,age,address);
    END
;;
DELIMITER ;

-- ----------------------------
-- Procedure structure for `proc3`
-- ----------------------------
DROP PROCEDURE IF EXISTS `proc3`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `proc3`(INOUT param VARCHAR(100))
BEGIN
     SELECT param;
     SET param = 'hello world';
    END
;;
DELIMITER ;

-- ----------------------------
-- Procedure structure for `var1`
-- ----------------------------
DROP PROCEDURE IF EXISTS `var1`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `var1`()
BEGIN
	    DECLARE age INT DEFAULT 10;
	    DECLARE myname VARCHAR(10) ;
	    DECLARE address VARCHAR(10) ;
	    
	    SET age = 23;
	    SET myname = 'jim';
	    SELECT `name` INTO myname FROM student WHERE id = 2;
	    SET address = '哈尔滨';
	    SELECT age , myname , address; 
    END
;;
DELIMITER ;

-- ----------------------------
-- Procedure structure for `var2`
-- ----------------------------
DROP PROCEDURE IF EXISTS `var2`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `var2`()
BEGIN
	    DECLARE age INT ;
	    SET age = 10;
	    IF (age < 5)  
	       THEN SELECT '年龄太小了' ;  
	    ELSEIF (age >=5 AND age <=10 )
	    THEN SELECT '年龄合适' ;
	    ELSE
	      SELECT '年龄太大了' ;
	    END IF;  
    END
;;
DELIMITER ;

-- ----------------------------
-- Procedure structure for `var3`
-- ----------------------------
DROP PROCEDURE IF EXISTS `var3`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `var3`()
BEGIN
	    DECLARE avgage INT ;
	    SELECT AVG(age) INTO avgage FROM student; 
	    IF (avgage > 23)
	      THEN SELECT * FROM student ORDER BY age DESC LIMIT 0,3;
	    END IF;
    END
;;
DELIMITER ;

-- ----------------------------
-- Procedure structure for `var4`
-- ----------------------------
DROP PROCEDURE IF EXISTS `var4`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `var4`()
BEGIN
	    DECLARE temp INT ;
	    SET temp = 1;
	    WHILE( temp <= 10 )
	    DO
	      SET temp = temp + 1;
	    END WHILE;
	    
	    SELECT temp;
    END
;;
DELIMITER ;

-- ----------------------------
-- Procedure structure for `var5`
-- ----------------------------
DROP PROCEDURE IF EXISTS `var5`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `var5`()
BEGIN
     DECLARE temp INT ;
      SET temp = 1;
      add_loop: LOOP   ##add_loop 代表一个循环标记
      SET temp = temp + 1 ;
      IF(temp >= 50) THEN LEAVE add_loop; ## LEAVE 表示退出  add_loop 循环
      END IF;
     END LOOP add_loop;
     SELECT temp;
    END
;;
DELIMITER ;

-- ----------------------------
-- Procedure structure for `var6`
-- ----------------------------
DROP PROCEDURE IF EXISTS `var6`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `var6`()
BEGIN
     DECLARE temp INT ;
      SET temp = 1;
      add_loop: LOOP   ##add_loop 代表一个循环标记
      SET temp = temp + 1 ;
      INSERT INTO student VALUES(NULL,CONCAT('张三',temp),23,'北京');
      IF(temp >= 1000) THEN LEAVE add_loop; ## LEAVE 表示退出  add_loop 循环
      END IF;
     END LOOP add_loop;
    END
;;
DELIMITER ;

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="database.properties">
<!--        <property name="driver" value="com.mysql.jdbc.Driver"/>-->
<!--        <property name="url" value="jdbc:mysql://localhost:3306/employeedb?characterEncoding=utf-8&amp;serverTimezone=UTC"/>-->
<!--        <property name="username" value="root"/>-->
<!--        <property name="password" value="root1234"/>-->
    </properties>

    <typeAliases>
<!--        <typeAlias alias="Userinfo" type="com.kzr.entity.Userinfo"></typeAlias>-->
        <package name="com.kzr.entity"/><!-- 默认小写 -->
    </typeAliases>

    <environments default="development">

        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!-- 数据库连接信息 -->
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>

    </environments>

    <!-- 加载sql映射文件 -->
    <mappers>
            <!-- 基于xml -->
<!--        <mapper resource="com/kzr/mapper/UserinfoMapper.xml"/>-->
<!--        <mapper resource="com/kzr/mapper/DeptMapper.xml"/>-->
            <!-- 基于接口 支持注解开发 -->
<!--            <mapper class="com.kzr.mapper.UserinfoMapper"/>-->
            <!-- 基于接口(按包扫描)-->
            <package name="com.kzr.mapper"/>
    </mappers>

</configuration>
database.properties:
driver = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/employeedb?characterEncoding=utf-8&amp;serverTimezone=UTC
username = root
password = root1234
util:
MybatisUnit单例模式:
package com.kzr.util;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

public class MyBatisUnit {
    /**
     * 单例: 饿汉式(用到创建) 和 懒汉式(用不用到都创建)
     * 1.对象私有化且静态
     * 2.构造方法私有化
     * 3.对单例对象提供对外访问的方法
     */
    //静态 应用程序还在 其就在
    private static SqlSessionFactory sqlSessionFactory;

    private MyBatisUnit(){
        super();
    }

    public static SqlSessionFactory getSqlSessionFactory() throws IOException {
        if (sqlSessionFactory == null) {
            String resource = "MyBatis_config.xml";
            // 读取配置文件
            InputStream inputStream = Resources.getResourceAsStream(resource);
            // Session工厂
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        }
            return sqlSessionFactory;
    }

}

MyBatis:

entity类:

dept对应的实体类:
package com.kzr.entity;

public class Dept {
    private Integer id;
    private String dept_name;

    @Override
    public String toString() {
        return "Dept{" +
                "id=" + id +
                ", dept_name='" + dept_name + '\'' +
                '}';
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getDept_name() {
        return dept_name;
    }

    public void setDept_name(String dept_name) {
        this.dept_name = dept_name;
    }
}
Userinfo对应的实体类:
package com.kzr.entity;

public class Userinfo {
    private Integer id;
    private String eName;
    private String sex;
    private String email;
    private Integer deptid;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String geteName() {
        return eName;
    }

    public void seteName(String eName) {
        this.eName = eName;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Integer getDeptid() {
        return deptid;
    }

    public void setDeptid(Integer deptid) {
        this.deptid = deptid;
    }
    @Override
    public String toString() {
        return "Userinfo{" +
                "id=" + id +
                ", eName='" + eName + '\'' +
                ", sex='" + sex + '\'' +
                ", email='" + email + '\'' +
                ", deptid=" + deptid +
                '}';
    }

    public Userinfo(String eName, String sex, String email, Integer deptid) {
        this.eName = eName;
        this.sex = sex;
        this.email = email;
        this.deptid = deptid;
    }

    public Userinfo() {
    }
}

mapper类:(对应接口和xml文件)

DeptMapper接口:
package com.kzr.mapper;

import com.kzr.entity.Dept;

import java.util.List;

public interface DeptMapper {
    /**
     * 查询数量
     * @return
     */
    Integer selectdept();

    /**
     * 查询所有
     * @return
     */
    List<Dept> selectAll();

    /**
     * 添加部门
     * @param dept
     * @return
     */
    Integer insertdept(Dept dept);

    /**
     * 修改部门
     * @param dept
     * @return
     */
    Integer updatedept(Dept dept);

    /**
     * 删除部门
     * @param id
     * @return
     */
    Integer delectdept(Integer id);
}
UserinfoMapper接口:
package com.kzr.mapper;

import com.kzr.entity.Userinfo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface UserinfoMapper {
    /**
     * 查询数量
     * @return
     */
    Integer selectcount();

    /**
     * 查询所有
     * @return
     */
    List<Userinfo> selectAll();

    /**
     * 添加数据
     */
    Integer insertuserinfo(Userinfo userinfo);

    /**
     * 修改
     */
    Integer updateuserinfo(Userinfo userinfo);

    /**
     * 删除
     */
    Integer deleteuserinfo(Integer userinfonumber);

    /**
     * 通过id 查用户
     * @param id
     * @return
     */
    Userinfo selectByID(Integer id);

    /**
     * 姓别 和 部门id 查询
     * @param sex
     * @param deptid
     * @return
     */
      List<Userinfo> selectByMany(@Param("sex") String sex, @Param("deptid") Integer deptid);
//    List<Userinfo> selectByMany(Map map);

    /**
     * 按名字模糊查询
     * @param eName
     * @return
     */
      List<Userinfo> selectByName(String eName);
}

xml配置文件:

DeptMapper.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.kzr.mapper.DeptMapper">
    <select id="selectdept"  resultType="int">
        select count(*) from dept;
    </select>

    <select id="selectAll" resultType="dept">
        select * from dept;
    </select>

    <insert id="insertdept" parameterType="dept">
        insert into dept(dept_name) values (#{dept_name});
    </insert>

    <update id="updatedept" parameterType="dept">
        update dept set dept_name = #{dept_name} where id = #{id}
    </update>

    <delete id="delectdept" parameterType="int">
        delete from dept where id = #{id}
    </delete>
</mapper>
UserinfoMapper.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.kzr.mapper.UserinfoMapper">
    
    <resultMap type="userinfo" id="userinfoMap">
        <id column="id" property="id"/>
        <result column="e_name" property="eName"/>
        <result column="sex" property="sex"/>
        <result column="email" property="email"/>
        <result column="deptid" property="deptid"/>
    </resultMap>

    <select id="selectcount"  resultType="int">
        select count(*) from userinfo;
    </select>

    <select id="selectByID" resultMap="userinfoMap" resultType="userinfo">
        select * from userinfo where id = #{id}
    </select>

    <select id="selectByMany" resultMap="userinfoMap" resultType="userinfo">
        select * from userinfo where sex = #{sex} and deptid = #{deptid}
    </select>

    <!-- 基于默认映射,同名映射 -->
    <select id="selectAll" resultMap="userinfoMap" resultType="userinfo">
        select * from userinfo;
    </select>

    <select id="selectByName" resultMap="userinfoMap"  resultType="userinfo" >
        select * from userinfo where e_name like concat(#{eName},'%')
    </select>

    <insert id="insertuserinfo" parameterType="userinfo">
        insert into userinfo(e_name,sex,email,deptid) values (#{eName},#{sex},#{email},#{deptid});
    </insert>

    <update id="updateuserinfo" parameterType="userinfo">
        update userinfo set
        e_name = #{eName},
        sex = #{sex},
        email = #{email},
        deptid = #{deptid}
        where id = #{id}
    </update>

    <delete id="deleteuserinfo" parameterType="int">
    delete from userinfo where id = #{id}
    </delete>
</mapper>
注意:
1、id与接口名字相同
2、ResultType相对与ResultMap而言更简单一点。只有满足ORM时,即数据库表中的字段名和实体类中的属性完全一致时,才能使用,否则会出现数据不显示的情况。
3、ResultMap和ResultType的功能类似,但是ResultMap更强大一点,ResultMap可以实现将查询结果映射为复杂类型的pojo。
4、当需要多个参数时候需要使用@Param进行传参

本测试用例使用字段e_name 与 实体类中字段名不相符合使用下述代码

    <resultMap type="userinfo" id="userinfoMap">
        <id column="id" property="id"/>
        <result column="e_name" property="eName"/>
        <result column="sex" property="sex"/>
        <result column="email" property="email"/>
        <result column="deptid" property="deptid"/>
    </resultMap>
column --- 对应字段名
property --- 实体类属性名
使用resultMap进行映射

测试类:

一:基于接口
Dept测试类:
package com.kzr.test;

import com.kzr.entity.Dept;
import com.kzr.mapper.DeptMapper;
import com.kzr.util.MyBatisUnit;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;

import java.io.IOException;
import java.util.List;

public class DeptTest {
    /**
     * 查询条数(统计) xml
     * @throws IOException
     */
    @Test
    public void countUserInfo1() throws IOException {
        SqlSessionFactory sqlSessionFactory = MyBatisUnit.getSqlSessionFactory();
        SqlSession sqlSession = sqlSessionFactory.openSession();
        int number = sqlSession.getMapper(DeptMapper.class).selectdept();
        System.out.println("查询条数共:" + number + "条");
    }

    @Test
    public void countUserInfo2() throws IOException {
        SqlSessionFactory sqlSessionFactory = MyBatisUnit.getSqlSessionFactory();
        SqlSession sqlSession = sqlSessionFactory.openSession();
        int number = sqlSession.getMapper(DeptMapper.class).selectdept();
        System.out.println("查询条数共:" + number + "条");
    }

    /**
     * 查询所有表名
     * @throws IOException
     */
    @Test
    public void selectAll() throws IOException {
        SqlSessionFactory sqlSessionFactory = MyBatisUnit.getSqlSessionFactory();
        SqlSession sqlSession = sqlSessionFactory.openSession();
        List<Dept> depts = sqlSession.getMapper(DeptMapper.class).selectAll();
        for (Dept dept : depts) {
            System.out.println("部门名:" + dept.getDept_name());
        }
    }

    /**
     * 添加部门
     * @throws IOException
     */
    @Test
    public void insertDept() throws IOException {
        SqlSessionFactory sqlSessionFactory = MyBatisUnit.getSqlSessionFactory();
        SqlSession sqlSession = sqlSessionFactory.openSession();
        Dept dept = new Dept();
        dept.setDept_name("咸鱼部门");
        int row = sqlSession.getMapper(DeptMapper.class).insertdept(dept);
        if (row > 0){
            System.out.println("添加成功");
            sqlSession.commit();
        }else {
            System.out.println("添加失败");
        }
        sqlSession.close();
    }

    /**
     * 修改部门
     * @throws IOException
     */
    @Test
    public void updataDept() throws IOException {
        SqlSessionFactory sqlSessionFactory = MyBatisUnit.getSqlSessionFactory();
        SqlSession sqlSession = sqlSessionFactory.openSession();
        Dept dept = new Dept();
        dept.setDept_name("永杰部门");
        dept.setId(4);
        int row = sqlSession.getMapper(DeptMapper.class).updatedept(dept);
        if (row > 0){
            System.out.println("修改成功");
            sqlSession.commit();
        }else {
            System.out.println("修改失败");
        }
        sqlSession.close();
    }

    /**
     * 删除部门
     * @throws IOException
     */
    @Test
    public void delectDept() throws IOException {
        SqlSessionFactory sqlSessionFactory = MyBatisUnit.getSqlSessionFactory();
        SqlSession sqlSession = sqlSessionFactory.openSession();
        int number = 5;
        int row = sqlSession.getMapper(DeptMapper.class).delectdept(number);
        if (row > 0){
            System.out.println("删除成功");
            sqlSession.commit();
        }else {
            System.out.println("删除失败");
        }
        sqlSession.close();
    }
}
Userinfo测试类:
package com.kzr.test;

import com.kzr.entity.Userinfo;
import com.kzr.mapper.UserinfoMapper;
import com.kzr.util.MyBatisUnit;
import com.kzr.util.SessionFactoryUtil;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;

import java.io.IOException;
import java.util.List;

/**
 * 基于接口执行 getMapper()
 */
public class TEST2 {
    /**
     * 查询条数(统计)
     * @throws IOException
     */
    @Test
    public void countUserInfo() throws IOException {

        SqlSession sqlSession = SessionFactoryUtil.getSqlSession();
        int number = sqlSession.getMapper(UserinfoMapper.class).selectcount();
        System.out.println("查询条数共:" + number + "条");

    }
    /**
     * 查询所有表
     * @throws IOException
     */
    @Test
    public void query() throws IOException {
        SqlSession sqlSession = SessionFactoryUtil.getSqlSession();

        List<Userinfo> userinfos = sqlSession.getMapper(UserinfoMapper.class).selectAll();
        for (Userinfo userinfo : userinfos) {
            System.out.println("编号:" + userinfo.getId()+ "\t" + "姓名:"+ userinfo.geteName() + "\t" + "emil:"+ userinfo.getEmail() + "\t" +
            "性别:" + userinfo.getSex() +"\t" + "部门编号:" + userinfo.getDeptid());
        }

        sqlSession.close();
    }

    /**
     * 插入数据
     * @throws IOException
     */
    @Test
    public void insert() throws IOException {
        SqlSession sqlSession = SessionFactoryUtil.getSqlSession();

        Userinfo userinfo = new Userinfo();
        userinfo.seteName("李康");
        userinfo.setEmail("990242941@qq.com");
        userinfo.setSex("男");
        userinfo.setDeptid(3);

       int row = sqlSession.getMapper(UserinfoMapper.class).insertuserinfo(userinfo);

       if (row > 0){
           System.out.println("插入成功");
       }else {
           System.out.println("插入失败");
       }
        sqlSession.commit();
        sqlSession.close();
    }

    /**
     * 修改数据
     * @throws IOException
     */
    @Test
    public void update() throws IOException {
        SqlSession sqlSession = SessionFactoryUtil.getSqlSession();

        Userinfo userinfo = new Userinfo();
        userinfo.seteName("李康");
        userinfo.setEmail("1469025049@qq.com");
        userinfo.setSex("男");
        userinfo.setDeptid(3);
        userinfo.setId(72);

        sqlSession.getMapper(UserinfoMapper.class).updateuserinfo(userinfo);


        sqlSession.commit();
        sqlSession.close();
    }

    /**
     * 删除数据
     * @throws IOException
     */
    @Test
    public void delect() throws IOException {
        SqlSessionFactory sf = SessionFactoryUtil.getSessionFactory();
        SqlSession sqlSession = sf.openSession();
        int num = 72;

        sqlSession.getMapper(UserinfoMapper.class).deleteuserinfo(num);

        sqlSession.commit();
        sqlSession.close();
    }

    /**
     * 根据id 查询用户
     */
    @Test
    public void selectByID() throws IOException {
        SqlSession sqlSession = MyBatisUnit.getSqlSessionFactory().openSession();
        int id = 2;
        Userinfo userinfo = sqlSession.getMapper(UserinfoMapper.class).selectByID(id);
        System.out.println("姓名:" + userinfo.geteName() + "部门:" + userinfo.getDeptid());
    }

    /**
     * 根据性别和部门查询
     * @throws IOException
     */
    @Test
    public void selectByMany() throws IOException {
        SqlSession sqlSession = MyBatisUnit.getSqlSessionFactory().openSession();
        String sex = "男";
        Integer id = 1;
        /**
        Map<String,String> map = new HashMap<String,String>();
        map.put("sex",sex);
        map.put("deptid", String.valueOf(id));
        List<Userinfo> userinfos = sqlSession.getMapper(UserinfoMapper.class).selectByMany(map);map
       **/
        List<Userinfo> userinfos = sqlSession.getMapper(UserinfoMapper.class).selectByMany(sex,id);
        for (Userinfo userinfo : userinfos){
            System.out.println("姓名" + userinfo.geteName() + "性别" + userinfo.getSex());
        }
        sqlSession.close();
    }

    /**
     *
     * @throws IOException
     */
    @Test
    public void selectByname() throws IOException {
        SqlSession sqlSession = MyBatisUnit.getSqlSessionFactory().openSession();
        List<Userinfo> userinfos = sqlSession.getMapper(UserinfoMapper.class).selectByName("李");
        for (Userinfo userinfo : userinfos){
            System.out.println("姓名" + userinfo.geteName() + "性别" + userinfo.getSex());
        }
        sqlSession.close();
    }
}
二:直接调用:
UserInfo对应的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="test">
    
    <resultMap type="com.kzr.entity.Userinfo" id="userinfoMap">
        <id column="id" property="id"/>
        <result column="e_name" property="eName"/>
        <result column="sex" property="sex"/>
        <result column="email" property="email"/>
        <result column="deptid" property="deptid"/>
    </resultMap>

    <select id="selectcount" resultMap="userinfoMap" resultType="int">
        select count(*) from userinfo;
    </select>

    <select id="selectAll" resultMap="userinfoMap" resultType="com.kzr.entity.Userinfo">
        select * from userinfo;
    </select>

    <insert id="insertuserinfo">
        insert into userinfo(e_name,sex,email,deptid) values (#{eName},#{sex},#{email},#{deptid});
    </insert>

    <update id="updateuserinfo">
        update userinfo set
        e_name = #{eName},
        sex = #{sex},
        email = #{email},
        deptid = #{deptid}
        where id = #{id}
    </update>

    <delete id="deleteuserinfo">
    delete from userinfo where id = #{id}
    </delete>
</mapper>
Userinfo实现类:
package com.kzr.test;
import com.kzr.entity.Userinfo;
import com.kzr.util.SessionFactoryUtil;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;
import java.io.IOException;
import java.util.List;

public class Main {

    /**
     * 查询所有表
     * @throws IOException
     */
    @Test
    public void query() throws IOException {
        SqlSession sqlSession = SessionFactoryUtil.getSqlSession();

        List<Userinfo> userinfos = sqlSession.selectList("test.selectAll");
        System.out.println(userinfos);

        sqlSession.close();
    }

    /**
     * 插入数据
     * @throws IOException
     */
    @Test
    public void insert() throws IOException {
        SqlSession sqlSession = SessionFactoryUtil.getSqlSession();


        Userinfo userinfo = new Userinfo();
        userinfo.seteName("康振荣");
        userinfo.setEmail("990242941@qq.com");
        userinfo.setSex("男");
        userinfo.setDeptid(3);

        int row = sqlSession.insert("test.insertuserinfo",userinfo);

        if (row > 0){
            System.out.println("恭喜您插入了" + row + "条数据");
        }else {
            System.out.println("执行操作失败");
        }

        sqlSession.commit();
        sqlSession.close();
    }

    /**
     * 修改数据
     * @throws IOException
     */
    @Test
    public void update() throws IOException {
        SqlSession sqlSession = SessionFactoryUtil.getSqlSession();

        Userinfo userinfo = new Userinfo();
        userinfo.seteName("康振荣");
        userinfo.setEmail("1469025049@qq.com");
        userinfo.setSex("男");
        userinfo.setDeptid(2);
        userinfo.setId(72);

        int row = sqlSession.update("test.updateuserinfo",userinfo);
        if (row > 0){
            System.out.println("已修改成功");
        }else {
            System.out.println("修改失败");
        }

        sqlSession.commit();
        sqlSession.close();
    }

    /**
     * 删除数据
     * @throws IOException
     */
    @Test
    public void delect() throws IOException {
        SqlSessionFactory sf = SessionFactoryUtil.getSessionFactory();
        SqlSession sqlSession = sf.openSession();

        int row = sqlSession.delete("test.deleteuserinfo",73);
        if (row > 0){
            System.out.println("删除成功");
        }else {
            System.out.println("删除失败");
        }

        sqlSession.commit();
        sqlSession.close();
    }
}

调用方法方式:

1、基于接口执行 getMapper()
sqlSession.getMapper(UserinfoMapper.class).selectByMany(map);
2、session.selectList("mybatis.xml中的id")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值