MyBatis超详细学习笔记(黑马)

目录

一、MyBatis快速入门

(一)打开MyBatis中文官网

(二)在工程中(pom.xml)导入MyBatis依赖

(三)编写MyBatis核心配置文件——替换连接信息,解决硬编码问题

(四)创建SQL映射文件——统一管理SQL语句

(五)编写实现类

二、Mapper代理开发

(一)定义与SQL映射文件同名的Mapper接口

(二)设置SQL映射文件的namespace属性为Mapper接口全限定名

(三)在Mapper接口中定义方法

(四)编码实现

(五)SQL映射小技巧

三、MyBatis总结

四、MyBatis中sql语句的处理

(一)MyBatisX插件

(二)SQL映射文件中的sql片段

(三)结果集映射resultMap

(四)SQL传值

(五)sql语句中特殊字符处理

(六)自动提交事务

(七)返回添加数据的主键

(八)动态批量删除

(九)注解开发


一、MyBatis快速入门

(一)打开MyBatis中文官网

https://mybatis.net.cn/getting-started.htmlhttps://mybatis.net.cn/getting-started.html

(二)在工程中(pom.xml)导入MyBatis依赖

从官网导入:

MyBatis超详细学习笔记(黑马)_第1张图片


  org.mybatis
  mybatis
  x.x.x

(三)编写MyBatis核心配置文件——替换连接信息,解决硬编码问题

从官网导入:

MyBatis超详细学习笔记(黑马)_第2张图片




    
        
            
            
                
                
                
                
                
            
        
    
    
        
        
    

注意:1. 数据库的连接信息需要自己修改

           2. 加载SQL映射文件见后文

(四)创建SQL映射文件——统一管理SQL语句

从官网导入:

MyBatis超详细学习笔记(黑马)_第3张图片

 例如,我们要操作user表,则创建对应的SQL映射文件UserMapper.xml,代码如下:

(注意:先创建对应的实体类Uesr)







    
    

修改mybatis-config.xml文件的内容:


     
     

(五)编写实现类

创建MyBatisDemo类,代码如下:

/**
 * MyBatis快速入门
 */
public class MyBatisDemo {
    public static void main(String[] args) throws Exception {

        //1.加载mybatis的核心配置文件,获取SqlSessionFactory
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //2.获取SqlSession对象,用它执行SQL
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //3.执行SQL
        List users = sqlSession.selectList("test.selectAll");
        System.out.println("users = " + users);

        //4.释放 SqlSession
        sqlSession.close();

    }
}

结果:

二、Mapper代理开发

(一)定义与SQL映射文件同名的Mapper接口

        定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放在同一目录下。

1. 新建Mapper接口:UserMapper

MyBatis超详细学习笔记(黑马)_第4张图片

 2. 将该接口与SQL映射文件放在同一目录

        初始的项目结构如图:

MyBatis超详细学习笔记(黑马)_第5张图片

         但xml文件一般默认放在resources文件夹中,不建议直接将其移动到接口UserMapper所在的文件夹中,我们可以这样做:

  • 在resources文件夹中新建文件夹(没有包),输入:com/itheima/mapper
    (注意:不要写成com.itheima.mapper,资源文件夹中不识别句点)
  • 将userMapper.xml移入该文件夹中,如下图:

MyBatis超详细学习笔记(黑马)_第6张图片

        (同时记得修改mybatis-config配置文件中的sql映射文件路径)

 

        Maven执行编译compile后,就会看到两个文件在同一目录下了:

MyBatis超详细学习笔记(黑马)_第7张图片

 在一起,在一起!!!

(二)设置SQL映射文件的namespace属性为Mapper接口全限定名

        在SQL映射文件UserMapper.xml文件中部分修改为:

(三)在Mapper接口中定义方法

        方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值的类型一致。

        UserMapper接口中代码为:

public interface UserMapper {
    List selectAll();
}

(四)编码实现

        新建一个实现类:MyBatisDemo2,代码如下:

public class MyBatisDemo2 {
    public static void main(String[] args) throws Exception {

        //1.加载mybatis的核心配置文件,获取SqlSessionFactory
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //2.获取SqlSession对象,用它执行SQL
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //3.执行SQL
        //List users = sqlSession.selectList("test.selectAll");
        //3.获取UserMapper接口的代理对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        List users = userMapper.selectAll();

        System.out.println("users = " + users);

        //4.释放 SqlSession
        sqlSession.close();
    }
}

结果:

(五)SQL映射小技巧

        假如数据库的实体类有很多,那么mybatis-config文件中加载sql映射文件的语句就会很长,类似这样:


       
       
       
       
       
        ...
        ...

        如果我们的Mapper接口和SQL映射文件名称相同,并在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载。


        
        

三、MyBatis总结

【一般步骤】

  1. 编写接口方法:Mapper接口(xxxMapper.java)
    (分析是否有参数,分析语句的返回结果类型)
  2. 编写SQL语句:SQL映射文件(xxxMapper.xml)
  3. 执行方法,测试

四、MyBatis中sql语句的处理

(一)MyBatisX插件

1.自动识别Mapper接口文件和与之对应的SQL映射文件,会显示为两个不同颜色的小鸟

2.点击小鸟会自动跳转到另一个文件的对应代码处

3.会对代码做进一步的智能化提示

MyBatis超详细学习笔记(黑马)_第8张图片

(二)SQL映射文件中的sql片段

        如果sql语句中某一句太长,且经常用到,可以将其写为sql片段,然后每次引用sql片段即可实现相同的功能。
例如:

MyBatis超详细学习笔记(黑马)_第9张图片

(三)结果集映射resultMap

        解决实体类属性名和数据库表字段列名不对应的情况,比如数据库某列名为brand_name,实体类中为brandName,这是可以用resultMap实现映射。

MyBatis超详细学习笔记(黑马)_第10张图片

(四)SQL传值

参数占位符:#{ }——会将其替换为?,为了防止sql注入

一、单值传递


1.brandMapper.xml

MyBatis超详细学习笔记(黑马)_第11张图片

 2.测试类.java

MyBatis超详细学习笔记(黑马)_第12张图片

二、多值传递


1.bandMapper.xml

MyBatis超详细学习笔记(黑马)_第13张图片

 2.brandMapper.java接口

    三种方法:

MyBatis超详细学习笔记(黑马)_第14张图片

 3.测试类.java

MyBatis超详细学习笔记(黑马)_第15张图片

MyBatis超详细学习笔记(黑马)_第16张图片

MyBatis超详细学习笔记(黑马)_第17张图片

三、动态SQL


        即SQL语句写死了3个参数,但用户提供的参数个数会随时变化,有可能只输入一个参数就要查询,这就会涉及动态SQL

        详见官网

MyBatis超详细学习笔记(黑马)_第18张图片

 1.brandMapper.xml

MyBatis超详细学习笔记(黑马)_第19张图片

 注意:如果只有companyName,sql会出现语法错误从而报错,myBatis这样处理:加入字段(同理),并且每一个条件语句都写入and。

MyBatis超详细学习笔记(黑马)_第20张图片

(五)sql语句中特殊字符处理

在xml中,sql语句的小于号<会出现报错,要这样处理,输入CDATA,在CDATA区域输入<

MyBatis超详细学习笔记(黑马)_第21张图片

(六)自动提交事务

   实现添加、修改sql语句时,默认自动提交事务是关闭的,需要我们手动提交一下,也可以直接在sqlSession中设置为true

(七)返回添加数据的主键

MyBatis超详细学习笔记(黑马)_第22张图片

(八)动态批量删除

   使用foreach

MyBatis超详细学习笔记(黑马)_第23张图片

(九)注解开发

【适用于简单的SQL语句】

可以不在xml中写SQL语句,直接在Mapper接口中通过注解写明SQL语句,例如:

你可能感兴趣的:(Java,Web,mybatis,java,数据库,mysql)