07.MyBatis配置文件深入

07.MyBatis配置文件深入

1.ResutlMap属性

作用:建立对象关系映射。

resultTyp和resultMap的区别:

  • resultMap:

    可以防止实体属性与数据库字段不一致时,重新绑定实体属性和数据库字段,从而将查询结果手动封装到实体类中。

  • ResultMap:

    如果实体属性名与表中字段名一致,将查询结果自动封装到实体类中。

(1)) 编写UserMapper接口

public interface UserMapper {
  public List<User> findAllResultMap();
}

(2)编写UserMapper.xml

// 补充:如果有查询结果有 字段与属性是对应的,可以省略手动封装 【了解】
  <resultMap id="userResultMap" type="user">
    <id column="uid" property="id"></id>
    <result column="NAME" property="username"></result>
    <result column="PASSWORD" property="username">    </result>
  </resultMap>
  <select id="findAllResultMap" resultMap="userResultMap">
   SELECT id AS uid,username AS NAME,password AS PASSWORD FROM USER
  </select>

2.多条件查询(三种)

需求:根据id和username查询user表

(1)方式一:在编写sql的xml文件中,使用 #{arg0}-#{argn} 或者 #{param1}-#{paramn} 获取参数。

image-20220221102031075

(2)方式二:在接口类中使用注解,引入@Param()注解获取参数。

image-20220221102134311

(3)使用pojo对象传递参数

image-20220221102334403

image-20220221102351416

3. 模糊查询

需求:根据username模糊查询user表

原生sql:

select * from user where username like ‘%张三%’

(1)方式1:

  • UserMapper接口
public interface UserMapper {
  public List<User> findByUsername1(String username);
}
  • UserMapper.xml
<mapper namespace="com.lagou.mapper.UserMapper">
 
  <select id="findByUsername1" parameterType="string" resultType="user">
   select * from user where username like #{username}
  </select> 
 
</mapper>
  • 测试

    @Test
    public void testFindByUsername() throws Exception {
      UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
      List<User> list = userMapper.findByUsername1("%王%");
      for (User user : list) {
        System.out.println(user);
     }
    }
    

(2)方式二

  • UserMapper接口:
public interface UserMapper {
  public List<User> findByUsername2(String username);
}
  • UserMapper.xml
<mapper namespace="com.lagou.mapper.UserMapper">
 
  <!--不推荐使用,因为会出现sql注入问题-->
  <select id="findByUsername2" parameterType="string" resultType="user">
   select * from user where username like '${value}'
  </select>  
</mapper>
  • 测试
@Test
public void testFindByUsername() throws Exception {
  UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
  List<User> list = userMapper.findByUsername2("%王%");
  for (User user : list) {
    System.out.println(user);
 }
}

3.1${}和#{}的区别

#{}:表示个占位符号

  1. 通过#{}可以实现pararedStatement向占位符设置值,自动进行java类型和jdbc类型转换,#{}可以有效防止sql注入。
  2. #{}可以接收简单类型值或pojo属性值。
  3. 如果parameterType传输单个简单类型值,#{}括号中名称随便写。

${}:表示拼接sql串

  1. 通过${}可以将parameterType传入的内容拼接在sql中且不进行jdbc的类型转换,会出现sql注入问题。
  2. ${}可以接收简单类型或pojo属性值。
  3. 如果parameterType传输单个简单类型值,${}括号中只能是value。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员阿红

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值