javaweb-mybaits学习笔记(二)---数据的增删查改

配置文件完成增删改查

1. 查询

1.1查询所有数据:
  1. 编写接口方法:Mapper接口
  2. 编写SQL语句:sql映射文件
  3. 执行方法,测试

注意:如果数据库表的字段名称和实体类的属性名称不一样,则不能自动封装数据

注意查询的时候要在Mapper(接口文件)里面修改类型,并且记得在pojo的文件夹里面添加表格的属性,获取get 和set方法,否则不能查询结果,返回的是null

在写SQL映射文件的时候要与接口(Mapper)目录中的要一一对应
在这里插入图片描述

并且接口的方法要与对应映射文件的唯一标识一致
在这里插入图片描述

为了方便解决此类问题,安装MybatisX插件

setting 里面搜索安装

红色小鸟表示的是映射文件,蓝色小鸟表示的是对应的接口(点击可以互相切换)
在这里插入图片描述

注意在Mapper文件里面返回对象集合的时候,名字要对应

在这里插入图片描述

解决方法:

如果数据库表的名称和实体类属性的名字不一样,则不能自动封装数据

  1. 可以用别名在xml映射文件中改名字,缺点:不方便

在这里插入图片描述

  1. 直接用sql片段改名字,在查询的时候调用该sql字段, 缺点:不灵活

在这里插入图片描述

//最后在SQL映射文件中导入要相应的sql字段即可 
    <select id="selectBYID" resultType="com.rogue.pojo.Adoption">
select
<include refid="adoption_column"/> //导入相应的sql字段
from adoption;
    </select>
  1. 为了解决以上的问题,可以用resultMapper字段解决

步骤:1.定义resulrMap的属性

2.select键值对里面的resultType改成resultMap(再映射resultMap键值对的内容)

在这里插入图片描述

1.2查询详情

步骤:

  1. 编写Mapper接口(参数id,返回结果是一个集合)
  2. 编写SQL语句
  3. 执行方法,测试

查询对应的某个对象,返回的是一个?

在这里插入图片描述

以下是SQL的映射文件

    <select id="selectById" resultType="com.rogue.pojo.Adoption">
        select an_id as id, an_name as name , adopter, ado_contact as contact , ado_date as date
        from adoption
        where an_id=#{
   id};
    </select>

Mapper接口内容:

    List<Adoption> selectById(int an_id);

执行方法:首先在前面定义id的内容

 int id=6006;
   PayMapper payMapper= (PayMapper) sqlSession.getMapper(PayMapper.class);

        //调用接口的selectAll的方法
        List<Adoption> pays = payMapper.selectById(id);

        System.out.println(pays);

参数占位符:

  1. #{}:会将其转换为?为了防止SQL注入

  2. ${}:拼SQL,一定会有SQL注入的问题,但是在表名或者列名不确定的时候可以使用

    两者的区别是把传参的内容显示

    如果用${},显示的结果是:

    在这里插入图片描述

  3. 特殊字符处理:

方法一:转义字符,例如‘<’的转义字符是&lt

方法二:CDATA方法

在这里插入图片描述

1.3条件查询
  1. 编写接口的方法

    • 参数:所有查询条件(注意mybatis中如果接收多个参数)

    如果出现的是多个参数的值的话,用‘@’Param与sql语句中的占位符相对应

    一下存在三种方法:

    在这里插入图片描述

    • 结果:返回List<>
  2. 编写Sql语句:SQL映射文件

  3. 执行方法,测试

条件查询案例

  • 方法一(散装参数):搜索doctor表中是女生并且大于20岁的医生
  1. 创建DoctorMapper接口(用第一种方法映射到每一个属性中)
public interface DoctorMapper {
   

    List<Doctor> selectByany (@Param("sex")String sex,@Param("age")int age,@Param("name")String name);
    
}
  1. 编写sql 语句:SQL映射文件]

用resultMapper字段解决命名问题

<mapper namespace="com.rogue.Mapper.DoctorMapper">

<resultMap id="DoctorMap" type="com.rogue.pojo.Doctor">
    <result column="doctor_sex" property="sex"/>
    <result column="doctor_age" property="age"/>
    <result column="doctor_name" property="name"/>
    <result column="doctor_id" property="id"/>
</resultMap>
    <select id="selectByany" resultMap="DoctorMap">
        select * from doctor where doctor.doctor_age
        <![CDATA[
          >
         ]]> #{
   age}
and doctor_sex=#{
   sex}
and doctor_name like #{
   name};//模糊查找
    </select>
</mapper>
  1. 执行方法、测试

在获取mapper对象方法返回集合的时候,需要和DoctorMapper()中selectByany方法的中的形参一致

public class selectDoctor {
   
    public static void main(String[] args) throws Exception {
   
       int age=20;
        String sex="女";
        String name="杨";
        name="%"+name+"%";
       // 1.加载mybatis核心文件获取SqlSessionFactory对象
        String resource = "mybatis-config.xml";//配置文件的路径
        InputStream inputStream = Resources.getResourceAsStream
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值