MyBatis

开启mybatis日志打印:

输入mybatislog就会自动提示前半部分
输入std会提示下半部分 这里代表输出到控制台
在配置文件中写入    
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

执行SQL增删改语句,回自动返回受影响的行数

参数占位符:

#{···}

执行SQL时,会将 #{···} 替换为 ? ,生成预编译SQL, 会自动设置参数值

使用时机 : 参数传递 , 都使用 #{···}

${···}

拼接SQL. 直接将参数拼接在 SQL 语句中 , 存在 SQL 注入问题

使用时机 : 如果对表名 , 列表进行动态设置时使用.

根据主键删除:

//EmpMapper 接口
@Mapper
public interface EmpMapper {
    //删除的SQL语句      delete from Emp where id = #{id}
    @Delete("delete from Emp where id = #{id}")
    //获取id
    public Integer deleteById(Integer id);
}
//测试类
@SpringBootTest 
class MybatisApplicationTests {
    @Autowired    //对象注入
    private  EmpMapper empmapper;

    @Test
    void contextLoads() {
        //增删改语句执行后,会返回受影响的行数
        System.out.println(empmapper.deleteById(16));
    }
}

注意事项:如果mapper接口方法形参只有一个普通类型的参数,#{···} 里面的属性名可以随便写

新增:

//EmpMapper 接口
@Mapper
public interface EmpMapper {
    @Insert("insert into emp\n" +
            "(username, name, gender, image, job, entrydate, dept_id, create_time, update_time)\n" +
            "values (#{username},#{name},#{gender}," +
            "#{image},#{job},#{entrydate},#{deptId},#{createTime},#{updateTime})")
    public void insertByEmp(Emp emp);

}
//测试类
@SpringBootTest
class MybatisApplicationTests {
    @Autowired  //对象注入
    private  EmpMapper empmapper;
    @Test
    void insertInto() {
        //模拟前端
        Emp emp = new Emp();
        emp.setUsername("tom1");
        emp.setName("汤姆");
        emp.setGender((short) 1);
        emp.setImage("1.jpg");
        emp.setJob((short) 2);
        emp.setEntrydate(LocalDate.of(2002, 1, 7));
        emp.setDeptId(1);
        emp.setCreateTime(now());
        emp.setUpdateTime(now());
        
        empmapper.insertByEmp(emp);

    }

注意事项:

1.values其中的变量名都与对象属性相对应

2.数据库的列名以下划线(_)分隔而对象属性以小驼峰命名,在对应时注意修改

新增(主键返回)

方法一 : @Options注解

useGeneratedKeys = true 返回主键开关

keyProperty = "id" 将主键赋值给对象属性(id)

描述:在数据添加成功后,需要获取插入数据库数据的主键.

如:添加套餐数据时,还需要维护套餐菜品关系数据 (在套餐表新建套餐时 , 菜品表的外键也要对应该套餐表的主键, 我们如何在新建套餐时,在菜品表获取该套餐主键并填写呢)

//useGeneratedKeys = true   返回主键开关
//keyProperty = "id"        将主键赋值给对象属性(id)
@Options(useGeneratedKeys = true, keyProperty = "id")
@Insert("insert into emp\n" +
        "(username, name, gender, image, job, entrydate, dept_id, create_time, update_time)\n" +
        "values (#{username},#{name},#{gender}," +
        "#{image},#{job},#{entrydate},#{deptId},#{createTime},#{updateTime})")
public void insertByEmp(Emp emp);

@Options 的作用

操作过程

方法二:xml写法 和option注解的用法一致
#useGeneratedKeys 返回主键开关
#keyProperty 主键赋值字段
<insert id="addFlavors" useGeneratedKeys="true" keyProperty="id" >
    @Insert("insert into dish (name,category_id,price,image,description,status
    ,create_time,update_time,create_user,update_user) values(#{name},#{categoryId}
    ,#{price},#{image},#{description},#{status},#{createTime}
    ,#{updateTime},#{createUser},#{updateUser}) ")
</insert>

更新:

SQL语句(根据ID更新员工信息)
update emp set username = 'arui',name ='阿瑞',gender = 1 , image = '1.jpg' , job = 2 , entrydate = '2012-01-01',dept_id = 2 , update_time = '2022-10-01 12:12:12'
where id = 19;

接口方法:

@Update("update emp set username = #{username},name =#{username},gender = #{gender} , image = #{image} , job = #{job} , entrydate = #{entrydate},dept_id = #{deptId} , update_time = #{updateTime} where id = #{id};")
public void updateById(Emp emp);
条件查询:

接口方法:
public List<Emp> selectConditions(String name, Short gender, LocalDate begin, LocalDate end);
映射语句:
<select id="selectConditions" resultType="com.example.mybatis.pojo.Emp"> select * from emp where name like concat('%', #{name}, '%') and gender = #{gender} and entrydate between #{begin} and #{end}; </select>

注意事项:

姓名模糊查询的条件

不能写为 name like '%#{name}%' 在字符串内当字符串处理, 无法获取数值

应该使用concat字符串拼接函数name like concat('%', #{name}, '%')在获取值后进行拼接

不要忘记resultType指定返回对象的全限定名(包名+类名)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值