SpringBoot系列:Spring Boot集成MyBatis,xml配置文件方式

一、关于MyBatis

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。

MyBatis的简单和其使用sql灵活性,以及原生sql所带来的高性能,MyBatis备受欢迎,尤其是对效率有着苛刻要求的新型互联网公司。

二、示例演示

在Spring Boot中,MyBatis的使用和别的框架里没有任何变化,Spring Boot仅仅简化了MyBatis的集成。MyBatis开发有两种方式,一种是基于注解sql,一种是基于xml配置文件sql。

这一节主要讲解基于xml配置文件sql的方式。

同样,我们先引入pom依赖,即mybatis-spring-boot-starter。

<!--mysql连接-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

<!--druid连接池-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.0.29</version>
</dependency>

<!--mybatis依赖-->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.3.2</version>
</dependency>

然后配置文中,主要是设置configuration.log-impl打印sql,mapperLocations表示xml配置文件的位置,由于是基于配置文件的方式,所以这里不能省略,这里我将mapper文件放到了resources目录下的mybatis目录。

如果是放在java目录,注意修改pom文件编译打包配置包含xml文件,因为不配置可能存在mapper文件编译后不存在的问题。
在这里插入图片描述
我们的User实体,就是简单的PO对象,不需要任何额外配置。

@Data
public class User {

    private Integer id;

    private String username;

    private String password;

}

UserApi类,即controller。

@RestController
@RequestMapping("user")
public class UserApi {

    @Autowired
    private UserService userService;

    /**
     * 添加用户
     * @param user
     */
    @PostMapping("addUser")
    public String addUser(User user){
        userService.addUser(user);
        return "添加用户成功";
    }

    /**
     * 删除用户
     * @param id
     */
    @GetMapping("delUser")
    public String delUser(@RequestParam(value = "id") int id){
        userService.delUser(id);
        return "删除用户成功";
    }

    /**
     * 修改用户信息
     * @param user
     */
    @PostMapping("updateUser")
    public String updateUser(User user){
        userService.updateUser(user);
        return "修改用户成功";
    }

    /**
     * 获取用户信息
     * @param id
     * @return
     */
    @GetMapping("getUser")
    public User getUser(@RequestParam(value = "id") int id){
        return userService.getUser(id);
    }

    @GetMapping("getUsers")
    public List<User> getUsers(){
        List<User> users = userService.findAll();
        return users;
    }

    @GetMapping("getUserByUP")
    public User getUserByUP(@RequestParam(value = "username") String username, @RequestParam(value = "password") String password){
        return userService.getUser(username, password);
    }

}

UserService类,由于简单,省略了其接口。

@Service
public class UserService {

    @Autowired
    private IUserDao userDao;

    /**
     * 添加用户
     * @param user
     */
    public void addUser(User user){
        userDao.add(user);
    }

    /**
     * 删除用户
     * @param id
     */
    public void delUser(int id){
        userDao.del(id);
    }

    /**
     * 修改用户信息
     * @param user
     */
    public void updateUser(User user){
        userDao.update(user);
    }

    /**
     * 获取用户信息
     * @param id
     * @return
     */
    public User getUser(int id){
        return userDao.find(id);
    }

    /**
     * 获取全部用户信息
     * @return
     */
    public List<User> findAll() {
        return userDao.findAll();
    }

    /**
     * 获取用户
     * @param username
     * @param password
     * @return
     */
    public User getUser(String username, String password) {
        User user = userDao.findByUsernameAndPassword(username, password);
        return user;
    }

}

不同于基于注解sql的方式,基于xml配置文件时,具体数据库操作逻辑都存在于xml配置文件中,所以我们仅仅需要提供接口和抽象方法即可。

@Mapper
public interface IUserDao {

    /**
     * 添加用户
     * @param user
     * @return
     */
    int add(User user);

    /**
     * 根据id删除用户
     * @param id
     * @return
     */
    int del(@Param("id") int id);

    /**
     * 更新用户信息
     * @param user
     * @return
     */
    int update(User user);

    /**
     * 根据id查找用户
     * @param id
     * @return
     */
    User find(@Param("id") int id);

    /**
     * 获取全部用户
     * @return
     */
    List<User> findAll();

    /**
     * 根据用户名和密码查找用户
     * @param username
     * @param password
     * @return
     */
    User findByUsernameAndPassword(@Param("username") String username, @Param("password") String password);

}

@Mapper还是一样,该注解表明这是dao层接口,也可以在启动类上使用@MapperScan,这样就不用为每个dao层接口再单独使用@Mapper注解了。

@MapperScan("com.yanger.*.dao")
@SpringBootApplication
public class SpringbootApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootApplication.class, args);
    }

}

基于xml配置文件方式,最后就是mybatis的重点了,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.yanger.mybatis.dao.IUserDao">

    <!-- 通用查询结果对象-->
    <resultMap id="BaseResultMap" type="com.yanger.mybatis.po.User">
        <id column="id" property="id"/>
        <result column="username" property="username"/>
        <result column="password" property="password"/>
    </resultMap>

    <sql id = "Base_Column">
        id, username, password
    </sql>

    <!--添加用户-->
    <insert id="add" parameterType="com.yanger.mybatis.po.User">
        insert into user(username, password) values(#{username}, #{password})
    </insert>

    <!--根据id删除用户-->
    <delete id="del">
        delete from user where id = #{id}
    </delete>

    <!--更新用户信息-->
    <update id="update" parameterType="com.yanger.mybatis.po.User">
        update user set username = #{username}, password = #{password} where id = #{id}
    </update>

    <!-- 根据id查找用户 -->
    <select id="find" resultMap="BaseResultMap" parameterType="map">
        select <include refid="Base_Column"/> from user where id = #{id}
    </select>

    <!--获取全部用户-->
    <select id="findAll" resultMap="BaseResultMap">
        select * from user
    </select>

    <!--根据用户名和密码查找用户-->
    <select id="findByUsernameAndPassword" resultMap="BaseResultMap" parameterType="map">
        select <include refid="Base_Column"/> from user where username = #{username} and password = #{password}
    </select>
</mapper>

xml配置文件中的sql语句和基于注解方式没有太大差别,主要是mybatis的标签及相应属性使用,如resultMap、insert、delete、update、select、sql等。

源码地址:https://github.com/imyanger/springboot-project/tree/master/p8-springboot-mybatis-xml

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值