MyBatis增删改查
程序员文章站
2022-07-01 12:48:14
...
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)
- emp:
- dept:
Emp(pojo)
- 创建实体:
- 为实体设置getter、setter、toString方法
查找
- 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>
- 测试类:
占位符#{}、${}
- #{}占位符相当于jdbc里的preparstatement的占位符?,为值占位,可以防止sql注入(安全)
- ${}占位符为sql片段占位,有可能引来sql注入(不安全)
- 用#{}执行时,自动选择是否添加单引号
- 用${}时,在写sql语句就要考虑是为字符串占位还是为数值占位,字符占位时就要加单引
#{}
- 测试queryById:
- 测试updateById:
- 测试insertByEnter:
- 测试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>
- 测试queryByIdi:
- 测试updateByIdi:
- 测试insertByEnteri:
- 测试deleteByEnteri:
- 测试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>
- 测试indistinctQuery:
- 测试indistinctQueryi:
动态sql
标签名 | 作用 |
---|---|
if 标签元素 | 对test指定的布尔表达式进行判断,如果为true则执行其中的sql片段,false就不执行其中的sql片段 |
where 标签元素 | 可以在需要时(当包含在其中的条件有生效的条件时)生成,并且可以去掉where条件中多余的连接词 |
set 标签元素 | 可以在需要时(当包含在set标签内部的列参与修改时)生成,并且可以去掉包含在其中多余的连接符号 |
foreach 标签元素 | 可以对参数数组或集合进行遍历,拼接出所需要的sql片段 |
<!-- 查询工资在minSal到maxSal之间的数据 [ sql中<代表<符号 ] -->
<select id="querySalary" resultType="pojo.Emp">
select * from emp,dept
<where>
<if test="minSal!=null">
salary>=#{minSal}
</if>
<if test="maxSal!=null">
and salary <=#{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>
- 测试querySalary:
- 测试updateEmpByIf:
- 测试updateArraySal:
- 测试deleteArrayEmp:
上一篇: 难怪一辈子单身