1、动态sql标签
- if标签(逻辑判断)
- where标签(SQL判断)
- choose,when,otherwise(Java中的switch)
- set (sql修改)
- trim(截断 添加)
- bind(模糊查询)
- foreach(循环)
- sql (复用)
2、mybatis是如何实现缓存的?什么是一级缓存,什么是二级缓存?
把经常访问但是不经常修改的数据存储在缓存内容中,减少与数据库交互,从而达到提高效率的目的
①、一级缓存
默认存在,无法关闭
缓存的数据存储在SQLSession对象中(类似Map集合,键对应的sql语句,值就是语句对应的结果)
不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。
②、二级缓存
是把缓存的数据存储在SQLSessionFactory上面(对象内部)
二级缓存的数据,所有的session可以共用
二级缓存默认关闭,使用的需要配置
3、mybatis是如何做分页的?
1、数组分页
先查询出所有数据,再使用subList()方法进行数据分页,不实用,还是会占用大量内存
2、SQL分页
SELECT * FROM table_name LIMIT #{startIndex}, #{pageSize};
3、RowRounds分页
RowBounds 是 MyBatis 提供的一个分页辅助类,它允许你直接在 SQL 映射文件中实现分页
RowBounds rowBounds = new RowBounds((currPage - 1) * pageSize, pageSize);
List<User> list = sqlSession.selectList("com.eric.entity.UserMapper.getAll", null, rowBounds);
4、分页插件
MyBatis 分页插件是另一种实现分页的方式,它通过拦截器拦截 SQL 语句,然后动态地添加 limit 子句来实现分页。
PageHelper.startPage(pageNo, pageSize);
List<User> page = userMapper.selectAll();
PageInfo<User> pageInfo = new PageInfo<>(page);
5、可以使用limit进行分页,这是数据库自带的分页方式
4、什么是内置对象
在某种编程语言或框架中,已经预先定义并且可以直接使用的对象。
内置对象的特点和优势:
1、方便性:内置对象提供了许多常见的功能和操作,可以直接使用,无需自己编写复杂的代码。
2、高效性:内置对象通常经过优化,性能较好,可以提高程序的运行效率。
3、可复用性:内置对象可以被多个程序或模块复用,减少了代码的重复编写。
4、可维护性:内置对象由语言或框架提供,维护和更新由开发者社区或团队负责,可以保证其稳定性和可靠性。
5、为什么dao层接口不能方法重载
因为mybatis中,dao层的方法时通过动态代理来实现的,方法名会被作为id,id具有唯一性,所以不能进行方法重载
6、为什么mybatis是个半自动化的框架
mybatis并不完全自动进行数据访问,需要开发者自己写sql语句
7、mybatis如何做模糊查询(5种方法在代码里)
<!-- 模糊查询-->
<select id="" parameterType="String" resultType="Teacher">
-- select * from teacher where tname like '#{v}%';
-- 有问题,''会把#{v}%当成一个字符串,没法传递数据
select * from teacher where tname like #{v}
--1 从view层就接受%,这里就不用改,不推荐
select * from teacher where tname like concat{#{v,'%'}
--2 concat进行字符串拼接
select * from teacher where tname like ${v}%
--3 ${}是纯字符串拼接,不能防止sql注入,不能用啊,用来理解${},#{}的区别
select * from teacher where tname like #{v}"%"
--4 #{v}最后会被翻译成'张',后面是"%",这个是单双引号交替出现,手册上找不到但是好用
<bind name="x" value="_parameter+'%'"/>
select * from teacher where tname like #{x}
--5 bind标签,官方推荐,bind是用来定义变量的
</select>
8、mybatis是如何获取自动生成的主键的
<!-- 把获取的主键的值放入我们设置的属性 useGeneratedKeys原本是false的,要改为true,keyProperty是-->
<insert id="AddTeacher" parameterType="Teacher" useGeneratedKeys="true" keyProperty="tid">
insert into Teacher(tname,tsex,tbirthday,taddress,temail,tmoney)
values(#{tname},#{tsex},#{tbirthday},#{taddress},#{temail},#{tmoney})
</insert>
9、mybatis出传递多参的方式
<!-- 传多参最好用的javabean-->
<select id="selteacherFenye" resultType="Teacher" parameterType="map">
select * from teacher limit #{curpage},#{sp}
</select>
<!-- 传多参,arg是从0开始,param是从1开始,但是慎用-->
<select id="selteacherarg" resultType="Teacher">
select * from teacher where tsex = #{arg0} and tid = #{arg1}
</select>
<select id="selteacherparam" resultType="Teacher">
select * from teacher where tsex = #{param1} and tid = #{param2}
</select>
10、mybatis解决了JDBC什么问题(4)
硬编码
SQL参数固定(动态sql)
代码重复度高
底层技术
11、mybatis怎么实现一对一,一对多查询
一对多可以通过 <resultMap> 标签中的 <collection> 子标签来完成
<resultMap id="userAccountResultMap" type="User">
<id column="id" property="id" />
<result column="username" property="username" />
<result column="email" property="email" />
<!-- 一对多关联查询 -->
<collection property="accounts" ofType="Account" column="id" select="selectAccounts" />
</resultMap>
<select id="selectUser" resultMap="userAccountResultMap">
SELECT * FROM user WHERE id = #{id}
</select>
<select id="selectAccounts" resultType="Account">
SELECT * FROM account WHERE user_id = #{id}
</select>
一对一查询可以通过 <resultMap> 标签中的 <association> 子标签来完成。
<resultMap id="userResultMap" type="User">
<id column="id" property="id" />
<result column="username" property="username" />
<result column="email" property="email" />
<!-- 一对一关联查询 -->
<association property="address" column="id" select="selectAddress" />
</resultMap>
<select id="selectUser" resultMap="userResultMap">
SELECT * FROM user WHERE id = #{id}
</select>
<select id="selectAddress" resultType="Address">
SELECT * FROM address WHERE user_id = #{id}
</select>
原文地址:https://blog.csdn.net/qq_64669006/article/details/135756402
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_62427.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!