MyBatis - 初学笔记

前提准备:

mysql假数据:

/*
Navicat MySQL Data TransferSource Server         : test
Source Server Version : 50520
Source Host           : localhost:3306
Source Database       : employeedbTarget Server Type    : MYSQL
Target Server Version : 50520
File Encoding         : 65001Date: 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)
BEGINSELECT 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`()
BEGINSELECT * 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))
BEGININSERT 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))
BEGINSELECT param;SET param = 'hello world';END
;;
DELIMITER ;-- ----------------------------
-- Procedure structure for `var1`
-- ----------------------------
DROP PROCEDURE IF EXISTS `var1`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `var1`()
BEGINDECLARE 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`()
BEGINDECLARE age INT ;SET age = 10;IF (age < 5)  THEN SELECT '年龄太小了' ;  ELSEIF (age >=5 AND age <=10 )THEN SELECT '年龄合适' ;ELSESELECT '年龄太大了' ;END IF;  END
;;
DELIMITER ;-- ----------------------------
-- Procedure structure for `var3`
-- ----------------------------
DROP PROCEDURE IF EXISTS `var3`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `var3`()
BEGINDECLARE 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`()
BEGINDECLARE temp INT ;SET temp = 1;WHILE( temp <= 10 )DOSET 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`()
BEGINDECLARE 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`()
BEGINDECLARE 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 configurationPUBLIC "-//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;@Overridepublic 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;}@Overridepublic 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 mapperPUBLIC "-//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 mapperPUBLIC "-//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 sete_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*/@Testpublic void countUserInfo1() throws IOException {SqlSessionFactory sqlSessionFactory = MyBatisUnit.getSqlSessionFactory();SqlSession sqlSession = sqlSessionFactory.openSession();int number = sqlSession.getMapper(DeptMapper.class).selectdept();System.out.println("查询条数共:" + number + "条");}@Testpublic 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*/@Testpublic 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*/@Testpublic 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*/@Testpublic 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*/@Testpublic 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*/@Testpublic void countUserInfo() throws IOException {SqlSession sqlSession = SessionFactoryUtil.getSqlSession();int number = sqlSession.getMapper(UserinfoMapper.class).selectcount();System.out.println("查询条数共:" + number + "条");}/*** 查询所有表* @throws IOException*/@Testpublic 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*/@Testpublic 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*/@Testpublic 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*/@Testpublic 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 查询用户*/@Testpublic 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*/@Testpublic 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*/@Testpublic 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 mapperPUBLIC "-//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 sete_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*/@Testpublic void query() throws IOException {SqlSession sqlSession = SessionFactoryUtil.getSqlSession();List<Userinfo> userinfos = sqlSession.selectList("test.selectAll");System.out.println(userinfos);sqlSession.close();}/*** 插入数据* @throws IOException*/@Testpublic 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*/@Testpublic 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*/@Testpublic 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")

MyBatis - 初学笔记相关推荐

  1. 快速入门Mybatis初学笔记(二)

    8.使用注解开发 8.1 面向接口编程 真正的开发中,很多时候会选择面向接口编程 根本原因:解耦,可拓展,提高复用,分层开发中,上层不用管具体的实现,大家都遵守共同的标准,使开发变得更容易,规范性更好 ...

  2. mybatis学习笔记(13)-延迟加载

    2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(13)-延迟加载 标签: mybatis [TOC] resultMap可以实现高级映射(使用asso ...

  3. mybatis学习笔记(7)-输出映射

    2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(7)-输出映射 标签: mybatis [TOC] 本文主要讲解mybatis的输出映射. 输出映射有 ...

  4. mybatis学习笔记(3)-入门程序一

    2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(3)-入门程序一 标签: mybatis [TOC] 工程结构 在IDEA中新建了一个普通的java项 ...

  5. MyBatis多参数传递之Map方式示例——MyBatis学习笔记之十三

    前面的文章介绍了MyBatis多参数传递的注解.参数默认命名等方式,今天介绍Map的方式.仍然以前面的分页查询教师信息的方法findTeacherByPage为例(示例源代码下载地址:http://d ...

  6. ant的下载与安装——mybatis学习笔记之预备篇(一)

    看到这个标题是不是觉得有点奇怪呢--不是说mybatis学习笔记吗,怎么扯到ant了?先别急,请容我慢慢道来. mybatis是另外一个优秀的ORM框架.考虑到以后可能会用到它,遂决定提前学习,以备不 ...

  7. SpringBoot集成Mybatis用法笔记

    今天给大家整理SpringBoot集成Mybatis用法笔记.希望对大家能有所帮助! 搭建一个SpringBoot基础项目. 具体可以参考SpringBoot:搭建第一个Web程序 引入相关依赖 &l ...

  8. python窗体设计插件_Python 界面生成器 wxFormBuilder 的入门使用(wxPython的界面设计工具的初学笔记)...

    环境,Win10,python3.7.3,wxPython 4.0.4,wxFormBuilder 3.9 1.准备一个窗体. 点击wxformbuilder上方的标签"forms" ...

  9. mybatis学习笔记--常见的错误

    原文来自:<mybatis学习笔记--常见的错误> 昨天刚学了下mybatis,用的是3.2.2的版本,在使用过程中遇到了些小问题,现总结如下,会不断更新. 1.没有在configurat ...

最新文章

  1. 字符串BF和KMP匹配算法
  2. 《机器人爱好者(第2辑)》——《惑星历险》中的Robby
  3. 用python处理excel数据的优势-python处理excel的优势是什么
  4. 使用hibernate和struts2实现分页功能
  5. linux raid和mdadm,linux的raid和mdadm
  6. QT的QFontDialog类的使用
  7. elasticsearch-1.3.0 之索引代码粗略梳理
  8. 漫步最优化十——极值类型
  9. ibatis常用16条SQL语句
  10. 解决overlay2存储驱动的磁盘配额问题
  11. 英国大概率退出欧盟!
  12. 聊天软件开发_0_开篇
  13. 1097: 计算平均成绩(函数专题)
  14. Maya模型锁定不能编辑的解锁方法
  15. python条件判断《X战警:逆转未来》
  16. q87芯片组服务器主板,Intel 100系列芯片组详解:史上最良心!
  17. C语言中文网_java复习进度
  18. “全民创业”是新时代的上山下乡
  19. 维视智造斩获2022年度光能杯最具影响力“智造”企业奖
  20. 四路组相联原理_TLB的作用及工作原理

热门文章

  1. 传统程序员如何转行到AI人工智能?
  2. 宽带连接错误的处理办法691、623、678、645、720、721...
  3. poj-2253 Frogger(最短路)
  4. Mac上面Mov转gif
  5. RevitAPI之草图及草图平面
  6. 证明函数有界的步骤_怎样判断函数的有界性,求具体判断步骤方法。
  7. Activiti7.0进阶学习(一):assignee的值用UEL实现
  8. python opencv 开启logitech摄像头
  9. Android仿微信朋友圈3评论输入框及点击外部和列表滑动时隐藏输入框和键盘解决方法
  10. Linux更换挂载点