Java:MyBatis框架

MybatisConfig.xml





    
        
    

    
        
            
            
                
                
                
                
            
        
    
    
        
        
    

mappers映射文件

  • resource:从类路径中加载
  • 
      
    
  • url:从指定的全限定资源路径中加载
  • 
      
    
  • class:使用映射器接口实现类的完全限定类名
  • 
    
      
    
  • package:将包内的映射器接口实现全部注册为映射器
  • 
    
      
    

 typeAliases:

package将类名简写


    
        
    

 typeAliases标签


  

type属性:指定给哪个类起别名     alias属性:别名

 接口方法

public interface BrandMapper {

    /**
     * 查询所有
     */
    List selectAll();
    /**
    *多条件查询
    */
    List selectByCondition(@Param("status") int status, @Param("companyName")     
    String companyName,@Param("brandName") String brandName);
     /**
     * 添加
     */
    void add(Brand brand);
     /**
     * 修改
     */
    void update(Brand brand);
    /**
    * 根据id删除
    */
    void deleteById(int id);
    /**
    * 批量删除
    */
    void deleteByIds(int[] ids);
}

单条件sql语句

resultMap:将_命名的变量转化为驼峰命名
   
       
       
   





    
        
        
    

    
    
    
        insert into tb_brand (brand_name, company_name, ordered, description, status)
        values (#{brandName}, #{companyName}, #{ordered}, #{description}, #{status});
    
    
        update tb_brand
        
            
                brand_name = #{brandName},
            
            
                company_name = #{companyName},
            
            
                ordered = #{ordered},
            
            
                description = #{description},
            
            
                status = #{status}
            
        
        where id = #{id};
    
    
        delete from tb_brand where id = #{id};
    
    
        delete from tb_brand where id
        in
        
            #{id}
        ;
    

多条件查询

①使用 @Param("参数名称") 标记每一个参数,映射配置文件中就需要使用 #{参数名称} 进行占位

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

②将多个参数封装成一个 实体对象 ,将该实体对象作为接口的方法参数。该方式要求在映射配置文件的SQL中使用 #{内容} 时,里面的内容必须和实体类属性名保持一致。  

List selectByCondition(Brand brand);

③将多个参数封装到map集合中,将map集合作为接口的方法参数。该方式要求在映射配置文件的SQL中使用 #{内容} 时,里面的内容必须和map集合中键的名称一致。  

List selectByCondition(Map map);

动态sql 

select * from tb_brand where status = ? and company_name like ? and brand_name like ?

test 属性:逻辑表达式   以及   and的使用

foreach 标签

用来迭代任何可迭代的对象(如数组,集合)。

  • collection 属性:

    • mybatis会将数组参数,封装为一个Map集合。

      • 默认:array = 数组

      • 使用@Param注解改变map集合的默认key的名称

  • item 属性:本次迭代获取到的元素。

  • separator 属性:集合项迭代之间的分隔符。foreach 标签不会错误地添加多余的分隔符。也就是最后一次迭代不会加分隔符。

  • open 属性:该属性值是在拼接SQL语句之前拼接的语句,只会拼接一次

  • close 属性:该属性值是在拼接SQL语句拼接后拼接的语句,只会拼接一次


    delete from tb_brand where id
    in
    
        #{id}
    
    ;

注意:

编写接口方法:当有多个条件时

使用 @Param("参数名称") 标记每一个参数,在映射配置文件中就需要使用 #{参数名称} 进行占位

将多个参数封装成一个 实体对象 ,将该实体对象作为接口的方法参数。该方式要求在映射配置文件的SQL中使用 #{内容} 时,里面的内容必须和实体类属性名保持一致。

将多个参数封装到map集合中,将map集合作为接口的方法参数。该方式要求在映射配置文件的SQL中使用 #{内容} 时,里面的内容必须和map集合中键的名称一致。

注解实现CRUD

  • 查询 :@Select

  • //根据id查询
    @Select(value = "select * from tb_user where id = #{id}")
    public User select(int id);
    //查询所有
    @Select(value = "select * from tb_user")
    public List select();
    
  • 添加 :@Insert

  • //添加操作
    @Insert("insert into tb_brand values(null,#{brandName},#{companyName},#{ordered},#{description},#{status})")
        void add(Brand brand);
  • 修改 :@Update

  • //更新操作
    @Update("update tb_brand set brand_name = #{brandName}, company_name = #{companyName},ordered = #{ordered},description = #{description},status = #{status},where id = #{id};")
    void update(Brand brand);
  • 删除 :@Delete

  • @Delete("delete * from tb_brand where id = #{id}")
    void delete(Integer id);

逆向工程 

在pom中添加逆向工程插件



  
  
    
    
      
      org.mybatis.generator
      mybatis-generator-maven-plugin
      1.4.1
      
      
        true
      
      
      
        
        
          mysql
          mysql-connector-java
          8.0.30
        
      
    
  

配置generatorConfig.xml





    
    
        
        
      
        
            
            
            
            
        

        
        
        

        
        
            
            
            
            
        

        
        
            
            
        

        
        
            
        

        
        

测试

@Test
    public void testSelectByPrimaryKey(){
        SqlSession sqlSession = factory.openSession();
        BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);
        Brand brand = mapper.selectByPrimaryKey(1);
        System.out.println(brand);
        sqlSession.close();
    }
    @Test
    public void testSelectByExample(){
        SqlSession sqlSession = factory.openSession();
        BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);
        List brands = mapper.selectByExample(null);
        brands.forEach(brand -> System.out.println(brand));
        sqlSession.close();
    }

引入日志框架logback

//写到mybatis-config.xml

  

logback依赖


  ch.qos.logback
  logback-classic
  1.2.11
  test

logback.xml




    
    
        
            
            %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
        
    
    
    
        
            
            ${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log
            
            30
        
        
            
            %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
        
        
        
            100MB
        
    

    
    
    
    
    

    
    
        
        
    

MyBatis分页查询

mybatis-config.xml   注:放在typeAliases的下面

    
        
    

导入依赖

    
      com.github.pagehelper
      pagehelper
      5.3.1
    

测试类

    @Test
    public void testSelectAll(){
        SqlSession sqlSession = factory.openSession();
        BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);
        int pageNum = 1;
        int pageSize = 2;
        PageHelper.startPage(pageNum,pageSize);
        List brands = mapper.selectAll();
        brands.forEach(brand -> System.out.println(brand));
    }

sql语句:select * from  tableName ...... limit  (pageNum - 1) * pageSize, pageSize

mapper接口

    /**
    * 通过分页的方式获取Brand列表
    * @param startIndex 页码
    * @param pageSize 每页显示记录条数
    * @return
    */
    List selectAllByPage(@Param("startIndex") Integer startIndex, @Param("pageSize")                 Integer pageSize);

mapper.xml

    

测试类

public class PageTest {
    @Test
    public void testPage()throws Exception{
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
        SqlSession sqlSession = sqlSessionFactory.openSession();
        CarMapper mapper = sqlSession.getMapper(CarMapper.class);

        // 页码
        Integer pageNum = 2;
        // 每页显示记录条数
        Integer pageSize = 3;
        // 起始下标
        Integer startIndex = (pageNum - 1) * pageSize;

        List brands= mapper.selectAllByPage(startIndex, pageSize);
        brands.forEach(car -> System.out.println(brand));

        sqlSession.commit();
        sqlSession.close();
    }
}

你可能感兴趣的:(Spring,SpringMVC,Mybatis,mybatis,java,mysql)