一、先是修改service接口将要添加的方法写进去
public interface IMachineService extends IService<Machine> {
public Machine getOneByIdWithFactoryName(String machineId);
}
接口定义起来就很简单,就是把方法名称 入参 返回值类型 定义好就OK了
二、修改serviceImpl的实现方法
@Resource
private MachineMapper machineMapper;
@Override
public Machine getOneByIdWithFactoryName(String machineId) {
return machineMapper.getOneByIdWithFactoryName(machineId);
}
这一步起始就是调用MyBatis的Mapper,这个Mapper的实现是MyBatis(Plus 有没有不确定)完成的。
这时候方法应该是红的,我们直接Ctrl+enter 创建这个红色的方法,会自动到.mapper
包里相应的interface里创建这个方法
三、重要的来了,需要我们在方法上加上注解
public interface MachineMapper extends BaseMapper<Machine> {
@Select("select * , (select name from factory where id = factory_id) as factory_name from machine where id = #{machineId}")
Machine getOneByIdWithFactoryName(String machineId);
}
除了Select 还有很多种注解,根据实际情况选择服用即可。
还有一些其他的常用的知识
// 在注解中使用方法传入的参数,在上边的例子里也展示了
// #{machineId}
// 还支持if else 的判断 用法如下
@Select("" +
"<script>" +
"select " +
"m_id as id ," +
"m_name as name, " +
"m_order_key as order_key, " +
"(select count(*) from xdy_purview where module_id = m_id and disable = 0) as quote, " +
"system_id as system_id, " +
"(select s_name from xdy_system where s_id = ps.system_id) as system_name, " +
"create_user_id, " +
"update_user_id, " +
"create_time, " +
"update_time, " +
"(select u_name from xdy_user where u_id = ps.create_user_id) as create_user_name, " +
"(select u_name from xdy_user where u_id = ps.update_user_id) as update_user_name " +
"from xdy_module as ps " +
"where disable = 0 " +
"<if test='systemId != '''>" +
" and system_id = #{systemId} " +
"</if>" +
"order by m_order_key asc" +
"</script>")
上边的代码要注意尖括号里的内容 如果要使用脚本 就要以script开头和结尾 包裹sql 语句 其中的就是一个判断
if 里的test是一个固定的写法。如果systemId 不等于空,才会把这段sql包含到最终的sql里。
以上就是自定义Mapper的过程, 对于@Select @Inset 等等的注解可以自行了解,包括Script里还有哪些语句 以及 if 还有多少种的判断方式,都可以自行了解。