欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MyBatis增删改查

程序员文章站 2022-07-01 12:48:14
...

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

	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)
MyBatis增删改查

  1. emp:
    MyBatis增删改查
  2. dept:
    MyBatis增删改查

Emp(pojo)

  1. 创建实体:
    MyBatis增删改查
  2. 为实体设置getter、setter、toString方法
    MyBatis增删改查

查找

  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. 测试类:
    MyBatis增删改查

占位符#{}、${}

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

#{}

MyBatis增删改查


  1. 测试queryById:
    MyBatis增删改查

  1. 测试updateById:
    MyBatis增删改查

  1. 测试insertByEnter:
    MyBatis增删改查

  1. 测试deleteByEnter:
    MyBatis增删改查

${}

<!--     占位符 ${}     -->
	<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:
    MyBatis增删改查

  1. 测试updateByIdi:
    MyBatis增删改查

  1. 测试insertByEnteri:
    MyBatis增删改查
    MyBatis增删改查

  1. 测试deleteByEnteri:
    MyBatis增删改查
    MyBatis增删改查
  2. 测试queryCols:
    MyBatis增删改查
    MyBatis增删改查

模糊查询

	<!-- 模糊查询 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:
    MyBatis增删改查
    MyBatis增删改查

  1. 测试indistinctQueryi:
    MyBatis增删改查

动态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:
    MyBatis增删改查

  1. 测试updateEmpByIf:
    MyBatis增删改查
    MyBatis增删改查

  1. 测试updateArraySal:
    MyBatis增删改查
    MyBatis增删改查

  1. 测试deleteArrayEmp:
    MyBatis增删改查

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