MyBatis
官网:https://mybatis.org/mybatis-3/zh/index.html
快速入门
- 创建user表,添加数据
- 创建模块,导入坐标
- 编写Mybatis核心配置文件-->替换链接信息,解决硬编码问题
12345678910111213141516171819202122
<?xml version=
"1.0"
encoding=
"UTF-8"
?>
<!DOCTYPE configuration
PUBLIC
"-//mybatis.org//DTD Config 3.0//EN"
"http://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.jdbc.Driver"
/>
<property name=
"url"
value=
"jdbc:mysql:///mybatis?useSSL=false"
/>
<property name=
"username"
value=
"root"
/>
<property name=
"password"
value=
"root"
/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 加载sql的映射文件-->
<mapper resource=
"UserMapper.xml"
/>
</mappers>
</configuration>
- 编写SQL映射文件-->统一管理sql语句,解决硬编码问题
12345678910
<?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"
>
<!--namespace名称空间-->
<mapper namespace=
"test"
>
<select id=
"selectAll"
resultType=
"com.itheima.pojo.User"
>
select * from tb_user;
</select>
</mapper>
- 编码
- 定义POJO类
- 加载核心文件,获取SqlSessionFactory
- 获取SqlSession对象,执行SQL语句
- 释放资源
1234567891011121314151617181920212223242526272829303132
package
com.itheima;
import
com.itheima.pojo.User;
import
org.apache.ibatis.io.Resources;
import
org.apache.ibatis.session.SqlSession;
import
org.apache.ibatis.session.SqlSessionFactory;
import
org.apache.ibatis.session.SqlSessionFactoryBuilder;
import
java.io.IOException;
import
java.io.InputStream;
import
java.util.List;
/**
* mybatis快速入门
*/
public
class
MybatisDemo {
public
static
void
main(String[] args)
throws
IOException {
//1.加载mybatis核心配置文件,获取sqlSessionFactory
String resource =
"mybatis-config.xml"
;
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory =
new
SqlSessionFactoryBuilder().build(inputStream);
//2.获取sqlSession对象,用它执行sql
SqlSession sqlSession = sqlSessionFactory.openSession();
//3.执行sql
List<User> users = sqlSession.selectList(
"test.selectAll"
);
System.out.println(users);
sqlSession.close();
}
}
解决sql映射文件警告信息
Mapper代理开发
目的:解决原生方式中硬编码
简化后期执行SQL
1 2 | //3.执行sql List<User> users = sqlSession.selectList( "test.selectAll" ); |
1 2 3 4 | //3.获取接口代理对象 UserMapper userMapper = sqlSession.getMapper(UserMapper. class ); //4.执行方法,执行sql userMapper.selectAll(); |
步骤:
- 定义SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下(将SQL映射文件放在resource下与Mapper接口相同的包中,compiler后生成的classes中即在同一目录)
- 设置SQL映射文件的namespace属性为Mapper接口全限定名
123456
<!--namespace名称空间-->
<mapper namespace=
"com.itheima.mapper.UserMapper"
>
<select id=
"selectAll"
resultType=
"com.itheima.pojo.User"
>
select * from tb_user;
</select>
</mapper>
- 在Mapper接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致
** 不要忘记改config中映射文件的路径 **
- 编码
- 通过SqlSession的getMapper方法获取Mapper接口的代理对象
- 调用对应方法完成sql的执行
1234
//3.获取接口代理对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.
class
);
//4.执行方法,执行sql
List<User> users = userMapper.selectAll();
细节:如果Mapper接口名称和SQL映射文件名称相同,并在同一目录下,则可以使用包扫描的方式简化SQL映射文件的而加载
1 2 3 4 5 6 | <mappers> <!-- 加载sql的映射文件--> <!-- <mapper resource= "com/itheima/mapper/UserMapper.xml" />--> <!-- Mapper代理方式--> < package name= "com.itheima.mapper" /> </mappers> |
MyBatis核心配置文件详解
1 2 3 4 5 6 7 8 9 10 | <mapper namespace= "com.itheima.mapper.BrandMapper" > <!-- SQL片段 --> <sql id= "brand_column" > id,brand_name brandName,company_name companyName,ordered,description,status </sql> <select id= "selectAll" resultType= "Brand" > select <include refid= "brand_column" /> from tb_brand; </select> </mapper> |
<!--
resultMap:
1.定义resultMap标签
2.<select>标签中使用resultMap属性替换resultType属性
id:唯一标识
type:映射的类型,支持别名
-->
<resultMap id="brandResultMap" type="Brand">
<!--
id:完成主键字段映射
column:表的列名
property:实体类的属性名
result:完成一般字段的映射
column:表的列名
property:实体类的属性名
-->
<result column="brand_name" property="brandName"></result>
<result column="company_name" property="companyName"></result>
</resultMap>
<select id="selectAll" resultMap="brandResultMap">
select *
from tb_brand;
</select>
</mapper>
配置文件完成增删改查
<resultMap id="brandResultMap" type="Brand">
<result column="brand_name" property="brandName"></result>
<result column="company_name" property="companyName"></result>
</resultMap>
<select id="selectAll" resultMap="brandResultMap">
select *
from tb_brand;
</select>
<select id="selectById" parameterType="int" resultMap="brandResultMap">
-- select * from ${tb_brand} where id = #{id};
-- select * from tb_brand where id 小于号 #{id};
-- select * from tb_brand where id < #{id};
select *
from tb_brand
where id
<![CDATA[
<=
]]>
#{id}
</select>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本