欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 艺术 > java学习笔记 day8.6

java学习笔记 day8.6

2025/6/21 2:34:17 来源:https://blog.csdn.net/qq_63095129/article/details/140963745  浏览:    关键词:java学习笔记 day8.6

修改数据

1.修改数据时判断name参数不为空且非空字符串,判断salary是不为空则添加记录

<update id="editStaffItem">update staff<set><if test='name!=null and name!=""'>name=#{name},</if><if test="salary!=null">salary=#{salary},</if></set><where>id=#{id}</where>
</update>

2.在dao层声明该方法

int editStaffItem(Staff staff);

3.在controller类中,编写代码来接收http请求

@PutMapping("staffitem")
public String editStaffItem(Staff staff) {dao.editStaffItem(staff);return "success";
}

批量添加数据

1.在mapper.xml文件中写入映射语句,定义一个名为addList的插入语句,用于向staff表中批量插入多条数据; <foreach> 元素来循环处理列表中的每一项,并为每一条记录构建一个插入语句;

<foreach> 的属性如下:

  • collection: 指定要循环遍历的集合变量。在这个例子中,变量名为 list,通常这个变量应该是在 MyBatis 映射文件对应的接口方法中传递过来的一个 List 对象。
  • item: 指定在循环体内部对单个元素的引用变量。在这个例子中,变量名为 it,表示当前迭代的元素。
  • separator: 在每次循环之间添加的分隔符。在这个例子中,使用 , 作为分隔符,这意味着每条插入语句之间将用逗号 , 分隔。
<insert id="addList">insert into staff(code,name,salary,username,userpass)<!--循环 -->values<foreach collection="list" item="it" separator=",">(#{it.code},#{it.name},#{it.salary},#{it.username},#{it.userpass})</foreach></insert>

2.在Dao层声明该方法

int addList(List<Staff> list);

3.在Controller层编写代码接收请求

   @PostMapping("staff")public String addStaff(Staff staff) {staff=new Staff();staff.setCode("10001");staff.setName("李思思");staff.setSalary(new BigDecimal(2000));staff.setUsername("lisisi");staff.setUserpass("123123");List list=new ArrayList();list.add(staff);staff=new Staff();staff.setCode("10002");staff.setName("小甜甜");staff.setSalary(new BigDecimal(2000));staff.setUsername("牛夫人");staff.setUserpass("123123");list.add(staff);//     dao.addStaff(staff);dao.addList(list);return "success";}

模糊查询

1.mapper

这里定义了一个名为 getStaff 的查询语句,用于从 staff 表中查询员工信息,并将结果映射到 com.easy.bean.Staff 类型的对象上。使用了 <where><if> 元素来动态构建 SQL 语句中的 WHERE 子句。<if> 元素用于根据传入的参数 checktext 是否存在和非空来决定是否包含 WHERE 子句中的条件.

  • <if test="checktext!=null and checktext !=''">:如果 checktext 参数不为空且非空字符串,则在 SQL 语句中添加 name like #{liketext}。这里使用了 and 运算符来确保 checktext 不仅不为 null,而且也不是空字符串。
  • <bind name="liketext" value="'%'+checktext+'%'">:这里使用 <bind> 元素来定义一个新的变量 liketext,其值为 % 加上 checktext 再加上 %。这是为了进行模糊查询,即查询名字中包含 checktext 的所有员工
    <select id="getStaff" resultType="com.easy.bean.Staff">select * from staff<!--         根据参数不同组合出不同的·SQL语句  动态SQL语句 标签--><where><!--             编写条件语句 如果where标签中有内容 会自动添加关键字--><if test="checktext!=null and checktext !=''"><!-- 重新定义参数内容--><bind name="liketext" value="'%'+checktext+'%'"></bind>name like #{liketext}</if></where></select>

2.Dao层

List<Staff> getStaff(String checktext);

3.Controller层

    @GetMapping("staff")public CommonResult getStraff(String checktext) {List<Staff> list=dao.getStaff(checktext)return CommonResult.success(list);}

筛选范围查询

1.定义了一个名为 getStaffBySalary 的查询语句,用于从 staff 表中查询员工信息,并将结果映射到 com.easy.bean.Staff 类型的对象上。

使用了 <choose>, <when>, 和 <otherwise> 元素来动态构建 SQL 语句中的 WHERE 子句。这些元素用于根据传入的参数 salarytext 来决定如何构造查询条件。

  • <choose>:这是一个选择器,它会在多个 <when> 条件中选择第一个满足条件的 <when>,如果没有 <when> 条件满足,则执行 <otherwise> 中的代码。
  • <when test='salarytext=="低"'>:如果 salarytext 的值为 "低",则在 SQL 语句中添加 salary <= 300
  • <when test='salarytext=="中"'>:如果 salarytext 的值为 "中",则在 SQL 语句中添加 salary > 300 and salary <= 500
  • <otherwise>:如果 salarytext 的值既不是 "低" 也不是 "中"(即默认情况下),则在 SQL 语句中添加 salary > 500
    <select id="getStaffBySalary" resultType="com.easy.bean.Staff">select * from staff<where><!--参数名 salarytext--><choose><when test='salarytext=="低"'><!--&lt在这里是小于 -->salary &lt;= 300</when><when test='salarytext=="中"'>salary &gt;300 and salary &lt;= 500</when><otherwise>salary &gt; 500</otherwise></choose></where></select>

2.声明 List<Staff> getStaffBySalary(String salarytext); 是一个接口方法定义,描述一个名为 getStaffBySalary 的方法,该方法接受一个字符串参数 salarytext 并返回一个 Staff 对象列表。

List<Staff> getStaffBySalary(String salarytext);

3.List<Staff> list=dao.getStaffBySalary(salarytext);: 这一行代码调用了 DAO (Data Access Object) 层的方法 getStaffBySalary,该方法接受 salarytext 参数并返回一个 List<Staff> 类型的对象。

return CommonResult.success(list);: 这一行代码创建了一个 CommonResult 对象,使用 success 静态方法,并将 list 作为参数传递

@GetMapping("staff/salary")public CommonResult getStaffBySalary(String salarytext) {List<Staff> list=dao.getStaffBySalary(salarytext);return CommonResult.success(list);}

关联对象结果集

1.定义了一个名为 staffAndDepresultMap,用于将查询结果映射到 Staff 类型的对象上

将查询结果中的 dep_id 列的值作为参数传递给另一个映射器方法 getStaffDep,该方法返回一个部门对象 (Department),这个对象将被映射到 Staff 对象的 dep 属性上

定义getStaffDep方法:查询语句,用于根据员工的部门 ID (dep_id) 查询对应的部门信息。其中 #{dep_id} 是一个预编译参数,它的值将由调用 getStaffDep 方法时传入的参数决定

定义getStaffAndDep方法

1<select id="getStaffAndDep" resultMap="staffAndDep">
2    select * from staff
3</select>

这是一个查询语句,用于获取所有的员工信息。这里使用了前面定义的 resultMap (staffAndDep) 来映射查询结果

过程:

  1. 定义了一个 resultMap,用于将员工查询结果映射到 Staff 对象上。
  2. 通过子查询(getStaffDep)获取每个员工对应的部门信息,并将其映射到 Staff 对象的 dep 属性上。
  3. 定义了一个查询所有员工的 SQL 语句,并使用上述 resultMap 来映射查询结果。

通过这种方式,当调用 getStaffAndDep 方法时,将会返回一个包含员工信息及其对应部门的 Staff 对象列表。

    <!--一对一或一对多查询需要制定映射方式 --><resultMap id="staffAndDep" type="com.easy.bean.Staff"><association column="dep_id" select="getStaffDep" property="dep"></association></resultMap><select id="getStaffDep" resultType="com.easy.bean.Department">select * from department where id=#{dep_id}</select><select id="getStaffAndDep" resultMap="staffAndDep">select * from staff</select>

2.Dao层

 List<Staff> getStaffAndDep();

3.Controller层

 @GetMapping("staff")public CommonResult getStraff(String checktext) {List<Staff> list=dao.getStaffAndDep();return CommonResult.success(list);}

缓存

 /*Mybatis一级缓存(默认生效,SQL session级别):SQL session 
             ---前提:同一次sql会话(设置为同一个事务)
             --具体操作:@Transactional 标注为事务,此外启动类也加注解 EnableTransactionManagement
        
        * Mybatis二级缓存(mapper级别):
              缓存失效时机:刷新时间到达,或执行增删改查操作时清空二级缓存,请求再次查询
        *缓存意义:让数据达到重用,减少mysql的负担*/

1.一级缓存: 加注解,在启动类上加@EnableTransactionManagement注解,

在要实现的方法上加@Transactional注解

在Controller层实现 

   @GetMapping("dep")@Transactionalpublic CommonResult getDep(){List<Department> list=dao.getDep();System.out.println("------------------");
//        list=dao.getDep();System.out.println(list.get(0));System.out.println(list.get(1));return CommonResult.success(list);
//        return CommonResult.success();}

在mapper文件中写

    <resultMap id="departmentAndStaff" type="com.easy.bean.Department"><!--把某个属性映射到某一个列上去<id column="" property="depid"></id><result column="name" property="depname"></result> --><result column="id" property="id"></result><collection  column="id" select="getDepStaff" property="staffList"></collection></resultMap

 2.二级缓存 :在Controller

    @GetMapping("dep")
//    @Transactionalpublic CommonResult getDep(){List<Department> list=dao.getDep();System.out.println("------------------");
//        list=dao.getDep();System.out.println(list.get(0));System.out.println(list.get(1));
//        return CommonResult.success(list);return CommonResult.success();}

 在mapper中

    <!--  一级缓存默认开启  二级缓存 需要编写--><cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true" /><resultMap id="departmentAndStaff" type="com.easy.bean.Department"><!--把某个属性映射到某一个列上去<id column="" property="depid"></id><result column="name" property="depname"></result> --><result column="id" property="id"></result><collection fetchType="lazy" column="id" select="getDepStaff" property="staffList"></collection></resultMap>

mybatis大于等于常用写法

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词