• 上手spring boot项目(三)之spring boot整合mybatis进行增删改查


    使用mybatis框架进行增删改查大致有两种基础方式,一种扩展方式。两种基础方式分别是使用xml映射文件和使用方法注解。扩展方式是使用mybatis-plus的方式,其用法类似于spring-data-jpa。

    1.引入依赖

    <!--springboot的web起步依赖-->
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- Mybatis起步依赖 -->
    <dependency>
           <groupId>org.mybatis.spring.boot</groupId>
           <artifactId>mybatis-spring-boot-starter</artifactId>
           <version>2.1.0</version>
    </dependency>    
    <!-- MySql连接驱动 -->
    <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
    </dependency>

    2.entity实体类

    @TableName(value = "tb_user")//使用mybatis-plus时需要添加,与数据库中的表建立关系
    public class SysUser implements Serializable {
    
        @TableId(type = IdType.AUTO)//使用mybatis-plus时需要添加,主键生成策略
        private Long id;
    
        private String username;
    
    
        private String password;
    
        private String salt;
        private String avatar;
        private String introduce;
        private String remark;
        //省略get,set方法
    }

    3.创建application.properties配置文件

    #DB Configuration数据库信息:
    spring.datasource.driverClassName=com.mysql.jdbc.Driver
    spring.datasource.url=jdbc:mysql:///test
    spring.datasource.username=root
    spring.datasource.password=root
    spring.datasource.type=com.zaxxer.hikari.HikariDataSource

    #spring集成Mybatis环境
    #pojo别名扫描包
    mybatis.type-aliases-package=cn.zhq.system.entity
    #加载Mybatis映射文件
    mybatis.mapper-locations=classpath:mapper/*Mapper.xml

    # 打印sql
    #打印sql到控制台
    logging.level.cn.zhq.system.mapper=debug
    mybatis.type-aliases-package是实体所在包的位置,mybatis.mapper-locations是配置文件所在的位置。初次使用的时候最好加上打印sql的配置,如果出现错误的话,这样容易找出错误原因。

    4.创建UserMapper类

    @Mapper
    public interface UserMapper {
    
    }

    5.在spring boot的application加上注解

    @EntityScan("cn.zhq.system.entity")//填写 entity类所在包的位置。

    加上这个注解后,springboot就可以扫描能实体类。

    6.进行增删改查

    6.1 使用mapper.xml进行增删改查

    6.1.1 编写UserMapper类中的方法

        /**
         * 根据Name查询用户数据
         *
         * @param username
         * @return
         */
        SysUser findByName(String username);

    6.1.2  在resources的mapper目录下创建UserMapper.xml配置文件

    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
    <mapper namespace="cn.zhq.system.mapper.UserMapper">
        <select id="findByName" resultType="sysuser" parameterType="String">
          select * from tb_user where username = #{username}
        </select>
    </mapper>

    使用select标签执行查询语句,使用update标签进行 增,删,改操作。其中 id是UserMapper类中方法的名称,resultType是返回值的类型,parameterType是接收的参数类型。

    6.2 使用注解进行增删改查

        /**
         * 更新用户名
         * @param username
         */
        @Update("update tb_user set username= #{username} where id = #{id}")
        void updateByAvatar(String username,Long id);

    使用@Update注解后,就无需再编写UserMapper配置文件了,同理@Updae可以进行增删改操作。此外使用@Select进行查询。当进行一对多,多对多关系的查询时,还可以使用@Results注解指定返回结果的数据类型,这里就不细说了。

    以上两种方式各有利弊,使用配置文件编写sql语句好处是耦合度低但过于麻烦,使用注解的方式相对于配置文件来说比较简单,但是耦合度高。如果是简单语句,建议是使用注解,如果是复杂语句,使用配置文件的方式。具体使用哪种方式,可以视实际情况而定。

    6.3 使用mybatis-plus进行增删改查

    mybatis-plus类似于spring data jpa , 内置查询,更新,删除,插入语句,使我们无需再写那些简单的sql语句。

    6.3.1 引入依赖

     <!-- Mybatis Plus -->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>3.2.0</version>
            </dependency>

    6.3.2 application.yml配置文件

    # mybatis-plus
    mybatis-plus:
      type-aliases-package: cn.zhq.system.entity
      mapper-locations: classpath:mapper/*.xml
      configuration:
        jdbc-type-for-null: null
      global-config:
        banner: false
    type-aliases-package填写Entity实体类所在包的位置。mapper-locations:填写映射文件所在的位置,如果不写的话,在你的resources下的mapper配置文件会报错。

    6.3.3 相关service,serviceImpl,mapper类

    service:

    public interface UserService  extends IService<SysUser> {
    
    
        /**
         * 更新
         *
         * @param sysUser
         */
        void update(SysUser sysUser);
    }

    serviceImpl:

    @Service
    public class UserServiceImpl extends ServiceImpl<UserMapper, SysUser> implements UserService {
        @Autowired
        private UserMapper userMapper;
    
        @Override
        @Transactional
        public void update(SysUser sysUser) {
            userMapper.updateById(sysUser);
        }
    }

    mapper:

    @Mapper
    public interface UserMapper extends BaseMapper<SysUser> {
    }

    虽然我们在UserMapper中没有定义任何方法,但是mybatisPlus集成了很多方法可供我们使用。

    执行后,打印的sql语句结果如下

  • 相关阅读:
    ASP.NET的底层体系1
    MVC路由解析---IgnoreRoute
    HTTP协议详解(三)
    HTTP协议详解(二)
    HTTP协议详解(一)
    优化MySQL服务器
    知识管理系列---3.程序实现
    Linux上PHP加入环境变量
    php-fpm 服务
    centos 服务器编译安装apache+php
  • 原文地址:https://www.cnblogs.com/Code-Handling/p/12047735.html
Copyright © 2020-2023  润新知