MyBatis查看详情
-
编写接口方法:Mapper接口。参数:id,结果Brand。
在BrandMapper类下面添加方法
public interface BrandMapper { /** * 查询所有 */ List<Brand> selectAll(); /** * 查看详情:根据Id查询 */ Brand selectById(int id); }
-
编写SQL语句:SQL映射文件
在BrandMapper.xml下编写文件
<?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="com.uestc.mapper.BrandMapper"> <!-- 数据库表的字段名称,和 实体类的属性名称 不一样,则不能自动封装数据 * 起别名: 对不一样的列名起别名,让别名和实体类的属性名一样 *缺点:每次查询都要定义一次别名 *sql片段 *缺点:不灵活 * 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 column="company_name" property="companyName" /> </resultMap> <select id="selectAll" resultMap="brandResultMap"> select * from tb_brand; </select> <!-- sql片段 --> <!-- <sql id="brand_column">--> <!-- id,brand_name as brandName,company_name as companyName,ordered,description,status--> <!-- </sql>--> <!-- <select id="selectAll" resultType="brand">--> <!-- select--> <!-- <include refid="brand_column" />--> <!-- from tb_brand;--> <!-- </select>--> <!-- <select id="selectAll" resultType="brand">--> <!-- select *--> <!-- from tb_brand;--> <!-- </select>--> <!-- *参数占位符: 1.#{}:会将其替换为 ? 为了放在SQL注入 2.${}:拼SQL,会存在SQL注入问题 3.使用时机: * 参数传递的时候:#{} * 表名或者列名不固定的情况下:${} *参数类型:parameterType:可以省略 *特殊字符处理: 1.转义字符: < ==> < 2.CDATA区: <![CDATA[ < ]]> --> <!-- <select id="selectById" resultMap="brandResultMap">--> <!-- select *--> <!-- from tb_brand where id = #{id};--> <!-- </select>--> <select id="selectById" resultMap="brandResultMap"> select * from tb_brand where id <![CDATA[ < ]]> #{id}; </select> </mapper>
-
执行方法,测试
编写测试方法MyBatisTesl类
@Test public void testSelectById() throws IOException { //接收参数 int id = 1; //1.获取SqlSessionFactory String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //2.获取SqlSession对象 SqlSession sqlSession = sqlSessionFactory.openSession(); //3.获取Mapper接口的代理对象 BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class); //4.执行方法 Brand brand = brandMapper.selectById(id); System.out.println(brand); //5.释放资源 sqlSession.close(); }
总结:
1.参数占位符:
(1)#{}:执行SQL时,会将#{}占位符替换为?将来自动设置参数
(2)${}:拼SQL。会存在SQL注入问题。
(3)使用时机:
*参数传递:都使用#{}
*如果要对应表名,列名进行动态设置,只能使用${}进行sql拼接。
2.parameterType:
*用于设置参数类型,该参数可以忽略
3.SQL语句中特殊字符处理:
*转义字符
*<![CDATA[内容]]>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix