Mybatis关键信息笔记

文章介绍了如何在MyBatis中编写Mapper接口,包括使用@Mapper注解、选择性地创建XML配置文件来实现动态SQL,以及如何编写单元测试。同时,提到了SQL注入问题,建议使用预编译SQL防止注入,并展示了如何自动生成主键。此外,还讨论了Java对象属性与数据库列名不同的命名规则处理方法。
摘要由CSDN通过智能技术生成

步骤

在此之前应该编写好可能用到的类

编写mapper(二选一)

@mapper会将以下注入Spring容器中

  1. 即持久层接口,用于持久地绑定方法和sql语句
  2. 映射关系,用于映射方法和sql语句
@Mapper
public interface UserMapper {
    @Select("select * from cloud_order")
    public List<User> list();
}

可选择编写配置文件(二选一)

该方法可实现动态SQL

在resource下创建和该mapper同名但是不同后缀的包(.xml)
是下面这种形式

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
// namespace中值可以右键copy EmpMapper.java的
<mapper namespace="">
  <select id="指定的方法名" resultType="通过包的路径来写一个将被返回的类型">
</mapper>

也可以像下面这样采用占位符

@Mapper
public interface EmpMapper {

    @Insert("insert into emp(username, name, gender, image, job, entrydate, dept_id, create_time, update_time) values (#{username}, #{name}, #{gender}, #{image}, #{job}, #{entrydate}, #{deptId}, #{createTime}, #{updateTime})")
    public void insert(Emp emp);

}

编写单元测试

  1. @Autowired注入需要的变量
  2. 编写测试方法
@Autowired
private UserMapper userMapper;

@Test
public void testList(){
    List<User> userList = userMapper.list();
    for (User user : userList) {
        System.out.println(user);
    }
}

占位符

  • #{a var}和${a var}
    • #将生成预编译SQL,将自动设置参数值常用
    • $直接拼接,存在SQL注入问题

SQL注入问题

  • like '%${name}%'替换为like concat('%' , '关键字' , '%')

自动生成主键

如按顺序自动生成的id

在@Insert前写
@option(useGeneratedKeys = true,keyProperty = "id")
(自动生成开启,将赋值给谁)

命名规则不同时

例如实体类属性名常用驼峰命名(首字母不大写),表常用下划线小写命名
createTimecreate_time

三种方案

  1. 手动映射
    @Results({@Result(column = "dept_id", property = "deptId"),
           @Result(column = "create_time", property = "createTime"),
           @Result(column = "update_time", property = "updateTime")})
    
  2. @Select中起别名
  3. 开启命名匹配mybatis.configuration.map-underscore-to-camel-case=true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值