spring boot 集成 mybatis 入门级学习

来源:互联网 发布:在线数据分析软件 编辑:程序博客网 时间:2024/05/16 23:57

与mybatis的初次会面

接触springboot也不过月余,由于工作需要,jdbctemplate冗杂的sql拼接已经不再符合接下来的深入学习。我迫切地意识到,倘若不用spring-data-jpa操纵数据库,那就用mybatis吧。作为当前最流行的持久层框架之一,不学习它的方法,相当于与时代脱轨了。首先,得知道集成mybatis的方法有哪些。其实大致也就两种:1、基于注解;2、基于xml配置文件。不管使用哪种方法,引入mybatis的pom依赖都是必不可少的步骤。

a.在pom文件中添加mybatis-spring-boot-starter依赖以及mysql数据库驱动依赖:

<dependency>    <groupId>org.mybatis.spring.boot</groupId>    <artifactId>mybatis-spring-boot-starter</artifactId>    <version>1.1.1</version></dependency><dependency>    <groupId>mysql</groupId>    <artifactId>mysql-connector-java</artifactId>    <version>5.1.21</version></dependency>

b. 然后,在数据库中新建一张user表:

user表的属性及长度

c.在application.properties中添加mysql数据源:

spring.datasource.url=jdbc:mysql://localhost:3306/testspring.datasource.username=rootspring.datasource.password=rootspring.datasource.driver-class-name=com.mysql.jdbc.Driver

使用基于注解的方式

1.表建好后,在domain文件夹下新建一个User实体类,实体类的属性与数据库属性名称与数据类型一一对应。

public class User {    private Long id;    private String name;    private Integer age;    //省略get和set方法}

2.在mapper文件夹下创建UserMapper接口:

import com.liqiaoqi.domain.User;import org.apache.ibatis.annotations.*;import org.springframework.stereotype.Component;@Mapper//该注解是解决IDEA mapper注入时显示could not autowire的问题@Component(value = "userMapper")public interface UserMapper {    @Select("SELECT * FROM user WHERE name = #{name}")    User findByName(@Param("name") String name);    @Insert("INSERT INTO user(name, age) VALUES(#{name}, #{age})")    int insert(@Param("name") String name, @Param("age") Integer age);}
注意:@Mapper注解必须加上。如果Mapper接口很多,可以直接在Application类前添加@MapperScan("mapper所在包名")注解。@Component注解也可以不加,前提是在用@Autowired注解注入mapper时不提示“could not autowired”错误。

3.在service文件夹下添加UserService类:

@Servicepublic class UserService {    @Autowired    private UserMapper userMapper;    public String findByName(){        userMapper.insert("pinky",20);        User u =  userMapper.findByName("pinky");        return u.getName();    }}

4.然后在controller文件夹下添加UserController类:

@RestControllerpublic class UserController {    @Autowired    private UserService userService;    @RequestMapping("/test")    public String findByName(){        return userService.findByName();    }}

然后运行项目访问路径查看即可。

使用xml配置文件的方式

与基于注解方法不同,使用xml配置文件方法时,sql语句不在mapper接口中定义,而是剥离出来,在xml文件中单独定义。这样做的好处是能够使得sql语句更为灵活也更利于维护。  但两种集成方法大致是一样的,主要有以下区别:

1.UserMapper中不写@Select注解。

import com.liqiaoqi.domain.User;import org.apache.ibatis.annotations.*;import org.springframework.stereotype.Component;@Mapper//该注解是解决IDEA mapper注入时显示could not autowire的问题@Component(value = "userMapper")public interface UserMapper {    User findByName(@Param("name") String name);    int insert(@Param("name") String name, @Param("age") Integer age);}

2.在application.properties文件中添加mybatis的配置信息:

mybatis.config-locations=classpath:mybatis/mybatis-config.xmlmybatis.mapper-locations=classpath:mybatis/mapper/*.xmlmybatis.typeAliasesPackage=com.liqiaoqi.domain

3.添加UserMapper.xml。实现UserMapper映射的方法(即sql语句)将全部定义在该文件中。

<?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.liqiaoqi.mapper.UserMapper" >    <resultMap id="UserResultMap" type="com.liqiaoqi.domain.User">        <id property="id" column="id" />        <result property="name" column="name" />        <result property="age" column="age" />    </resultMap>    <insert id="insert">        INSERT INTO        user        (name,age)        VALUES        (#{name},#{age})    </insert>    <select id="findByName" resultType="com.liqiaoqi.domain.User" >        SELECT *        FROM user        WHERE name = #{name}    </select></mapper>

除以上三点与基于注解方法稍有不同外,其余部分全部不作改变。两种方法结果相同。

以下是项目的完整结构:
项目的结构

以上源码:示例代码

参考资料

  • spring boot 学习(五)SpringBoot+MyBatis(XML)+Druid
  • springboot(六):如何优雅的使用mybatis 作者:纯洁的微笑
  • Springboot 整合 Mybatis 的完整 Web 案例 作者:泥瓦匠BySocket
原创粉丝点击