步骤
在此之前应该编写好可能用到的类
编写mapper(二选一)
@mapper会将以下注入Spring容器中
- 即持久层接口,用于持久地绑定方法和sql语句
- 映射关系,用于映射方法和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);
}
编写单元测试
- @Autowired注入需要的变量
- 编写测试方法
@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")
(自动生成开启,将赋值给谁)
命名规则不同时
例如实体类属性名常用驼峰命名(首字母不大写),表常用下划线小写命名
如createTime
和create_time
三种方案
- 手动映射
@Results({@Result(column = "dept_id", property = "deptId"), @Result(column = "create_time", property = "createTime"), @Result(column = "update_time", property = "updateTime")})
- @Select中起别名
- 开启命名匹配
mybatis.configuration.map-underscore-to-camel-case=true