新来的同事问我 怎么没有mapper.xml文件

这是我参与11月更文挑战的第19天,活动详情查看:2021最后一次更文挑战

写在前面

我们都知道,不管是原生的SSM工程还是现在的SpringBoot,操作数据库持久层都会利用Mybatis,Mybatis是家喻户晓的数据库操作框架。前几年 可能还有的会用hibernate,多说一句,hibernate后来穿了一层外衣,叫JPA,不过本质还是hibernate,但是整个市场占有量Mybatis地位无可撼动。

那都知道我们都会生成一套xml文件 去操作相应的表。新来的同事问我,这套工程里怎么没有呢,那怎么操作数据库呢。我笑了,,,

没有xml文件的mapper

脱离xml文件还能操作数据库吗。答案当然是肯定的,我们一起来看下,先看一下代码

UserMapper.java

/**
 * 根据id查询用户信息
 * @param userId
 * @return
 */
@Select("select id,user_name as userName,age from t_user where id =#{userId}")
User selectUserByUserId(@Param("userId") Integer userId);
复制代码

上述代码是根据用户id查询用户信息的一个功能,首先这是个java文件,不是xml文件,用的即是

  • @Select注解

该注解也是Mybatis官方的注解,目的是快速提供对数据库简便、快速去操作sql。只需要在mapper中方法上加入@Select(),然后在括号中写入需要实现的sql语句即可。

那有人问了 ,这个是查询。如果是插入添加呢,没错 insert注解

  • @Insert
@Insert("insert into t_user (user_name, age) values(#{userName},#{age})")
int insertUser(User user);
复制代码

这是一个添加落库的一个操作,将一个对象set进去 和有xml文件的时候是一样的操作。value必须是User实体当中的实体

看到这里,同事问了,那这个插入操作能将自增id给返回来吗。有xml的时候:

<!--主要是在主键是自增的情况下使用,添加成功后可以直接使用主键值,其中keyProperty的值是对象的属性值,而不是数据库表中的字段名-->
<insert id="insertSelective" parameterType="com.xxx.dataobject.UserDo" keyProperty="id" useGeneratedKeys="true">
............
</insert>
复制代码

上面我们只需要添加 keyProperty="id" useGeneratedKeys="true" 便可返回自增id,那这个注解形式的怎么返回呢

@Insert("insert into t_user (user_name, age) values(#{userName},#{age})")
@Options(useGeneratedKeys = true)
int insertUser(User user);
复制代码
  • @Options(useGeneratedKeys = true)

添加该注解,即可返回自增id。

聪明的同事看到这里说那删除和修改就是 @Delete @Update 了呗。哈哈 这里就不赘述了。大家可以自行百度看下。跟select insert一样

注意点

这里说下 在查询的时候要特别注意。不能写select *

@Select("select * from t_user where id =#{userId}")
User selectUserByUserId(@Param("userId") Integer userId);
复制代码

得自己去匹配属性。xml的时候 也是根据字段和实体属性匹配的。这里 如果单纯写 * 框架肯定不会自动匹配到属性的。 所以得as

同事问了如果查list怎么查,一样的写法 我们一起看下

@Select("select id,user_name,age from t_user where id =#{userId}")
@Results(value = {
        @Result(property = "id", column = "id", javaType = INTEGER.class, jdbcType = JdbcType.INTEGER),
        @Result(property = "userName", column = "user_name", javaType = String.class, jdbcType = JdbcType.VARCHAR),
        @Result(property = "age", column = "age", javaType = INTEGER.class, jdbcType = JdbcType.INTEGER)})
List<User> findUserList(@Param("userId") Integer userId)        
复制代码

这样就可以省略as 去指定属性名称。由注解去指定。

OK。今天关于MyBatis 增删改查的注解介绍就到这里。。。 我们下期再见

弦外之音

感谢你的阅读,如果你感觉学到了东西,您可以点赞,关注。也欢迎有问题我们下面评论交流

加油! 我们下期再见!

给大家分享几个我前面写的几篇骚操作

copy对象,这个操作有点骚!

干货!SpringBoot利用监听事件,实现异步操作

猜你喜欢

转载自juejin.im/post/7033001350699057183