英文网站怎么切换中文,wordpress换域名后,重庆建网站计划,郑州联通网站备案目录
一.什么是Mybatis动态分页
二.mybatis中的动态SQL
在BookMaaper.xml中写sql
BookMapper
BookBiz接口类 BookBizImpl实现接口类
demo测试类
编辑 测试结果
三.mybatis中的模糊查询
mybatis中的#与$有是什么区别 在BookMapper.xml里面建立三个模糊查询
编辑 …
目录
一.什么是Mybatis动态分页
二.mybatis中的动态SQL
在BookMaaper.xml中写sql
BookMapper
BookBiz接口类 BookBizImpl实现接口类
demo测试类
编辑 测试结果
三.mybatis中的模糊查询
mybatis中的#与$有是什么区别 在BookMapper.xml里面建立三个模糊查询
编辑 Bookmapper
BookBiz接口类
编辑
BookBizImpl实现接口类 demo测试类
测试结果
四.mybatis中结果映射
面试题使用mybatis的各种场景返回的结果是多样的resultType/resultMap有什么区别
实例演示 一.什么是Mybatis动态分页 MyBatis是Java中一种持久层框架它提供了许多数据库操作的便利性。在使用MyBatis进行数据查询时动态分页是一种常见的需求。 动态分页是指根据用户的请求动态生成数据库查询语句以满足不同的分页需求。具体来说动态分页通过在查询语句中添加limit和offset来实现。limit表示每页查询的记录数offset表示查询结果的偏移量。 在MyBatis中可以使用动态SQL语句来实现动态分页。动态SQL语句是一种可以根据条件决定是否包含某一段SQL语句的技术。MyBatis提供了一些标签和函数来支持动态SQL语句的编写比如if、choose、when、otherwise等。 使用MyBatis实现动态分页的步骤如下 在SQL映射文件中定义查询语句根据需要使用动态SQL语句。在查询语句中使用limit和offset来实现分页。在Java代码中调用MyBatis的分页方法传入分页参数。MyBatis会根据传入的分页参数动态生成查询语句返回分页结果。 总结来说MyBatis的动态分页可以根据用户的需求动态生成查询语句实现灵活的数据分页操作。 二.mybatis中的动态SQL MyBatis的动态SQL在实际开发中具有一些优势和一些潜在的弊端。下面是它们的一些特点 优势 灵活性高动态SQL允许根据不同的条件动态生成SQL语句使得查询更加灵活可以根据实际需求调整查询逻辑。可读性好使用动态SQL可以根据条件自动拼接SQL语句并且不会引入过多的冗余代码提高了SQL语句的可读性。性能优化动态SQL可以根据实际情况动态生成查询语句避免不必要的查询提高查询性能。 弊端 学习成本较高动态SQL需要了解和掌握MyBatis的动态SQL标签和语法相对于普通的静态SQL语句学习成本较高。可维护性差对于复杂的动态SQL语句难以维护和调试因为SQL语句的生成逻辑可能会有较多的条件判断和嵌套。可能存在安全隐患动态SQL中直接拼接参数可能存在SQL注入的风险。因此应该始终使用参数绑定方式而不是直接在SQL语句中拼接参数。 需要注意的是虽然动态SQL在某些情况下能提高查询性能但当动态SQL变得过于复杂时可能会导致查询的性能下降。因此在实际开发中应根据实际情况综合考虑权衡优势和弊端选择最适合的方案。 在BookMaaper.xml中写sql BookMapper
package com.zking.mapper;import com.zking.model.Book;
import org.apache.ibatis.annotations.Param;import java.util.List;public interface BookMapper {int deleteByPrimaryKey(Integer bid);int insert(Book record);int insertSelective(Book record);Book selectByPrimaryKey(Integer bid);int updateByPrimaryKeySelective(Book record);int updateByPrimaryKey(Book record);ListBook selectByBids(Param(bids) List bids);
}
BookBiz接口类
package com.zking.biz;import com.zking.model.Book;
import org.apache.ibatis.annotations.Param;import java.util.List;public interface BookBiz {int deleteByPrimaryKey(Integer bid);int insert(Book record);int insertSelective(Book record);Book selectByPrimaryKey(Integer bid);int updateByPrimaryKeySelective(Book record);int updateByPrimaryKey(Book record);ListBook selectByBids(List bids);
} BookBizImpl实现接口类
package com.zking.biz.impl;import com.zking.biz.BookBiz;
import com.zking.mapper.BookMapper;
import com.zking.model.Book;import java.util.List;/*** author bing人* site* company xy集团* create 2023-08-21 10:16*/
public class BookBizimpl implements BookBiz {private BookMapper bookMapper;public BookMapper getBookMapper() {return bookMapper;}public void setBookMapper(BookMapper bookMapper) {this.bookMapper bookMapper;}Overridepublic int deleteByPrimaryKey(Integer bid) {return bookMapper.deleteByPrimaryKey(bid);}Overridepublic int insert(Book record) {return bookMapper.insert(record);}Overridepublic int insertSelective(Book record) {return bookMapper.insertSelective(record);}Overridepublic Book selectByPrimaryKey(Integer bid) {return bookMapper.selectByPrimaryKey(bid);}Overridepublic int updateByPrimaryKeySelective(Book record) {return bookMapper.updateByPrimaryKeySelective(record);}Overridepublic int updateByPrimaryKey(Book record) {return bookMapper.updateByPrimaryKeySelective(record);}Overridepublic ListBook selectByBids(List bids) {return bookMapper.selectByBids(bids);}
}demo测试类 测试结果 三.mybatis中的模糊查询
这是一个面试题
mybatis中的#与$有是什么区别 resulrType:对应的返回类型 resultMap:对应的是返回映射关系值得是实体类与数据表字段的关系 通常而言单表查询以及返回单例返回多表查询结果使用resulrType 如果查询的结果需要有关联属性的体现那么用resultMap 1.$是占位符传参#是预处理SQL 2.外在形式$传参不带引号#传参自带引号 3.$传参存在sql注入#不存在 4.$可以用来做动态列完成动态sql开发 预处理SQL $只是传参是占位符的形式 在BookMapper.xml里面建立三个模糊查询 Bookmapper BookBiz接口类 BookBizImpl实现接口类 package com.zking.biz.impl;import com.zking.biz.BookBiz;
import com.zking.mapper.BookMapper;
import com.zking.model.Book;import java.util.List;/*** author bing人* site* company xy集团* create 2023-08-21 10:16*/
public class BookBizimpl implements BookBiz {private BookMapper bookMapper;public BookMapper getBookMapper() {return bookMapper;}public void setBookMapper(BookMapper bookMapper) {this.bookMapper bookMapper;}Overridepublic int deleteByPrimaryKey(Integer bid) {return bookMapper.deleteByPrimaryKey(bid);}Overridepublic int insert(Book record) {return bookMapper.insert(record);}Overridepublic int insertSelective(Book record) {return bookMapper.insertSelective(record);}Overridepublic Book selectByPrimaryKey(Integer bid) {return bookMapper.selectByPrimaryKey(bid);}Overridepublic int updateByPrimaryKeySelective(Book record) {return bookMapper.updateByPrimaryKeySelective(record);}Overridepublic int updateByPrimaryKey(Book record) {return bookMapper.updateByPrimaryKeySelective(record);}Overridepublic ListBook selectByBids(List bids) {return bookMapper.selectByBids(bids);}Overridepublic ListBook like1(String bname) {return bookMapper.like1(bname);}Overridepublic ListBook like2(String bname) {return bookMapper.like2(bname);}Overridepublic ListBook like3(String bname) {return bookMapper.like3(bname);}
}demo测试类
package com.zking.demo;import com.zking.biz.BookBiz;
import com.zking.biz.impl.BookBizimpl;
import com.zking.mapper.BookMapper;
import com.zking.model.Book;
import com.zking.utils.SessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;import java.util.Arrays;
import java.util.List;/*** author bing人* site* company xy集团* create 2023-08-21 10:28*/
public class Demo1 {private BookBiz bookBiz;private SqlSession sqlSession;Beforepublic void a(){System.out.println(执行测试方法之前会执行的初始化代码块方法);this.sqlSession SessionUtil.openSession();BookBizimpl book new BookBizimpl();BookMapper mapper this.sqlSession.getMapper(BookMapper.class);book.setBookMapper(mapper);this.bookBiz book;}Afterpublic void b(){System.out.println(执行测试方法之后的后执行的方法);//提交事务this.sqlSession.commit();}Testpublic void text1(){System.out.println(测试查询方法方法..);Book book bookBiz.selectByPrimaryKey(33);System.out.println(book);}Testpublic void text2(){System.out.println(删除的方法);int insert bookBiz.deleteByPrimaryKey(1);}Testpublic void testById(){ListInteger bids Arrays.asList(new Integer[]{ 45, 46, 47,48,49});//jdk1.8的新特性bookBiz.selectByBids(bids).forEach(System.out::println);//上面一行代码抵三行代码
// for (Book selectByBid : bookBiz.selectByBids(bids)){
// System.out.println(selectByBid);
// }}Testpublic void testlike1(){bookBiz.like1(%圣墟%).forEach(System.out::println);}Testpublic void testlike2(){bookBiz.like2(%圣墟%).forEach(System.out::println);}
}测试结果 四.mybatis中结果映射
面试题使用mybatis的各种场景返回的结果是多样的resultType/resultMap有什么区别
1.返回单表的对应的实体类仅有一个查询结果可以使用resultType/resultMap
实例演示
使用resultType 测试结果 使用resultMap 输出结果 2.返回单表的对应的实体类有多个查询结果可以使用resultType/resultMap 测试结果:
resultType: resultMap: 3.返回多表对应的结果仅有一个查询结果通常用resultType也可以用resultMap 测试结果 4.返回多表对应的结果有多个查询结果通常用resultType也可以用resultMap 5.返回单个列段仅有一个查询结果就用resultType 测试结果 6.返回单个列段有多个查询结果就用resultType 测试结果