目录
一,查询 - @select
1.1 全列查询
1.2 指定列查询
1.3 赋值问题
方法一:起别名
方法二:结果映射
方法三:添加配置
二,新增 - @Insert
2.1 使用对象插入
2.2 获取主键
三,删除 - @Delete
四,修改 - @Update
补:MyBatis 的配置
一,查询 - @select
1.1 全列查询
@Mapper
public interface UserInfoMapper {@Select("select * from userInfo")public UserInfo queryAll();
}
1.2 指定列查询
@Mapper
public interface UserInfoMapper {//注意:MyBatis中方法名不允许重复!!!!//当只有一个参数时,sql参数与方法参数可以不同@Select("select * from userInfo where id = #{id}")public UserInfo queryUserInfoById(Integer id);//当需要对参数进行重命名时需要使用@Param注释//如果不使用@Param,那么sql参数与方法参数必须相同//注:如果使用阿里云创建的springboot项目,必须使用@Param注解@Select("select * from userInfo where id = #{id} and username = #{username}")public UserInfo queryUserInfo(@Param("id") Integer i, @Param("username") String name);
}
注:加了@Param注解后,sql语句中的参数名只能与@Param()的参数名匹配!!!
1.3 赋值问题
可以发现,在赋值时,deleteFlag,createTime,updateTime 并没有被赋值,这是为什么?原因分析:
- 当⾃动映射查询结果时,MyBatis 会获取结果中返回的列名并在 Java 类中查找相同名字的属性(忽略⼤⼩写)。 这意味着如果发现了 ID 列和 id 属性,MyBatis 会将列 ID 的值赋给 id 属性
- 所以没有赋值的原因就是MySQL中的字段名与Java对象中的属性名不相同
方法一:起别名
@Select("select id, username, password, age, gender, phone," +"delete_flag as deleteFlag, create_time as createTime, update_time as updateTime from userInfo " +"where id = #{id} and username = #{username}")public UserInfo queryUserInfo(@Param("id") Integer i, @Param("username") String name);
方法二:结果映射
@Select("select * from userInfo where id = #{id}")@Results(id = "resultMap",value = {@Result(column = "delete_flag", property = "deleteFlag"),@Result(column = "create_time", property = "createTime"),@Result(column = "update_time", property = "updateTime")})public UserInfo queryUserInfo(@Param("id") Integer i, @Param("username") String name);@Select("select * from userInfo where id = #{id}")@ResultMap(value = "resultMap")//使用过@Results注解后,其他方法可以直接使用@ResultMap注解获得相同效果public UserInfo queryUserInfoById(Integer id);
方法三:添加配置
mybatis:configuration:map-underscore-to-camel-case: true #驼峰自动转换
二,新增 - @Insert
2.1 使用对象插入
使用多个参数插入数据与上述查询的使用方法一样,这里不过多赘述,这里讲一下如何使用对象插入数据:
@Mapper
public interface UserInfoMapper {//这里演示一下使用对象插入@Insert("insert into userInfo (username, password, age, gender, phone) " +"values (#{username}, #{password}, #{age}, #{gender}, #{phone})")public Integer insert(UserInfo userInfo);//使用@Param注解@Insert("insert into userInfo (username, password, age, gender, phone) " +"values (#{userInfo.username}, #{userInfo.password}, #{userInfo.age}, #{userInfo.gender}, #{userInfo.phone})")public Integer insertByParam(@Param("userInfo") UserInfo userInfo);//这里的返回值是成功修改了几行数据,也可以返回void
}
2.2 获取主键
在有些情景中,我们需要获取到新插入数据的 id,如果想要拿到自增 id,需要在Mapper接口方法上添加一个@Option注解:
@Options(useGeneratedKeys = true, keyProperty = "id")@Insert("insert into userInfo (username, password, age, gender, phone) " +"values (#{username}, #{password}, #{age}, #{gender}, #{phone})")public Integer insert(UserInfo userInfo);
- useGeneratedKeys = true:表示告诉MyBatis使用JDBC的
getGeneratedKeys
方法来检索数据库内部生成的主键(如果数据库支持的话) - keyProperty = ''id'':这个属性指定了userInfo对象中的 id 属性接收数据库生成的主键
三,删除 - @Delete
@Delete("delete from userInfo where id = #{id}")public Integer deleteById(Integer id);
四,修改 - @Update
@Update("update userInfo set username = #{username} where id = #{id}")public Integer updateById(@Param("username") String username, @Param("id") Integer id);
补:MyBatis 的配置
mybatis:configuration: # 配置打印 MyBatis⽇志map-underscore-to-camel-case: true #驼峰自动转换log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句mapper-locations: classpath:mapper/**Mapper.xml #使用xml操作数据库时会用到