MyBatis快速上手

MyBatis

这是小弟上黑马的MyBatis的课总结的笔记,需要的兄弟姐妹们可以拿去,不到两天就可以直接上手啦。


MyBatis开发手册中文官网:https://mybatis.org/mybatis-3/zh/getting-started.html

什么是MyBatis?

MyBatis是一款持久层框架,用于简化JDBC开发

持久层和框架

JavaEE三层架构:表现层,业务层,持久层

表现层:页面展示

业务层:逻辑处理

持久层:负责数据持久化,将数据保存到数据库的一层代码

框架:一个半成品软件,是一套可以重用的、通用的软件基础代码模型,在其基础上构建软件编写更高效、规范、通用、可扩展

JDBC缺点与MyBatis的简化

JDBC缺点

1.硬编码

(1)注册驱动

(2)SQL语句

2.操作繁琐

(1)手动设置参数

(2)手动封装结果集

MyBatis的简化

硬编码-----》 使用配置文件

操作繁琐-----》 自动完成

MyBatis快速入门

1、创建user表,添加数据

2、创建模块,导入坐标

3、编写MyBatis核心配置文件-----》替换连接信息,解决硬编码问题

4、编写SQL映射文件-----》统一管理sql语句解决硬编码问题

5、编码:

(1)定义pojo类

(2)加载核心配置文件,获取SqlSessionFactory对象

(3)获取SqlSession对象,执行SQL语句

(4)释放资源

注意:logback.xml、mybatis-config.xml、xxxMapper.xml需要放在resources文件夹下面

导入坐标

写在pom.xml文件里

  
        
        
            org.mybatis
            mybatis
            3.5.9
        
        
            mysql
            mysql-connector-java
            8.0.28
        
        
            junit
            junit
            3.8.2
            test
        
        
            org.slf4j
            jcl-over-slf4j
            1.5.6
        
        
            ch.qos.logback
            logback-classic
            1.4.5
        
        
            ch.qos.logback
            logback-core
            1.4.5
        
​
​
    

logback配置文件

打印日志时需要,不需要日志可以不用

文件名:logback.xml



    
    
        %d{HH:mm:ss.SSS} [%thread] %-5level%logger{36} -%msg%n
    


    

MyBatis核心配置文件

文件名:mybatis-config.xml(一般都为这个)




    
        
            
            
                
                
                
                
                
            
        
    
    
        
        
    

SQL映射文件

文件名:xxxMapper.xml,xxx根据结果集封装到的pojo而定,如这里的是UserMapper.xml





    
        select*fromuser;
    

编码

publicclassMyBatisDemo {
​
    publicstaticvoidmain(String[] args) throwsIOException {
        //1.加载mybatis的核心配置文件,获取SqlSessionFactory
        Stringresource="mybatis-config.xml";
        InputStreaminputStream=Resources.getResourceAsStream(resource);
        SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder().build(inputStream);
​
        //2、获取对象,用它来执行sql
        SqlSessionsqlSession=sqlSessionFactory.openSession();
​
        //3、执行sql
        Listusers=sqlSession.selectList("test.selectAll");
​
        System.out.println(users);
​
        //4、释放资源
        sqlSession.close();
    }
} 
   

Mapper代理开发

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

(在resources目录下建mapper目录,要和mapper接口所在目录同名,即com.mapper,但是在resources目录下建时,要为com/mapper,否者编译后会文件名为一长串的com.mapper,而非mapper)

2、设置sql映射文件的namespace属性为Mapper接口全限定名



    
        select*
        fromuser;
    

3、在Mapper接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致

publicinterfaceUserMapper {
​
    ListselectAll();
​
}

4、编码:

(1)通过 SqlSession 的 getMapper 方法获取 Mapper接口的代理对象

(2)调用对应方法完成sql的执行

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

细节:若Mapper接口名称和SQL映射文件名称相同,并在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载


    
    

    
    

Mapper核心配置文件

MyBatis快速上手_第1张图片

设置各个标签时,需要遵守前后循序(如上图)

mybatis-config.xml




    
    
        
    

    
    
        
            
            
            
            
                
                
                
                
                
            
        
    
    
        
        

        
        
    


使用类型别名后,xxxMapper.xml文件如下:






    
    

配置文件完成增删改查

前置准备

1. 建好brand数据库表

2. 在pojo包下建好Brand类

3. 建brandMapper接口

4. 建brandMapper.xml

5. 在test包下,建立测试类

6. 安装mybatisX插件

查询

查询所有数据

1.编写接口方法:Mapper接口

参数:无

结果:List

2.编写SQL语句:SQL映射文件

3.执行方法,测试

brandMapper.xml文件如下:








    
        
        
        
    

    

















查询单行数据

1.编写接口方法:Mapper接口

参数:id

结果:Brand

2.编写SQL语句:SQL映射文件

3.执行方法,测试

brandMapper.xml文件如下:


    

条件查询
多条件查询

1.编写接口方法:Mapper接口

参数:所有查询条件

结果:List

2.编写SQL语句:SQL映射文件

3.执行方法,测试

接口方法:

/*
    条件查询:
        参数接收:
            1. 散装参数:若方法中有多个参数,需要使用@Param("SQL参数占位符名称")
            2. 对象参数:对象属性名称要和参数占位符名称一致
            3. map集合参数:
 */

List selectByCondition(@Param("status")int status,@Param("companyName")String companyName,@Param("brandName")String brandName);

List selectByCondition02(Brand brand);

List selectByCondition03(Map map);

对应SQL映射文件主要代码:





对应测试方法:

    @Test
    public void testSelectByCondition() throws IOException {

        int status = 1;
        String companyName = "葡萄";
        String brandName = "葡萄";

		//处理参数
        companyName = "%"+companyName+"%";
        brandName = "%"+brandName+"%";

        Brand brand = new Brand();
        brand.setStatus(status);
        brand.setCompanyName(companyName);
        brand.setBrandName(brandName);

        Map map = new HashMap();
        map.put("status",status);
        map.put("companyName",companyName);
        map.put("brandName",brandName);

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

        //2.获取 SqlSession 对象
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //3.获取Mapper接口代理对象
        BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);

        //4.执行方法

//        List brandList = brandMapper.selectByCondition(status, companyName, brandName);

//        List brandList = brandMapper.selectByCondition02(brand);

        List brandList = brandMapper.selectByCondition03(map);
        System.out.println(brandList);

        //5.释放资源
        sqlSession.close();

    }

多条件动态条件查询

上面写法有缺陷,如果条件为空,则查不出正确的信息,故需要使用动态sql,实现动态条件查询

对应SQL映射文件主要代码:


    

单条件动态条件查询:

对应SQL映射文件主要代码:

添加

1.编写接口方法:Mapper接口

参数:除id外的所有数据

结果:void 或 int

2.编写SQL语句:SQL映射文件

3.执行方法,测试

对应部分SQL映射文件代码:


    insert into brand (brand_name,company_name,ordered,description,status)
    values (#{brandName},#{companyName},#{ordered},#{description},#{status});

MyBatis事务管理:

openSession():默认开启事务,进行增删改操作后需要使用sqlSession.commit();手动提交事务

openSession(true):可以设置为自动提交事务(或关闭事务)

主键返回

添加数据成功后,获取插入数据库数据的主键的值

设置:

修改

修改全部字段

1.编写接口方法:Mapper接口

参数:所有数据

结果:void或int

2.编写SQL语句:SQL映射文件

3.执行方法,测试

对应部分SQL映射文件代码:


    update brand
    set brand_name = #{brandName},
        company_name = #{companyName},
        ordered = #{ordered},
        description = #{description},
        status = #{status}
    where id = #{id};

修改部分字段

对应部分SQL映射文件代码:

单独使用标签,每句后面的逗号可能会引起语法错误,故需要结合标签


    update brand
    
    
        brand_name = #{brandName},
    

    
        company_name = #{companyName},
    

    
        ordered = #{ordered},
    

    
        description = #{description},
    

    
        status = #{status}
    
    
    where id = #{id};

删除

单个删除

1.编写接口方法:Mapper接口

参数:id

结果:void或int

2.编写SQL语句:SQL映射文件

3.执行方法,测试

对应部分SQL映射文件代码:


    delete from brand
    where id = #{id};

批量删除

1.编写接口方法:Mapper接口

参数:id数组

结果:void或int

2.编写SQL语句:SQL映射文件

3.执行方法,测试

对应部分SQL映射文件代码:


    
        delete from brand
        where id
        in
            
                #{id}
            
        ;
    

注解

在xxxMapper接口文件写,如:

@Select("select * from brand where id = #{id}")
Brand selectById(int id);

插入、修改、删除操作同理

但是注解只能进行简单的sql操作,一旦sql语句里面涉及到例如动态sql时,就会显得力不从心

故当要完成简单的功能,可以用注解写sql语句;但要完成较复杂的功能,则用配置文件写sql语句

你可能感兴趣的:(学习笔记,mybatis,java,mysql,数据库,database)