栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

MyBatis基础——学习笔记

Java 更新时间:发布时间: 百科书网 趣学号

目录

1.概念:

2.使用MyBatis的流程

2.1.导入Mysql和MyBatis所依赖的jar包(中途也会根据需要导入其他jar包)

2.2.在resources中创建mybatis.xml配置文件(内容复制粘贴即可)

 2.3.创建数据库和表并添加内容。

 2.4.创建实体类

2.5.在resources中创建mybatis和数据库的映射文件(复制即可)

2.6将映射文件注册到配置文件中

 2.7测试Mybatis

3.使用mybatis完成对数据库的crud(增删改查)

3.1在映射文件中写sql语句

3.2测试类

4.优化MaBatis

4.1.为实体类起别名

4.2.添加sql日志

5.企业开发模式

5.1.创建一个dao接口并定义自己需要的方法(是接口不是类)。

5.2.创建并编写映射文件

5.3测试

6.传递多个参数的方法

6.1.方式一

6.2.方式二

7.添加时返回递增的主键值

8.解决表的字段名与实体类的属性名不一致的情况

8.1.方式一:为查询的列起别名,而别名和属性名一致。

 8.2.方式二:使用resultMap完成列和属性之间的映射关系。

9.动态sql

9.1.什么时动态sql

9.2.动态sql的标签有哪些

9.3.if标签——单条件判断

9.4.choose标签——多条件分支判断

9.5.where标签(辅助标签)

9.6.set标签

9.7.foreach标签

9.8.sql片段

10.mybatis映射文件处理特殊字符的方法

10.1使用转义符

10.2.使用

11.mybatis完成模糊查询

11.1使用字符串拼接完成

11.2.使用${}

12.连表查询

13.分页查询(pageHelper)

13.1.回顾分页的sql语句:

13.2.导入pagehelper 依赖的jar 包

13.3.mybatis中设置pageHelper的拦截器

 13.4.测试并使用pagehelper

 13.5.pagehelper的作用:

13.6.pagehelper的原理

14.mybatis的代码生成器——generator

14.1.作用

14.2.使用流程

15.mybatis的缓存

 15.1.缓存的好处

 15.2.什么样的数据适合/不适合放入缓存中

 15.3.mybatis的缓存有两种

 15.4.演示一级缓存

 15.4.1.测试重新开启一个session时一级缓存是否有效

          15.5.演示二级缓存


1.概念:

MyBatis 是一款优秀的持久层Dao框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Java实体类)映射成数据库中的记录.

使用MyBatis的好处:可以简化jdbc的操作以及占位符赋值以及查询结果集的封装。

2.使用MyBatis的流程

2.1.导入Mysql和MyBatis所依赖的jar包(中途也会根据需要导入其他jar包)


    4.0.0

    com.pgx
    mybatis03
    1.0-SNAPSHOT

    
        8
        8
    
    
        
            mysql
            mysql-connector-java
            8.0.22
        
        
            org.mybatis
            mybatis
            3.4.6
        
        
            log4j
            log4j
            1.2.17
        
        
            org.projectlombok
            lombok
            1.18.24
        
        
            junit
            junit
            4.12
        
    

2.2.在resources中创建mybatis.xml配置文件(内容复制粘贴即可)



    
        
            
            
            
                
                
                
                
            
        
    

 2.3.创建数据库和表并添加内容。
DROp TABLE IF EXISTS `tb_user`;
CREATE TABLE `tb_user`  (
  `userid` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `realname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  PRIMARY KEY (`userid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of tb_user
-- ----------------------------
INSERT INTO `tb_user` VALUES (1, 'admin', '管理员');
INSERT INTO `tb_user` VALUES (2, 'lm', '黎明');
INSERT INTO `tb_user` VALUES (3, 'ldh', '刘德华');
INSERT INTO `tb_user` VALUES (4, 'zxy', '张学友');
INSERT INTO `tb_user` VALUES (5, 'gfc', '郭富城');

 2.4.创建实体类
package com.pgx.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
//使用lombok插件添加注解生成get,set方法和有参构造,无参构造,以及重写了toString方法
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    protected int id;
    protected String username;
    protected String password;
}

2.5.在resources中创建mybatis和数据库的映射文件(复制即可)




    
    
        select * from tb_user where userid=#{id}
    

    
    
        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}
    

    
    
    select * from user where id=#{id};
    

4.2.添加sql日志

1).导入log4j依赖

 		
        
            log4j
            log4j
            1.2.17
        

2).在resources中创建log4j.properties文件(文件名必须是这个,并将下面的代码写进去,复制即可)

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

作用:在控制台打印你的sql语句的操作,便于查看或纠正sql语句错误

5.企业开发模式

思考: 我们之前使用SqlSession封装的一些方法可以完成crud操作,但是SqlSession封装的方法,传递的参数statement, 传递占位符的参数只能传递一个。而且他的方法名称都是固定。而真实在开发环境下我们不使用SqlSession封装的方法,而是习惯自己定义方法,自己调用自己的方法。

步骤:

5.1.创建一个dao接口并定义自己需要的方法(是接口不是类)。
package com.pgx.dao;

import com.pgx.entity.User;


import java.util.List;

public interface UserDao {
    //根据id查询莫一条记录的方法
    public User findOne(int id);
    //查询所有记录的方法
    public List findAll();
    //添加记录的方法
    public int insert(User user);
    //根据id修改记录的方法
    public int edit(User user);
    //根据id删除记录的方法
    public int delete(int id);

}

5.2.创建并编写映射文件




    
        insert into user values(null,#{username},#{password})
    
    
        update user set username=#{username},password=#{password} where id=#{id}
    
    
        delete from user where id=#{id}
    

    
        select * from user
    
    
        select * from user where username=#{param1} and password=#{param2}
    

6.2.方式二

方法:

//通过@param为参数起别名,其中的内容就可以直接写在sql里的#{}中 
public User login(@Param("username") String username, @Param("password") String password);

sql语句:

    
        select stu_id id,stu_name name,stu_age age from tb_stu where stu_id=#{id}
    

 8.2.方式二:使用resultMap完成列和属性之间的映射关系。
    
         
         
         
         
         
    

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

只会选择满足其中的一个条件作为查询条件,如果都满足,也只会选择第一个满足的条件作为查询条件,如果都不满足 会使用otherwise中的条件作为查询条件。类似与Java中的switch(case,fainly) 

9.5.where标签(辅助标签)

可以看到上面sql语句中,存在 where 1=1 ,是用于当条件都不满足时保证sql语句的合法

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

 
        select * from account where name like concat('%',#{name},'%')
    

11.2.使用${}