前言:
能够使mybatis-plus像mybatis一样在xml中写SQL
前提是原本可以在项目中正常使用mybatis-plus
😄看mybatisPlus自定义Sql语句操作之前,建议先看
1️⃣Mybatis-plus(MP)中CRUD操作保姆级笔记
2️⃣mybatisPlus实现ActiveRecord(AR)操作笔记
四、自定义sql语句
建数据库表
实体类
@TableName(value = "dept") public class Dept extends Model<Dept> { @Override protected Serializable pkVal() { return id; } /** * 设置表的主键,分布式id,使用了雪花算法,字符串类型 */ @TableId(value = "id",type = IdType.AUTO) private String id; private String deptName; private String deptMobile; private Integer deptManager;
创建mapper
/** * DeptMapper是不需要使用的,MP需要使用DeptMapper获取到数据库的表的信息。 * 如果不定义DeptMapper, MP会报错, 找不到表的定义信息 * @author 王恒杰 */ public interface DeptMapper extends BaseMapper<Dept> { /** * 添加 */ public void insertDept(); /** * 通过id查询 * @param id * @return */ public Dept selectById(Integer id); /** * 通过姓名查询 * @param name * @return */ public List<Dept> selectByName(String name); }
新建sql映射xml文件:DeptMapper.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.tjcu.mapper.DeptMapper"> <!--添加--> <insert id="insertDept"> insert into dept values(#{id},#{deptName},#{deptMobile},#{deptManager}) </insert> <!--通过id查询--> <select id="selectById" resultType="com.tjcu.entity.Dept"> select * from dept where id=#{id} </select> <!--通过姓名查询--> <select id="selectById" resultType="com.tjcu.entity.Dept"> select * from dept where dept_name=#{name} </select> </mapper>
配置xml文件位置:配置application.yml (注意位置一定要对整齐)
spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/plus?useSSL=false&serverTimezone=UTC username: root password: root mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl mapper-locations: classpath*:com.tjcu/*Mapper.xml
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7EiQIxIf-1636353219615)(https://i.loli.net/2021/11/08/rgcYsnQV4i3IBpq.png)]
添加测试
/* @SuppressWarnings("all"):就是为了不让deptMapper报错 */ @SuppressWarnings("all") @RunWith(SpringRunner.class) @SpringBootTest public class DeptARTest { @Autowired private DeptMapper deptMapper; /** * 添加操作 */ @Test public void insertDeptTest(){ Dept dept = new Dept(); dept.setDeptName("销售表"); dept.setDeptMobile("1235678"); dept.setDeptManager(2); deptMapper.insertDept(dept); }
添加日志
通过id查询
/** * 查询操作 */ @Test public void selectDeptTest(){ Dept dept = new Dept(); Dept dept1 = deptMapper.selectById(1); System.out.println(dept1); }
ID查询日志
通过姓名查询
/** * 查询操作 */ @Test public void selectDeptTest(){ Dept dept = new Dept(); List<Dept> depts = deptMapper.selectByName("销售表"); System.out.println(depts); }
通过姓名查询日志