Mybatis的入门配置案例
- 引入依赖
<dependencies>
<!--数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
<!-- 德鲁伊连接池依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.22</version>
</dependency>
<!--lombok插件 作用: 用于生成get和set方法-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</dependency>
<!--引入Mybatis依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!--进行单元测试的依赖-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
- 引入Mybatis-config.xml配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<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/top_news?serverTimezone=UTC&rewriteBatchedStatements=true&characterEncoding=utf-8"/>
<!--配置数据库连接用户名-->
<property name="username" value="root"/>
<!--配置数据库密码-->
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 配置映射文件 这里的配置文件的名字要和Mapper层的名字一样。-->
<mapper resource="mappers/UserMapper.xml"></mapper>
</mappers>
</configuration>
- 配置Mapper类
import com.atguigu.entity.NewsUser;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public class UserMapper {
public NewsUser getUserById(Integer uid);
}
- 配置UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.atguigu.mapper.UserMapper">
<select id="getUserById" resultType="com.atguigu.entity.NewsUser">
SELECT * FROM news_user WHERE uid = #{id}
</select>
</mapper>
<!--
namespace 命名空间:
作用是用来将Mapper中的UserMapper类和UserMapper.xml来映射的
!!! 注意:
这里的UserMapper类的名字尽量和UserMapper.xml的文件名保持一致。
id 唯一标识:
作用是用来和mapper类中的方法名进行对应,注意保持一致。
resultType 返回值类型:
这里既可以是java中常用的数据类型如:
Integer,String,Map,List等, 也可以是 实体类的类型。
具体看业务需求。
#{ id } 参数: #{} 固定写法 id 参数 (这个参数可以随意命名)
-->
默认情况下,使用 #{} 参数语法时,MyBatis 会创建 PreparedStatement 参数占位符,
并通过占位符安全地设置参数(就像使用 ? 一样)。 也就是说 #{} 相当于我们自己写SQL
的时候使用的动态SQL语句中的 ? 一样
不过有时你就是想直接在 SQL 语句中直接插入一个不转义的字符串 这种情况下我们需要使用 ${columnName}
例如使用 ORDER BY 子句进行排序的时候。
- 之后通过测试类来进行测试
import com.atguigu.entity.NewsUser;
import com.atguigu.mapper.UserMapper;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.ibatis.io.Resources;
import java.io.InputStream;
public class MyBatisTest {
@Test
public void getUserByUidTest() {
InputStream inputStream = null;
// 参数列表中放入的是你的mybatis配置文件的地址
try {
// 加载mybatis-config 核心配置文件
inputStream = Resources.getResourceAsStream("mybatis-config.xml");
// 建立 SqlSessionFactoryBuild 工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 获取到SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
// 通过SqlSession 来映射 我们自己的Mapper类 (反射机制)
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// 调用 mapper类中的方法 获取返回结果。
NewsUser user = userMapper.getUserById(1);
// 输出结果
System.out.println(user);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
配置mybatis-config.xml中踩的坑:
在写配置项时需要讲配置项和图片中的参数的位置进行对应,否则文件会报错。