Java Study!! - MyBatis
type: channel
link: https://www.kaijavademo.top/category/MyBatis/
description: Java中最流行的持久层框架
items: MyBatis笔记：各种查询方式|特殊SQL|自定义映射|多表联查|动态SQL|逆向工程
items: MyBatis笔记：搭建框架|核心文件详解|模板|封装SqlSession|获取参数值

MyBatis笔记：各种查询方式|特殊SQL|自定义映射|多表联查|动态SQL|逆向工程
type: item
date: 2023-08-22T19:20:00+00:00
description: MyBatis笔记：各种查询功能,特殊SQL语句，动态SQL语句，MyBatis中的一二级缓存，清新版和奢华版的逆向工程的使用，包括我自己的对于多表联查的视频解释，分页查询的插件，还有我对于报错的问题解决思路。篇幅较长，可以选择所需查看。各种查询方式查询单条信息/多条信息SelectMapper接口public interface SelectMapper { /* 根据id来查询用户信息/返回值可以使用User或者是List<User> */ public abstract List<User> getUserById(@Param("id") Integer id); /* 查询所有的用户信息 */ public abstract List<User> getAllUser(); }SelectMapper.xml select * from t_user where id = #{id} <!--List<User> getAllUser();--> select * from t_user 测试类public class SelectMapperTest { /** * MyBatis的各种查询功能 * 1.若查询出的数据只有一条， * a>可以通过实体类对象 * b>可以通过List集合接收 * c>可以通过Map集合接收 * * 2.若查询出的数据有多条， * a>可以通过List集合接收 * b>可以通过Map集合接收 *注意：一定不能通过实体类对象来接收，此时会抛异常TooManyResultsException * */ @Test public void testGetAllUser(){ SqlSession sqlSession = SqlSessionUtils.getSqlSession(); SelectMapper mapper = sqlSession.getMapper(SelectMapper.class); //查询所有的用户信息 System.out.println("user = " + mapper.getAllUser()); } @Test public void testGetUserById(){ SqlSession sqlSession = SqlSessionUtils.getSqlSession(); SelectMapper mapper = sqlSession.getMapper(SelectMapper.class); //查询用户id为3的用户信息 System.out.println("user = " + mapper.getUserById(3)); } }使用聚合函数查询单行信息SelectMapper接口 /* 查询用户信息的总记录数 */ public abstract Integer getCount();SelectMapper.xml select count(*) from t_user 查询用户信息为Map集合我们可以把查询出来的结果转换为一个map集合，以字段为键，字段对应的值为值。查询单条数据为Map集合SelectMapper接口 /* 根据id查询用户信息为一个map集合 */ public abstract Map<String, Object> getUserByIdToMap(@Param("id") Integer id);SelectMapper.xml <!--Map<String, Object> getUserByIdToMap(@Param("id") Integer id);--> select * from t_user where id = #{id} 查询多条数据为Map集合把map集合放入List集合中需要调整返回值，把多条数据的返回值放到一个List集合中，每一条转换的map放到了List集合中在接口方法上添加@MapKey注解 [label color="red"]@MapKey设置当前map集合的键，会把我们查询出来数据的某一个字段作为键(唯一)，查询出来数据的map集合作为值[/label]SelectMapper接口 /* 查询所有用户信息为map集合 */ //public abstract List<Map<String, Object>> getAllUserToMap(); @MapKey("id") public abstract Map<String, Object> getAllUserToMap();SelectMapper.xml <!--Map<String, Object> getAllUserToMap();--> select * from t_user 测试类最…

MyBatis笔记：搭建框架|核心文件详解|模板|封装SqlSession|获取参数值
type: item
date: 2023-08-20T15:51:00+00:00
description: 作为java最流行的持久层技术，即学习完JDBC之后的另一门技术，以轻量级和性能出色的半自动成为了核心三大技术SSM中的之一。本篇文章是基于Mybatis的基础学习，包括框架的搭建，优化，还有工具类的封装和模板的添加。搭建MyBatis在pom依赖文件中添加打包方式为jar包 <packaging>jar</packaging>在依赖文件中导入依赖因为我的SQL版本是8+版本，所以导入对应版本的依赖,并添加log4j的日志文件(下面的文章中有提及，引入依赖还需要导入配置文件xml在resources下) <dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.7</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.30</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> </dependencies>核心配置文件创建核心配置文件对于一个框架，本质上来说就是 [label color="blue"]jar包 + 配置文件[/label] 文件没有默认的名字，但是建议是mybatis-config.xml,在整合SSM后，核心文件可以写可以不写，之后会交给Spring管理。 [label color="orange"]mybatis-config.xml[/label] ，核心配置文件应该创建在resources下<?xml version="1.0" encoding="UTF-8" ?> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/> <property name="username" value="root"/> <property name="password" value="abc123"/> </dataSource> </environment> </environments> <mappers> <mapper resource="org/mybatis/example/BlogMapper.xml"/> </mappers> </configuration>创建mapper接口(实现添加功能)Mybatis中的mapper接口相当于之前的DAO，以前的DAO有接口和实现类，而mapper只需要一个接口就可以，所谓面向接口编程。当我们通过mybatis中的方式去mapper创建接口对象，调用接口中的方法，就可以对应某个SQL语句。在接口中只需要添加操作数据库的方法即可。我们可以创建mapper接口，同DAO的命名，参考数据库表和实体类命名。映射文件尽量和我们的mapper接口名保持一致，只不过是一个xml文件。一个DAO类对应一个数据库表，一个mapper对应一个数据库表，一个mapper的映射文件对应一个mapper。 [label color="red"]MyBatis面向接口编程的两个一致：通过Mapper接口对应映射文件[/label]映射文件的namespace要和mapper接口的全类名保持一致映射文件中SQL语句的id要和mapper接口中的方法名一致UserMapper.xml<?xml version="1.0" encoding="UTF-8" ?> <mapper namespace="com.atguigu.m…