欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SpringBoot框架整合Mybatis简单攻略

程序员文章站 2022-06-25 11:34:14
目录步骤 2 如何配置mybatis到springboot项目步骤 6 整合pagehelper分页插件步骤 8 mybatis中#{}和${}的区别是什么?步骤 9 mybatis中模糊查询like...

步骤 1 添加mybatis-starter依赖

访问:

搜索mybatis,找到 mybatis spring boot starter ,点进去,复制到pom.xml

<dependency>
    <groupid>org.mybatis.spring.boot</groupid>
    <artifactid>mybatis-spring-boot-starter</artifactid>
    <version>2.2.0</version>
</dependency>

我们就用最新的即可。

步骤 2 如何配置mybatis到springboot项目

mybatis:
  mapper-locations: classpath:mybatis/*.xml
  type-aliases-package: com.java18.vipmgr.pojo

mapper-locations是定义xml文件所在的目录。

SpringBoot框架整合Mybatis简单攻略

我们放在resources下面,也就是classpath中。

usermapper.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.java18.vipmgr.mapper.usermapper">
    <select id="getallusers" resulttype="user">
        select * from users
    </select>
</mapper>

里面就写了一个方法,注意 namespace=“com.java18.vipmgr.mapper.usermapper” 这个配置。这个表示该xml文件是和usermapper.java绑定的。

SpringBoot框架整合Mybatis简单攻略

代码如下

@mapper
public interface usermapper {
    public list<user> getallusers();
}

接下来再看 resulttype=“user” 这个配置,为什么返回类型知道是user对象呢?

user类在这:

SpringBoot框架整合Mybatis简单攻略

@data
public class user {
    private integer id;
    private string username;
    private string password;
    private integer points;
}

那是因为,我们在application.yml中做了绑定,也就是这个:

mybatis:
  mapper-locations: classpath:mybatis/*.xml
  <font color="#c24f4a">type-aliases-package: com.java18.vipmgr.pojo</font>

所以,当我们写 resulttype=“user” 的时候,就会自动匹配到com.java18.vipmgr.pojo包下面的user类。

至此,配置mybatis到springboot项目就成功了!

步骤 3 测试查询

SpringBoot框架整合Mybatis简单攻略

还是在controller中做测试,首先引入mapper

@autowired
usermapper usermapper;

然后编写查询方法

@getmapping("getallviamybatis")
public  list<user> getallviamybatis(){
    return usermapper.getallusers();
}

启动服务,访问http://localhost:8888/user/getallviamybatis,得

[{“id”:1,“username”:“zhangsan”,“password”:“123”,“points”:1000},{“id”:2,“username”:“lisi”,“password”:“123”,“points”:200}]

步骤 4 mybatis注解方式

除了xml的方式,我们还可以使用mybatis注解方式
usermapper.java

@mapper
public interface usermapper {
    public list<user> getallusers();
​
    @select("select * from users where id = #{param1}")
    user findbyid(string id);
​
}

增加了一个方法,打了@select注解,接收id为参数,这边用的是mybatis的顺序传参法。

对应的controller方法

@getmapping("findbyid")
public  user findbyid(string id){
    return usermapper.findbyid(id);
}

测试url:http://localhost:8888/user/findbyid?id=2

返回 {“id”:2,“username”:“lisi”,“password”:“123”,“points”:200}

这种的好处就是不用写xml了,很方便,缺点是不够灵活。

步骤 5 用注解方式做一个新增操作

mapper代码

@update("insert into users values (null,#{username},#{password},#{points})")
void adduser(user user);

controller代码

@getmapping("adduser")
public  boolean adduser(){
    user user = new user();
    user.setusername("wangwu");
    user.setpassword("123");
    user.setpoints(1000);
    usermapper.adduser(user);
    return true;
}

测试效果

SpringBoot框架整合Mybatis简单攻略

ps: 因为id是自动增长的,所以插入null即可。

步骤 6 整合pagehelper分页插件

pom.xml

<dependency>
    <groupid>com.github.pagehelper</groupid>
    <artifactid>pagehelper-spring-boot-starter</artifactid>
    <version>1.3.1</version>
</dependency>

导入这个依赖就行了,你可以什么都不配置的。

usercontroller,原来的查询方法改成这样

@getmapping("getallviamybatis")
public  pageinfo getallviamybatis(int page,int rows){
    pagehelper.startpage(page,rows);
    pageinfo pageinfo = new pageinfo(usermapper.getallusers());
    return pageinfo;
}

接收page和rows作为分页参数

测试url http://localhost:8888/user/getallviamybatis?page=1&rows=10

测试前记得多弄几条数据在数据库。

步骤 7 拓展知识:mybatis四种传参方式

通过对象传参

<insert id="insertemp" parametertype="org.zhang.pojo.emp">
    insert into emp (ename,job,hiredate,sal) values (#{ename},#{job},#{hiredate},#{sal});
    <selectkey resulttype="int" keycolumn="empno" keyproperty="empno" order="after">
        select last_insert_id()
    </selectkey>
</insert>

方式1:顺序传参法

<!--    此时因为有多个参数  所以参数类型不能逐一制定 可以省略  有mybatis自动匹配-->
    <update id="updateempbyno2">
            update emp set ename=#{param1} where empno=#{param2}
    </update>

方式2:@param注解传参法
就是在方法的参数列表中置顶要传的参数,然后在sql中直接写

public void updateempbyno2(@param("name") string ename,@param("no") integer empno) throws ioexception;
<update id="updateempbyno2">
        update emp set ename=#{name} where empno=#{no}
</update>

方式3:map传参法

重点就是 parametertype="hashmap" 这句话

public void updateempbyno3(map<string,object> argmap) throws ioexception;
<update id="updateempbyno3" parametertype="hashmap">
        update emp set ename=#{name} where empno=#{no}
</update>

方式4:java bean传参法

public user selectuser(emp emp);
  
 <select id="selectuser" parametertype="org.zhang.pojo.emp" resultmap="emp">
     select * from user
     where user_name = #{username} and dept_id = #{deptid}
 </select>

步骤 8 mybatis中#{}和${}的区别是什么?

katex parse error: expected 'eof', got '#' at position 10: {}是字符串替换,#̲{}是预处理; mybatis…{}时,就是把${}直接替换成变量的值。

而mybatis在处理#{}时,会对sql语句进行预处理,将sql中的#{}替换为?号,调用preparedstatement的set方法来赋值;

使用#{}可以有效的防止sql注入,提高系统安全性。

步骤 9 mybatis中模糊查询like语句该怎么写?

第1种:在java代码中添加sql通配符,就是把通配符也写在字符串里面带进去。(推荐).

string wildcardname = “%smi%”;
list<name> names = mapper.selectlike(wildcardname);

对应的xml:

select * from foo where bar like #{value}

第2种:在sql语句中拼接通配符,会引起sql注入(不推荐)

string wildcardname = “smi”;
list<name> names = mapper.selectlike(wildcardname);
​
 <span style="color: inherit;">对应的xml:</span>
    <select id=”selectlike”>
         select * from foo where bar like "%"${value}"%"
    </select>

步骤 10 springboot整合mybatis-plus

mybatis-plus (opens new window)(简称 mp)是一个 mybatis (opens new window)的增强工具,在 mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

SpringBoot框架整合Mybatis简单攻略

官网文档地址:

首先添加依赖,这一步是必不可少的。

<dependency>
    <groupid>com.baomidou</groupid>
    <artifactid>mybatis-plus-boot-starter</artifactid>
    <version>3.3.1.tmp</version>
</dependency>

步骤 11 mybatis-plus 如何与 mybatis 共存?

因为上面的代码都是基于mybatis的,所以,我们需要让他们共存。办法就是修改application.yml

mybatis-plus:
  mapper-locations: classpath:mybatis/*.xml
  type-aliases-package: com.java18.vipmgr.pojo

把mybayis改成mybatis-plus就可以了,之前的功能一个都不影响!

步骤 12 快速上手mybatis-plus

因为我们的类名和表明不一致,所以需要做一个配置

user.java

@data
@tablename("users")
public class user {
    private integer id;
    private string username;
    private string password;
    private integer points;
}

usermapper.java

public interface usermapper extends basemapper<user> {
 //省略之前的代码
}

继承了basemapper就可以拥有很多crud方法,这一点和jpa很像。

usercontroller.java

@getmapping("getallviamybatisplus")
public  ipage<user> getallviamybatisplus(integer page,integer rows){
    ipage<user> pageinfo = new page<>(page, rows);//参数一是当前页,参数二是每页个数
    querywrapper<user> wrapper = new querywrapper<>();
    pageinfo = usermapper.selectpage(pageinfo,wrapper);
    return pageinfo;
}

测试url:http://localhost:8888/user/getallviamybatisplus?page=1&rows=10

{“records”:[{“id”:1,“username”:“zhangsan”,“password”:“123”,“points”:1000},{“id”:2,“username”:“lisi”,“password”:“123”,“points”:200},{“id”:3,“username”:“wangwu”,“password”:“123”,“points”:1000},{“id”:4,“username”:“蔡互听”,“password”:“123”,“points”:1000},{“id”:5,“username”:“荀傍支”,“password”:“123”,“points”:1000},{“id”:6,“username”:“养绣洋”,“password”:“123”,“points”:1000},{“id”:7,“username”:“夔惑腔”,“password”:“123”,“points”:1000},{“id”:8,“username”:“戎悦下”,“password”:“123”,“points”:1000},{“id”:9,“username”:“厉触企”,“password”:“123”,“points”:1000},{“id”:10,“username”:“陆糟调”,“password”:“123”,“points”:1000}],“total”:22,“size”:10,“current”:1,“orders”:[],“hitcount”:false,“searchcount”:true,“pages”:3}

以上就是springboot框架整合mybatis简单攻略的详细内容,更多关于springboot框架整合mybatis的资料请关注其它相关文章!