mybatis的总结

1、如何使用mybatis

(1)在pom.xml中引用mybatis和SQL的jar包和要用到的jar包

 com.wk
    mybatis05
    1.0-SNAPSHOT
    

        
            mysql
            mysql-connector-java
            8.0.28
        
        

            junit
            junit
            4.12
            test
        

        
            log4j
            log4j
            1.2.17
        
        
            org.projectlombok
            lombok
            1.18.24
        
        
            org.mybatis
            mybatis
            3.4.6
        
    

(2)创建mybatis的配置文件----复制粘贴即可




    
        
            
            
            
                
                
                
                
            
        
    

有些地方需要根据自己的情况进行修改

mybatis的总结_第1张图片

 (3)如果没有数据库和表,进行创建。有的话可以直接及进行连接

  (4) 创建实体类  :类名与数据库表名保持一致。

(5) 创建mybatis和数据库的映射文件.---- 复制粘贴

作用: 映射实体和表之间的映射关系。





    
   

注意:==把映射文件注册到配置文件上== mybatis.xml上

 
    
        
         
    

2、初学者容易犯的错误

(1)mybatis的总结_第2张图片

 (2)mybatis的总结_第3张图片

 (3)mybatis的总结_第4张图片

 (4)mybatis的总结_第5张图片

 (5)

mybatis的总结_第6张图片mybatis的总结_第7张图片

 (6)

mybatis的总结_第8张图片

3、Lombok插件

作用:它可以帮你生成实体类的get和set方法 而且可以帮你生成构造方法。重写toString方法

mybatis的总结_第9张图片

 (2)、pom.xml中引入lombok依赖

(3)在实体类上添加lombok注解。

@Data //set和get方法以及toString方法
@NoArgsConstructor //无参构造方法
@AllArgsConstructor //所有参数的构造方法

4、使用mybatis完成crud





    
    

    
    
        insert into tb_user(username,realname) values(#{username},#{realname})
    

    
    
        delete from tb_user where userid=#{id}
    

    
    
         update tb_user set username=#{username},realname=#{realname} where userid=#{userid}
    

    
    


测试

package com.test;

import com.ykq.entity.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.Reader;
import java.util.List;



public class Test01 {
    //查询所有
    @Test
    public void testFindAll()throws Exception{
        Reader reader = Resources.getResourceAsReader("mybatis.xml");
        SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(reader);
        SqlSession session=factory.openSession();
        List users = session.selectList("namespace起的名字.findAll");
        System.out.println(users);
        session.commit();//必须提交
        session.close();
    }

    //修改
    @Test
    public void testUpdate()throws Exception{
        Reader reader = Resources.getResourceAsReader("mybatis.xml");
        SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(reader);
        SqlSession session=factory.openSession();
        User user=new User(8,"lm","we");
        int row = session.update("", user);
        System.out.println(row);

        session.commit();//必须提交
        session.close();
    }

    //删除
    @Test
    public void testDelete()throws Exception{
        Reader reader = Resources.getResourceAsReader("mybatis.xml");
        SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(reader);
        SqlSession session=factory.openSession();

        int row = session.delete("", 1);
        System.out.println(row);

        session.commit();//必须提交
        session.close();
    }

    //测试添加
    @Test
    public void testAdd() throws Exception{
        Reader reader = Resources.getResourceAsReader("mybatis.xml");
        SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(reader);
        SqlSession session=factory.openSession();
        User user=new User();
//        user.setUsername("lmtb");
//        user.setRealname("xx");
        int row = session.insert("", user);
        System.out.println(row);
        session.commit();//必须提交
        session.close();
    }
}

5、mybatis一些优化

(1)mybatis.xml配置文件

  
       
        
       
        
   

 (2)添加sql的日志--mybatis.xml配置文件

log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

6、dao和映射文件的关联

(1)创建一个dao接口并定义自己需要的方法。

public interface ###Dao {
    /**
     * 查询所有
     * @return
     */
    public List<###> findAll();
}

(2)创建映射文件





    

注意: namespace必须和dao接口一样,而且标签的id必须和你接口的方法名一样。

mybatis的总结_第10张图片

(3)测试

   @Test
    public void  testFindAll()throws Exception{
        Reader reader = Resources.getResourceAsReader("mybatis.xml");
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
        SqlSession session =factory.openSession();
        	//获取相应接口的代理对象
        StudentDao studentDao = session.getMapper(StudentDao.class);
        List list = studentDao.findAll();
        System.out.println(list);
        session.close();
    }

 mybatis的总结_第11张图片

 mybatis的总结_第12张图片

 7、传递多个参数

在dao接口中某些方法可能需要传递多个参数,例如:查询单条信息的限制条件

mybatis的总结_第13张图片

不加@param进行注解报的错误

8、添加时返回递增的主键值

需要返回添加数据库后的id值。


    
          insert into tb_user values(null,#{username},#{realname})
    

9、列名和属性名不一致

列名和属性名不一致时, 查询的结果是null,或者某个列没有值

可以有两种解决办法:

(1) 为查询的列起别名,而别名和属性名一致。

列名和属性名不一致

列名和属性名不一致时, 查询的结果是null,或者某个列没有值

可以有两种解决办法:

(1) 为查询的列起别名,而别名和属性名一致。


(2)使用resultMap完成列和属性之间的映射关系。

mybatis的总结_第14张图片

 
         
         
         
         
         
     
    
    

10、动态sql

动态sql:根据参数的值,判断sql的条件。

mybatis中动态sql标签:

mybatis的总结_第15张图片

11、dao和映射文件的关联


1、操作流程

(1)创建一个dao接口并定义自己需要的方法。

 
  
  1. public interface ###Dao {
    
    /**
    
    * 查询所有
    
    * @return
    
    */
    
    public List<###> findAll();
    
    }
    

(2)创建映射文件

 
  
  1. 
    
    
    
    
    
    
    
    
    
    

注意: namespace必须和dao接口一样,而且标签的id必须和你接口的方法名一样。

mybatis的总结_第16张图片

(3)测试

 
  
  1. @Test
    
    public void testFindAll()throws Exception{
    
    Reader reader = Resources.getResourceAsReader("mybatis.xml");
    
    SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
    
    SqlSession session =factory.openSession();
    
    //获取相应接口的代理对象
    
    StudentDao studentDao = session.getMapper(StudentDao.class);
    
    List list = studentDao.findAll();
    
    System.out.println(list);
    
    session.close();
    
    }

 mybatis的总结_第17张图片

 mybatis的总结_第18张图片

2、传递多个参数

在dao接口中某些方法可能需要传递多个参数,例如:查询单条信息的限制条件

mybatis的总结_第19张图片

不加@param进行注解报的错误

3、添加时返回递增的主键值

需要返回添加数据库后的id值。





insert into tb_user values(null,#{username},#{realname})

4、列名和属性名不一致

列名和属性名不一致时, 查询的结果是null,或者某个列没有值

可以有两种解决办法:

(1) 为查询的列起别名,而别名和属性名一致。

 
  

(2)使用resultMap完成列和属性之间的映射关系。

mybatis的总结_第20张图片

 
  
  1. 
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

5、动态sql

动态sql:根据参数的值,判断sql的条件。

mybatis中动态sql标签:

mybatis的总结_第21张图片

if标签--单条件判断


        select * from account where 1=1
        
             
                 and  name=#{name}
             
            
                and  money=#{money}
            
            
                and isdeleted=0
            
        
    

where标签

作用:可以自动为你添加where关键字,并且可以帮你去除第一个and |or


set标签

这个配合if标签一起用,一般用在修改语句。如果传递的参数值为null,那么应该不修改该列的值。


    
          update account
          
             
                name=#{name},
             
             
                money=#{money},
             
             
                 isdeleted=#{isdeleted},
             
            
          
          where id=#{id}
    

foreach标签

循环标签.

查询:


    

删除:

 
        
            #{id}
        
    

添加:


        insert into account(name,isdeleted) values
        
            (#{acc.name},#{acc.isdeleted})
        
    

mybatis映射文件处理特殊字符


    

mybatis完成模糊查询。

(1)使用字符串函数 完成拼接 concat

(2) 使用${}


         select * from tb_stu s join tb_class c on s.class_id=c.cid where stu_id=#{id}
    

分页插件PageHelper

使用流程:

(1)引入pageHelper的jar包

 
        
            com.github.pagehelper
            pagehelper
            5.1.11
        

(2)mybatis中设置pageHelper的拦截器

 
        
    

(3)使用pageHelper

 @Test
    public void testFindAll() throws Exception{
        Reader reader = Resources.getResourceAsReader("mybatis.xml");
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
        SqlSession session = factory.openSession();
        StudentDao studentDao = session.getMapper(StudentDao.class);
      // 设置分页属性pageNum:显示第几页  PageSize:每页显示的条数
        PageHelper.startPage(1,1);
        //把查询的结果封装到PageInfo类中。
        List list = studentDao.findAll();
        PageInfo pageInfo = new PageInfo(list);
        System.out.println(pageInfo.getPages());
        System.out.println(list);

        session.close();
}

注意:在这一步要把相关实体类实现可序列化

否则会报错:

 解决方法:

 原理: mybatis的总结_第22张图片

 

mybatis的代码生成器--generator

作用: 根据表帮你生成实体类,和dao和xml映射文件。就是简单的CRUD

使用流程:

(1)引入mybatis-generator的依赖jar包

  
            org.mybatis.generator
            mybatis-generator-core
            1.4.0
        

(2)generator的配置文件





    
    

    
        
        
            
        
        
        
        

        
            
        
        
        
            
            
        
        
        
            
        
        
        
            
        
        
        

mybatis的总结_第23张图片

 (3)运行你的配置文件

在测试类里进行运行即可

 @Test
    public void test0001()throws Exception{
        List warnings = new ArrayList();
        boolean overwrite = true;
        File configFile = new File("geneator.xml");
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = cp.parseConfiguration(configFile);
        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
        myBatisGenerator.generate(null);
    }

mybatis的总结_第24张图片

 

mybatis的缓存

缓存是存在于==内存中==的临时数据

使用缓存的好处:使用缓存减少和数据库的交互次数,提高执行效率。

mybatis的总结_第25张图片

 

mybatis也支持缓存

mybatis支持两种缓存

(1)一级缓存----基于SqlSession级别的缓存。默认一级缓存是开启的,不能关闭。

(2)二级缓存--基于SqlSessionFactory级别的缓存,它可以做到多个SqlSession共享数据。默认它是关闭。需要手动开启。

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