java面试题/认证答辩 ---主流框架(mybatis)

  1. 掌握程度:
    熟悉:熟悉相关框架的基本开发技巧,能使用框架进行基本开发
    掌握:理解AOP,IOC等概念,熟悉相关框架的基本实现原理,能独立使用相关框架搭建中型产品和项目。
    精通:熟悉相关框架源代码,能够使用拦截器,AOP等技术进行系统安全和数据监控等复杂功能的开发
    综合应用:掌握相关框架实现原理,能够对框架进行扩展开发,有大型产品或项目框架选型和搭建经验,具有问题排查解决能力

mybatis
参考:

https://blog.csdn.net/ITITII/article/details/79969447
http://www.mybatis.cn/archives/706.html
https://blog.csdn.net/mrright_senlypan/category_10650064.html

基础使用jdbc 连接数据库:

   Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        try {
            //1、加载数据库驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            //2、通过驱动管理类获取数据库链接
            String url = "jdbc:mysql://localhost:3306/qh_platform";
            String user ="root";
            String password ="root@123";
            connection =  DriverManager.getConnection(url, user, password);
            //3、定义sql语句 ?表示占位符
            String sql = "select * from plan where id = ?";
            //4、获取数据库执行对象statement
            preparedStatement = connection.prepareStatement(sql);
            //5、设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值
            preparedStatement.setString(1, "67");
            //6、向数据库发出sql执行查询,查询出结果集
            resultSet =  preparedStatement.executeQuery();
            //7、遍历查询结果集
            while(resultSet.next()){
                System.out.println(resultSet.getString("id")+"  "+resultSet.getString("plan_name"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            //8、释放资源
            if(resultSet!=null){
                try {
                    resultSet.close();//释放结果集
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if(preparedStatement!=null){
                try {
                    preparedStatement.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if(connection!=null){
                try {
                    connection.close();//关闭数据库连接
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }

Mybatis工作原理:
在这里插入图片描述
Mybatis核心对象
(1)SqlSession对象,该对象中包含了执行SQL语句的所有方法
(2)Executor接口,它将根据SqlSession传递的参数动态地生成需要执行的SQL语句,同时负责查询缓存的维护
(3)MappedStatement对象,该对象是对映射SQL的封装,用于存储要映射的SQL语句的id、参数等信息。
(4)ResultHandler对象,用于对返回的结果进行处理,最终得到自己想要的数据格式或类型。

Mybatis 核心配置文件
① properties(属性): 驱动 账号 密码
② settings(全局设置)
③ typeAliases(类型别名)
④typeHandlers(类型处理器)
⑤objectFactory(对象工厂)
⑥plugins(插件标签)
⑦environments(环境配置)
⑧databaseIDProvider(数据库厂商标识)
⑨Mappers(映射器)

一些面试题 参考:

https://zhuanlan.zhihu.com/p/368838277
  1. 通常一个xml文件都有一个dao接口与之对应,请问这个dao接口的工作原理是什么? dao接口中的参数能重载吗?
	: Dao接口就是常说的Mapper接口, 接口的全限名就是映射文件中的namespace的值,接口的方法名就是映射文件的MappedStatement的id值, 接口方法内的参数,就是传递给sql的参数, Mapper接口没有实现类,当接口被调用时,接口全限名 + 方法名 拼接的字符串可以定位一个MappedStatement
	
	Dao接口中的方法不能重载, 因为时全限名 + 方法名在mapper.xml中查找 xml中id 不能重复 会报错
	(namespace 不同 id 可以重复)
	xml中的id 为什么不能重复   使用namespace+id是作为Map<String,MappedStatement>的key使用
	
	Dao接口的工作原理是 JDK的动态代理, Mybatis运行时 会使用JDK动态代理为接口生成代理proxy, 代理对象会拦截接口方法, 转而执行MappendStatement所代表的sql
  1. Mybatis动态sql是什么? 动态sql的原理是什么?
	Mybatis动态sql可以让我们在xml映射文件内,以标签的形式编写动态sql,完成逻辑判断和动态拼接sql的功能,Mybatis提供了9种动态sql标签
	① if
	② where
	③ trim
	④ set
	⑤ foreach
	⑥ choose
  1. mybatis是如何分页的 分页插件的原理是什么?
参考: https://www.cnblogs.com/aeolian/p/9229149.html
分页方式1: 查出所有数据,然后再list中进行分页
分页方式2:  sql 分页 使用limit
分页方式3: 拦截器分页, 创建拦截器 拦截mybatis接口方法()
分页方式4: 使用RowBounds对象进行分页(内存分页,只适合数据量小的情况下)
  1. Mybatis 缓存机制
参考: https://www.w3cschool.cn/mybatis/mybatis-xlc73bt4.html

mybatis缓存分为: 一级缓存和二级缓存
一级缓存: sqlsesson缓存, 只在sqlsession内有效(默认开启)
执行(insert、update、delete),并 commit 了,一级缓存会被清空
二级缓存: 是mapper级别的, 也就是同一个namespace的mapper.xml,当多个SqlSession
使用同一个Mapper操作数据库的时候,得到的数据会在二级缓存中存储.(二级缓存默认关闭)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java Spring Boot 是一个快速开发框架MyBatisMyBatis-Plus 是两个流行的 ORM 框架,Spring Boot 与 MyBatis/MyBatis-Plus 的整合可以帮助我们更快更方便地进行开发。 下面是使用Java Spring Boot整合MyBatis/MyBatis-Plus的步骤: 1. 在 pom.xml 文件中添加 MyBatis/MyBatis-Plus 和 MySQL 驱动的依赖: ```xml <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.0</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.3.1</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.23</version> </dependency> ``` 2. 在 application.properties/application.yml 文件中配置数据源和 MyBatis/MyBatis-Plus 的配置信息: ```yaml spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver mybatis.type-aliases-package=com.example.demo.entity mybatis-plus.mapper-locations=classpath:/mapper/*.xml ``` 3. 在 Spring Boot 启动类上添加 `@MapperScan` 注解,指定 MyBatis/MyBatis-Plus 的 Mapper 所在的包: ```java @SpringBootApplication @MapperScan("com.example.demo.mapper") public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } ``` 4. 创建实体类和 Mapper 接口: ```java public class User { private Long id; private String name; private Integer age; // 省略 getter 和 setter 方法 } @Mapper public interface UserMapper extends BaseMapper<User> { } ``` 5. 创建 Mapper 的 XML 文件(如果使用 MyBatis-Plus 可以省略此步骤): ```xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.example.demo.mapper.UserMapper"> <resultMap id="BaseResultMap" type="com.example.demo.entity.User"> <id column="id" property="id" /> <result column="name" property="name" /> <result column="age" property="age" /> </resultMap> <select id="selectById" resultMap="BaseResultMap"> select * from user where id = #{id} </select> </mapper> ``` 6. 在 Service 中使用 Mapper: ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public User getUserById(Long id) { return userMapper.selectById(id); } } ``` 这样就完成了 Java Spring Boot 整合 MyBatis/MyBatis-Plus 的基本步骤。需要注意的是,在使用 MyBatis-Plus 的情况下,Mapper 接口无需自己编写 CRUD 操作的方法,直接继承 `BaseMapper` 接口即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值