2024/10/25日 日志 --》关于使用Mybatis进行增删改查 ---1 查询
查询分为了多个模块,以下为笔记即示例内容的展示。
查询所有:
点击查看代码
-- 查询所有:
-- @Test
-- public void testselectAll() throws Exception {
-- //1.获取SqlSessionFactory
-- //1.加载mybatis的核心配置文件,获取SqlSessionFactory
-- String resource = "mybatis-config.xml";
-- InputStream inputStream = Resources.getResourceAsStream(resource);
-- SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
--
-- //2.获取SqlSessionFactory对象
-- SqlSession sqlSession = sqlSessionFactory.openSession();
--
-- //3.获取Mapper接口的代理对象
-- BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
--
-- //4.执行方法
-- List<Brand> brands=brandMapper.selectAll();
-- System.out.println(brands);
--
-- //5.释放资源
-- sqlSession.close();
--
-- }
--
-- <!--statement -->
-- <select id="selectAll" resultType="pojo.Brand">
-- select *
-- from tb_brand;
-- </select>
--
-- *ResultMap的使用:
--
-- <mapper namespace="mapper.BrandMapper">
-- <!--
-- 数据库表的字段名称和实体类的属性名称不一样,则不能自动封装数据。
-- *起别名:对不一样的列名起别名,让别名和实体类的属性名一样
-- *缺点:每次查询都要定义一次别名
-- *sql片段
-- *缺点:不灵活
-- *resultMap:
-- 1.定义resultMap标签
-- 2. 使用resultMap替换resultType属性
--
--
-- -->
-- <!-- <sql id="brand_column">-->
-- <!-- id, brand_name as brandName, company_name as companyName, ordered, description, status-->
-- <!-- </sql>-->
-- <!-- <select id="selectAll" resultType="pojo.Brand">-->
-- <!-- select <include refid="brand_column"/>-->
-- <!-- from tb_brand;-->
-- <!-- </select>-->
--
-- <resultMap id="brandResultMap" type="pojo.Brand">
-- <!--
-- id:完成主键字段的映射
-- column
-- property
-- result:完成一般字段的映射
-- -->
-- <result column="brand_name" property="brandName"/>
-- <result column="company_name" property="companyName"/>
-- </resultMap>
--
-- <!-- <select id="selectAll" resultMap="brandResultMap">-->
-- <!-- select *-->
-- <!-- from tb_brand;-->
-- <!-- </select>-->
--
--
-- <!--statement -->
-- <select id="selectAll" resultType="pojo.Brand">
-- select *
-- from tb_brand;
-- </select>
--
-- <!-- <select id="selectAll" resultType="pojo.Brand">-->
-- <!-- select id, brand_name as brandName, company_name as companyName, ordered, description, status-->
-- <!-- from tb_brand;-->
-- <!-- </select>-->
--
-- </mapper>
--
查看详情:
点击查看代码
-- 查看详情:
-- @Test
-- public void testselectById() throws Exception {
-- //接受参数
-- int id =1;
--
-- //1.获取SqlSessionFactory
-- //1.加载mybatis的核心配置文件,获取SqlSessionFactory
-- String resource = "mybatis-config.xml";
-- InputStream inputStream = Resources.getResourceAsStream(resource);
-- SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
--
-- //2.获取SqlSessionFactory对象
-- 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.使用时机:
-- *参数传递,都使用#{}
-- *如果要对表名、列名进行动态设置,只能使用S{}进行sql拼接。
-- 2.parameterType:
-- *用于设置参数类型,该参数可以省略
-- 3.SQL语句中特殊字符处理:
-- *转义字符
-- *<![CDATA[内容 ]]> :CD提示
-- 例:
--
-- <!--
-- *参数占位符:
-- 1.#{}:会将其替换为 ? ,为了防止SQL注入
-- 2.${}:拼sql ,会存在SQL注入问题
-- 3.使用时机
-- *参数传递的时候:#{}
-- *表名或者列名不固定可以用:${} ,存在SQL注入
-- *参数类型:paremeterType :可以省略
-- *特殊字符处理:
-- 1.转义字符: 如<对应 <
-- 2.CDATA区:如<![CDATA[
-- <
-- ]]>
-- -->
-- <select id="selectById" resultMap="brandResultMap">
-- select * from
-- tb_brand where id = #{id};
-- </select>
条件查询SQL与动态条件查询:
条件查询:
点击查看代码
-- 条件查询SQL与动态条件查询
--
-- SQL语句设置有多种参数形势:
-- ·1 散装参数:需要使用@Param("SQL参数占位符名称")
-- ·2 实体类封装参数:只需要保证SQL中的参数名和实体类属性名对应上
-- ·3 map集合:只需要保证SQL中的参数名和map集合的键的名称对应上
-- 例:
-- <select id="selectByCondition" resultMap="brandResultMap">
-- select * from
-- tb_brand
-- where status = #{status}
-- and company_name like #{companyName}
-- and brand_name like #{brandName}
-- </select>
--
-- /*
-- 条件查询:
-- · 参数接收:
-- 1.散装参数:如果方法中有多个参数,需要使用@Param("SQL参数占位符名称")
-- 2.对象参数:对象的属性名称和对应的参数占位符名称一致
-- 3.map集合参数:map集合的键的名称和对应的参数占位符名称一致
-- */
-- public void testselectByCondition() throws Exception {
-- //接受参数
-- int status =1;
-- String companyName ="华为";
-- String brandName ="华为";
-- //处理参数
-- companyName = "%"+companyName+"%";
-- brandName = "%"+brandName+"%";
--
-- //封装参数
-- // Brand brand = new Brand();
-- // brand.setStatus(status);
-- // brand.setCompanyName(companyName);
-- // brand.setBrandName(brandName);
--
-- Map map = new HashMap();
-- // map.put("status",status);
-- map.put("companyName",companyName);
-- // map.put("brandName",brandName);
--
-- //1.获取SqlSessionFactory
-- //1.加载mybatis的核心配置文件,获取SqlSessionFactory
-- String resource = "mybatis-config.xml";
-- InputStream inputStream = Resources.getResourceAsStream(resource);
-- SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
--
-- //2.获取SqlSessionFactory对象
-- SqlSession sqlSession = sqlSessionFactory.openSession();
--
-- //3.获取Mapper接口的代理对象
-- BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
-- //4.执行方法
-- // ArrayList<Brand> brands = brandMapper.selectByCondition(status,companyName,brandName);
-- // ArrayList<Brand> brands = brandMapper.selectByCondition(brand);
-- ArrayList<Brand> brands = brandMapper.selectByCondition(map);
-- System.out.println(brands);
--
-- //5.释放资源
-- sqlSession.close();
--
-- }
--
-- 模糊查询
-- <!-- <select id="selectByCondition" resultMap="brandResultMap">-->
-- <!-- select * from-->
-- <!-- tb_brand-->
-- <!-- where-->
-- <!-- status = #{status}-->
-- <!-- and company_name like #{companyName}-->
-- <!-- and brand_name like #{brandName}-->
-- <!-- </select>-->
-- 以下为优化及条件判断方法
-- <!--
-- * if: <if> </if> 条件判断
-- *test: 逻辑表达式
-- * 问题解决:
-- *恒等式 1 = 1
-- <select id="selectByCondition" resultMap="brandResultMap">
-- select * from
-- tb_brand
-- where 1 = 1
-- <if test="status != null">
-- and status = #{status}
-- </if>
-- <if test="companyName != null and companyName !='' ">
-- and company_name like #{companyName}
-- </if>
-- <if test="brandName !=null and brandName !='' ">
-- and brand_name like #{brandName}
-- </if>
-- </select>
-- *<where> 替换 where 关键字
-- <select id="selectByCondition" resultMap="brandResultMap">
-- select * from
-- tb_brand
-- <where>
-- <if test="status != null">
-- status = #{status}
-- </if>
-- <if test="companyName != null and companyName !='' ">
-- and company_name like #{companyName}
-- </if>
-- <if test="brandName !=null and brandName !='' ">
-- and brand_name like #{brandName}
-- </if>
-- </where>
-- </select>
-- 条件查询最终如下:
-- -->
-- <select id="selectByCondition" resultMap="brandResultMap">
-- select * from
-- tb_brand
-- <where>
-- <if test="status != null">
-- status = #{status}
-- </if>
-- <if test="companyName != null and companyName !='' ">
-- and company_name like #{companyName}
-- </if>
-- <if test="brandName !=null and brandName !='' ">
-- and brand_name like #{brandName}
-- </if>
-- </where>
-- </select>
--
动态SQL
点击查看代码
-- -- 动态SQL
-- if: 用于判断参数是否有值,使用test属性进行条件判断
-- *存在问题:第一个条件不需要逻辑运算符
-- *解决方案:
-- · 使用恒等式让所有条件格式一样
-- · <where>标签替换where关键字
-- 例:
--
-- @Test
-- public void testselectByConditionSingle() throws Exception {
-- //接受参数
-- int status =1;
-- String companyName ="华为";
-- String brandName ="华为";
-- //处理参数
-- companyName = "%"+companyName+"%";
-- brandName = "%"+brandName+"%";
--
-- //封装参数
-- Brand brand = new Brand();
-- // brand.setStatus(status);
-- // brand.setCompanyName(companyName);
-- // brand.setBrandName(brandName);
--
-- //1.获取SqlSessionFactory
-- //1.加载mybatis的核心配置文件,获取SqlSessionFactory
-- String resource = "mybatis-config.xml";
-- InputStream inputStream = Resources.getResourceAsStream(resource);
-- SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
--
-- //2.获取SqlSessionFactory对象
-- SqlSession sqlSession = sqlSessionFactory.openSession();
--
-- //3.获取Mapper接口的代理对象
-- BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
-- //4.执行方法
-- ArrayList<Brand> brands = brandMapper.selectByConditionSingle(brand);
-- System.out.println(brands);
--
-- //5.释放资源
-- sqlSession.close();
--
-- }
-- <!-- <select id="selectByConditionSingle" resultMap = "brandResultMap">-->
-- <!-- select-->
-- <!-- *from tb_brand-->
-- <!-- where-->
-- <!-- <choose> <!–相当于 switch–>-->
-- <!-- <when test="status!=null"> <!– 相当于case–>-->
-- <!-- status = #{status}-->
-- <!-- </when>-->
-- <!-- <when test="companyName != null and companyName !=''"> <!– 相当于case–>-->
-- <!-- company_name like #{companyName}-->
-- <!-- </when>-->
-- <!-- <when test="brandName!=null and companyName != ''"> <!– 相当于case–>-->
-- <!-- brand_name like #{brandName}-->
-- <!-- </when>-->
-- <!-- <otherwise><!– 相当于default–>-->
-- <!-- 1 = 1-->
-- <!-- </otherwise>-->
-- <!-- </choose>-->
-- <!-- </select>-->
-- <select id="selectByConditionSingle" resultMap="brandResultMap">
-- select
-- *from tb_brand
-- <where>
-- <choose> <!--相当于 switch-->
-- <when test="status!=null"> <!-- 相当于case-->
-- status = #{status}
-- </when>
-- <when test="companyName != null and companyName !=''"> <!-- 相当于case-->
-- company_name like #{companyName}
-- </when>
-- <when test="brandName!=null and companyName != ''"> <!-- 相当于case-->
-- brand_name like #{brandName}
-- </when>
-- </choose>
-- </where>
-- </select>
--
--
-- <!--
-- 动态条件查询
-- * if: <if> </if> 条件判断
-- *test: 逻辑表达式
-- * 问题解决:
-- *恒等式 1 = 1
-- <select id="selectByCondition" resultMap="brandResultMap">
-- select * from
-- tb_brand
-- where 1 = 1
-- <if test="status != null">
-- and status = #{status}
-- </if>
-- <if test="companyName != null and companyName !='' ">
-- and company_name like #{companyName}
-- </if>
-- <if test="brandName !=null and brandName !='' ">
-- and brand_name like #{brandName}
-- </if>
-- </select>
-- *<where> 替换 where 关键字
-- <select id="selectByCondition" resultMap="brandResultMap">
-- select * from
-- tb_brand
-- <where>
-- <if test="status != null">
-- status = #{status}
-- </if>
-- <if test="companyName != null and companyName !='' ">
-- and company_name like #{companyName}
-- </if>
-- <if test="brandName !=null and brandName !='' ">
-- and brand_name like #{brandName}
-- </if>
-- </where>
-- </select>
-- -->
单条件的动态查询--从多个条件中选择一个
点击查看代码
-- 单条件的动态条件查询
-- ·从多个条件中选择一个
-- --》choose(when,otherwise):选择,类似于java中的Switch语句
-- 例:
-- -->
-- <select id="selectByCondition" resultMap="brandResultMap">
-- select * from
-- tb_brand
-- <where>
-- <if test="status != null">
-- status = #{status}
-- </if>
-- <if test="companyName != null and companyName !='' ">
-- and company_name like #{companyName}
-- </if>
-- <if test="brandName !=null and brandName !='' ">
-- and brand_name like #{brandName}
-- </if>
-- </where>
-- </select>
-- <!-- <select id="selectByConditionSingle" resultMap = "brandResultMap">-->
-- <!-- select-->
-- <!-- *from tb_brand-->
-- <!-- where-->
-- <!-- <choose> <!–相当于 switch–>-->
-- <!-- <when test="status!=null"> <!– 相当于case–>-->
-- <!-- status = #{status}-->
-- <!-- </when>-->
-- <!-- <when test="companyName != null and companyName !=''"> <!– 相当于case–>-->
-- <!-- company_name like #{companyName}-->
-- <!-- </when>-->
-- <!-- <when test="brandName!=null and companyName != ''"> <!– 相当于case–>-->
-- <!-- brand_name like #{brandName}-->
-- <!-- </when>-->
-- <!-- <otherwise><!– 相当于default–>-->
-- <!-- 1 = 1-->
-- <!-- </otherwise>-->
-- <!-- </choose>-->
-- <!-- </select>-->
-- <select id="selectByConditionSingle" resultMap = "brandResultMap">
-- select
-- *from tb_brand
-- <where>
-- <choose> <!--相当于 switch-->
-- <when test="status!=null"> <!-- 相当于case-->
-- status = #{status}
-- </when>
-- <when test="companyName != null and companyName !=''"> <!-- 相当于case-->
-- company_name like #{companyName}
-- </when>
-- <when test="brandName!=null and companyName != ''"> <!-- 相当于case-->
-- brand_name like #{brandName}
-- </when>
-- </choose>
-- </where>
-- </select>SS
--