MyBatis增删改查

增删改查的重复代码作为全局定义静态代码块加载

	private static SqlSession session=null;
	static {
		try {
			//1.读取mybaits核心配置文件(mybatis-config.xml)
			InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
			//2.通过配置获取一个SqlSessionFactory
			SqlSessionFactory fac = new SqlSessionFactoryBuilder().build(in);
			//3.通过工厂获取一个SqlSession对象(Connection)
			session = fac.openSession();
		} catch (Exception e) {
			// TODO: handle exception
		}
	}

数据库(dept、emp)
在这里插入图片描述

  1. emp:
    在这里插入图片描述
  2. dept:
    在这里插入图片描述

Emp(pojo)

  1. 创建实体:
    在这里插入图片描述
  2. 为实体设置getter、setter、toString方法
    在这里插入图片描述

查找

  1. EmpMapper.xml:
<mapper namespace="EmpMapper">
	<select id="queryAll" resultType="pojo.Emp">
		select e.id,e.name,d.dept_name,e.dept_id,e.salary from emp e,dept d where e.dept_id=d.id order by e.id asc
	</select>
</mapper>
  1. 测试类:
    在这里插入图片描述

占位符#{}、${}

  1. #{}占位符相当于jdbc里的preparstatement的占位符?,为值占位,可以防止sql注入(安全)
  2. ${}占位符为sql片段占位,有可能引来sql注入(不安全)
  3. 用#{}执行时,自动选择是否添加单引号
  4. 用${}时,在写sql语句就要考虑是为字符串占位还是为数值占位,字符占位时就要加单引

#{}

在这里插入图片描述


  1. 测试queryById:
    在这里插入图片描述

  1. 测试updateById:
    在这里插入图片描述

  1. 测试insertByEnter:
    在这里插入图片描述

  1. 测试deleteByEnter:
    在这里插入图片描述

${}

<!--     占位符 ${}     -->
	<select id="queryByIdi" resultType="pojo.Emp">
		select e.id,e.name,d.dept_name,e.dept_id,e.salary from emp e,dept d where e.dept_id=d.id and e.id=${id} order by e.id asc
	</select>
	<update id="updateByIdi">
		update emp set name='${name}' where id=${id}
	</update>
	<update id="insertByEnteri">
		insert into emp values(${id},'${name}',${dept_id},${salary})
	</update>
	<update id="deleteByEnteri">
		delete from emp where id=${id}
	</update>
	
	<select id="queryCols" resultType="pojo.Emp">
		select ${cols} from emp
	</select>
  1. 测试queryByIdi:
    在这里插入图片描述

  1. 测试updateByIdi:
    在这里插入图片描述

  1. 测试insertByEnteri:
    在这里插入图片描述
    在这里插入图片描述

  1. 测试deleteByEnteri:
    在这里插入图片描述
    在这里插入图片描述
  2. 测试queryCols:
    在这里插入图片描述
    在这里插入图片描述

模糊查询

	<!-- 模糊查询 sql -->
	<select id="indistinctQuery" resultType="pojo.Emp">
		select * from emp e,dept d where name like '%${name}%' and e.dept_id=d.id
	</select>
	<select id="indistinctQueryi" resultType="pojo.Emp">
		select * from emp e,dept d where name like #{name} and e.dept_id=d.id
	</select>
  1. 测试indistinctQuery:
    在这里插入图片描述
    在这里插入图片描述

  1. 测试indistinctQueryi:
    在这里插入图片描述

动态sql

标签名作用
if 标签元素对test指定的布尔表达式进行判断,如果为true则执行其中的sql片段,false就不执行其中的sql片段
where 标签元素可以在需要时(当包含在其中的条件有生效的条件时)生成,并且可以去掉where条件中多余的连接词
set 标签元素可以在需要时(当包含在set标签内部的列参与修改时)生成,并且可以去掉包含在其中多余的连接符号
foreach 标签元素可以对参数数组或集合进行遍历,拼接出所需要的sql片段


	<!-- 查询工资在minSal到maxSal之间的数据        [    sql中&lt;代表<符号    ]         -->
<select id="querySalary" resultType="pojo.Emp">
		select * from emp,dept
		<where>
			<if test="minSal!=null">
				salary>=#{minSal}
			</if>
			<if test="maxSal!=null">
				and salary &lt;=#{maxSal}
			</if>
			and emp.dept_id=dept.id
		</where>
	</select>
	
	
	<!-- 修改员工信息(根据参数传递与否进行修改) -->
	<update id="updateEmpByIf">
		update emp set
		<if test="dept_id!=null">
		dept_id=#{dept_id},
		</if>
		<if test="name!=null">
			name=#{name},
		</if>
		<if test="salary!=null">
			salary=#{salary}
		</if>
		where id=#{id}
	</update>
	
	
	<!--  批量修改人物的salary   -->
	<update id="updateArraySal">
		update emp set salary=salary+#{sal}
		where id in
		<foreach collection="array" open="(" close=")" item="id" separator=",">
			#{id}
		</foreach>
	</update>
	


	<!--  批量删除   -->
	<update id="deleteArrayEmp">
		delete from emp
		where id in
		<foreach collection="array" open="(" close=")" item="id" separator=",">
			#{id}
		</foreach>
	</update>
	
	
  1. 测试querySalary:
    在这里插入图片描述

  1. 测试updateEmpByIf:
    在这里插入图片描述
    在这里插入图片描述

  1. 测试updateArraySal:
    在这里插入图片描述
    在这里插入图片描述

  1. 测试deleteArrayEmp:
    在这里插入图片描述

查看mybatis的环境配置
相关文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Brrby

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值