欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > Mybatis-Day3

Mybatis-Day3

2024/11/29 17:53:26 来源:https://blog.csdn.net/2301_78630849/article/details/143978044  浏览:    关键词:Mybatis-Day3

规则:

  1. 定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下

  2. 设置SQL映射我呢见的namespace属性为Mapper接口的全限定名

  3. 在Mapper接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致

  4. 编码:

    1. 通过SqlSession的getMapper方法获取Mapper接口的代理对象

    2. 调用对应方法完成sql的执行

细节:若Mapper接口名称和SQL映射文件名称相同,并且在同一目录下,则可以使用包扫描的方式优化SQL映射文件的加载

<mappers><package name="com.zkw.mapper">
</mappers>

sql片段

<sql id="brand_column">id,brand_name as brandName,ordered,status
</sql><select id="selectAll" resultType="brand">select <includ refid="brand_column"/> from tb_brand;
</select>

比sql片段更灵活的 resultMap

<resultMap id="brandResultMap" type="brand"><result column="brand_name" property="brandName"/>
</resultMap>
​
<select id="selectAll" resultMap="brandResultMap">select * from tb_brand;
</select>

参数占位符

1.#{}:执行SQL时,会将#{}占位符替换为?,将来自动设置参数值
2.${}:拼SQL,会存在SQL注入问题

参数接收

  1. 散装参数:如果方法中有多个参数,需要使用@Param(”SQL参数占位符名称")

    List<Brand> selectByCondition(@Param("status") int status,@Param("companyName") String companyName);
  2. 封装参数

    List<Brand> selectByCondition(Brand brand);
    ​
    //封装对象
    Brand brand = new Brand();
    brand.setStatus(status);
    brand.setCompanyName(companyName);
    brand.setBrandName(brandName);

4.Map

假设,我们的实体类,或者数据库中的表,字段或参数过多,我们应当考虑使用Map

//万能的Map
int addUser2(Map<String,Object> map);
@Testpublic void addUser2() {SqlSession sqlSession = MybatisUtils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);Map<String, Object> map = new HashMap<String, Object>();
​map.put("userid",5);map.put("password","2222333");mapper.addUser2(map);sqlSession.close();}

Map传递参数,直接在sql中取出key即可

对象传递参数,直接在sql中取对象的属性即可

只有一个基本类型参数的情况下,可以在sql中直接取到

5.Mybatis核心配置文件

注:配置各个标签的时候要遵守前后顺序

Mybatis核心配置文件的底层结构如下:

  • configuration(配置)

    • properties(属性)

    • setting(设置)

    • typeAliases(类型别名)

    • typeHandlers(类型处理器)

    • obecjFactory(对象工厂)

    • plugins(插件)

    • environments(环境配置)

      • environment(环境变量)

      • transactionManager(事务管理器)

      • dataSource(数据源)

    • databaseldProvider(数据库厂商表示)

    • mappers(映射器)

别名类型

<typeAliases><package name="com.zkw.pojo"/>
<typeAliases>

6.动态条件查询

SQL语句会随着yoghurt的输入或外部条件的变化而变化,我们称为动态SQL

<!-- 动态条件查询* if:条件判断* test:逻辑表达式* 问题: 若缺少status,会导致sql语法错误* 恒等式解决
-->
<select id="selectByCondition" resultMap="brandResultMap">select *from tb_brandwhere 1 = 1 //恒等式<if test="status != null">and status = #{status}</if><if test="companyNmae != null and companyName ! = ''">and company_name like #{companyName}</if>
</select>

单条件动态查询

<select id="selectByCondition" resultMap="brandResultMap">select *from tb_brandwhere <choose><!--相当于switch--><when test="status != null"><!--相当于case-->status = #{status}</when><when test="companyNmae != null and companyName ! = ''">company_name = #{companyName}</when>
</select>

动态修改的话用set标签

7.注解开发

使用注解的话,就不用再写相关的xml文件

@Select(select * from tb_brand where id = #{id})
public User selectById(int id);

使用注解完成简单的sql语句,复杂的语句,使用xml完成

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com