Mybatis(准备,实现增删改查,XML配置文件,动态SQL)

目录

 准备

删除,插入,修改,查询

日志输出

 预编译SQL

 新增(主键返回)

 数据封装

 XML映射文件

动态SQL

案例


Mybatis(准备,实现增删改查,XML配置文件,动态SQL)_第1张图片

 准备

Mybatis(准备,实现增删改查,XML配置文件,动态SQL)_第2张图片

 lombok:简化实体类定义

    
//mybatis的起步依赖
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            2.2.2
        
//mysql驱动包
        
            com.mysql
            mysql-connector-j
            runtime
        
//lombok依赖
        
            org.projectlombok
            lombok
            true
        
//springboot进行单元测试依赖
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#数据库连接的url
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis
#连按数据库的用户名
spring.datasource.username=root
#连接数据库的密码
spring.datasource.password=123456 

#配置mybatis的日志, 指定输出到控制台
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
#开启mybatis的驼峰命名自动映射开关 a_column ------> aCloumn
mybatis.configuration.map-underscore-to-camel-case=true
 

Mybatis(准备,实现增删改查,XML配置文件,动态SQL)_第3张图片

 @Mapper:程序在运行会自动创建该接口的代理对象,并且将这个代理对象放IOC容器中 

删除,插入,修改,查询

@Mapper
public interface EmpMapper {

    //根据ID删除数据
    @Delete("delete from emp where id = #{id}")
    public void delete(Integer id);
    


    //新增员工  (多个参数封装到一个对象当中,再调用insert方法,传递一个对象   
    @Options(useGeneratedKeys = true, keyProperty = "id")   //获取返回的主键
    @Insert("insert into emp(username, name, gender, image, job, entrydate, dept_id, create_time, update_time)" +
            " values (#{username},#{name},#{gender},#{image},#{job},#{entrydate},#{deptId},#{createTime},#{updateTime})")
    public void insert(Emp emp);  //实体对象进行封装


    //更新员工
    @Update("update emp set username = #{username}, name = #{name}, gender = #{gender}, image = #{image}," +
            " job = #{job}, entrydate = #{entrydate}, dept_id = #{deptId},update_time = #{updateTime} where id = #{id}")
    public void update(Emp emp);

   
    //数据封装方案三: 开启mybatis的驼峰命名自动映射开关 --- a_cloumn ------> aColumn (在配置文件中)


    //根据ID查询员工
   @Select("select * from emp where id = #{id}")
    public Emp getById(Integer id);
  

    //条件查询员工
 
    //方式二
//    @Select("select * from emp where name like concat('%',#{name},'%') and gender = #{gender} and " +
//            "entrydate between #{begin} and #{end} order by update_time desc ")
//    public List list(String name, Short gender, LocalDate begin , LocalDate end);

日志输出

可以在application.properties中,打开mybatis的日志,并指定输出到控制台。

 预编译SQL

性能更高 更安全(防止SQL注入)

SQL注入是通过操作输入的数据来修改事先定义好的SQL语句,以达到执行代码对服务器进行攻击的方法。

Mybatis(准备,实现增删改查,XML配置文件,动态SQL)_第4张图片

 新增(主键返回)

描述:在数据添加成功后,需要获取插入数据库数据的主键。如:添加套餐数据时,还需要维护套餐菜品关系表数据。

Mybatis(准备,实现增删改查,XML配置文件,动态SQL)_第5张图片

 数据封装

实体类属性名 和 数据库表查询返回的字段名一致,mybatis会自动封装。

如果实体类属性名 和 数据库表查询返回的字段名不一致,不能自动封装。

Mybatis(准备,实现增删改查,XML配置文件,动态SQL)_第6张图片

 查询时,字符串拼接concat

 XML映射文件

Mybatis(准备,实现增删改查,XML配置文件,动态SQL)_第7张图片

Mybatis(准备,实现增删改查,XML配置文件,动态SQL)_第8张图片

 

 MybatisX 是一款基于 IDEA 的快速开发Mybatis的插件,为效率而生。

Mybatis(准备,实现增删改查,XML配置文件,动态SQL)_第9张图片

 使用Mybatis的注解,主要是来完成一些简单的增删改查功能。如果需要实现复杂的SQL功能,建议使用XML来配置映射语句。

动态SQL

 随着用户的输入或外部条件的变化而变化的SQL语句,我们称为动态SQL。

用于判断条件是否成立。使用test属性进行条件判断,如果条件为true,则拼接SQL。

形式:

name like concat('%',#{name},'%')

 where 元素只会在子元素有内容的情况下才插入where子句。而且会自动去除子句的开头的AND 或OR。

EmpMapper.java中:

//动态条件查询
    public List list(String name, Short gender, LocalDate begin , LocalDate end);

XML中 :

Mybatis(准备,实现增删改查,XML配置文件,动态SQL)_第10张图片

 SpringbootMybatisCrudApplicationTests中:

    //根据条件查询员工
    @Test
    public void testList(){
        //List empList = empMapper.list("张", (short) 1, LocalDate.of(2010, 1, 1), LocalDate.of(2020, 1, 1));
        //List empList = empMapper.list("张", null, null, null);
        //List empList = empMapper.list("张", (short)1, null, null);
        //List empList = empMapper.list(null, (short)1, null, null);
        List empList = empMapper.list(null, null, null, null);  //全部员工信息
        System.out.println(empList);
    } 

案例

动态更新员工信息,如果更新时传递有值,则更新;如果更新时没有传递值,则不更新。

动态地在行首插入 SET 关键字,并会删掉额外的逗号。(用在update语句中)

 EmpMapper.java中:

    //动态更新员工
    public void update2(Emp emp); 

 XML中:

    
   
        update emp
       
            username = #{username},
            name = #{name},
            gender = #{gender},
            image = #{image},
            job = #{job},
            entrydate = #{entrydate},
            dept_id = #{deptId},
            update_time = #{updateTime}
       

        where id = #{id}
   

 SpringbootMybatisCrudApplicationTests中: 

    //动态更新员工 - 更新ID为18的员工 username 更新为 Tom111, name更新为 汤姆111, gender更新为2
    @Test
    public void testUpdate2(){
        //构造员工对象
        Emp emp = new Emp();
        emp.setId(19); 
        emp.setUsername("Tom222333");
//        emp.setName("汤姆222");
//        emp.setGender((short)1);
//        emp.setUpdateTime(LocalDateTime.now());

        //执行更新员工操作
        empMapper.update2(emp);
    }
 

 

循环遍历

SQL语句

 delete from emp where id in (1,2,3);

 EmpMapper.java中:

//批量删除员工
    public void deleteByIds(List ids);

 SpringbootMybatisCrudApplicationTests中:  

 //批量删除员工 - 13,14,15
    @Test
    public void testDeleteByIds(){
        List ids = Arrays.asList(13, 14, 15);
        empMapper.deleteByIds(ids);
    }
}

EmpMapper.xml中:

 
   
   
        delete  from emp where id in
       
            #{id}
       

   

 

 :定义可重用的 SQL 片段。共同sql片段抽取

 :通过属性refid,引入sql片段。

XML中:

 

select id, username, password, name, gender, image, job, entrydate, dept_id, create_time, update_time from emp

你可能感兴趣的:(mybatis,java,开发语言)