mybatis-plus项目中的MySQL数据库操作

代码编写平台:IDEA

MySQL版本:5.7

数据库操作工具:SQLyog

数据库(表)的创建

1.右键已创建的连接,选择创建数据库

2.创建新的数据库,这里创建名为“test"的数据库

3.在MyBatis-Plus官网上复制示例代码,复制到查询编辑器窗口,鼠标选中全部内容,然后点击导航栏的执行查询按钮。F5刷新一下,数据库中就会出现user表

4.user表创建完成

需要添加的依赖

项目连接的数据库是MySQL5.7版本的,所以这里从Maven Repository拿的mysql connector依赖版本是5.1.49版本,默认是最新的8.0版本

lombok依赖用来简化实体类的getXX setXX toString等一系列的方法

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.2<!--Latest Version--></version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.49</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

application.yml中配置

    url: jdbc:mysql://localhost:3306/数据库名?characterEncoding=utf-8&useSSL=false

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test?characterEncoding=utf-8&useSSL=false
    username: root
    password: 123321
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl


项目结构

创建各层对应类

pojo/User

@Data注解自动生成关于该类的getXX setXX toString Constructor()方法

@TableName(String value),value要和数据库中创建的表名完全一致

类中的属性名也要和连接数据库中的表的列名完全一致才行

@Data
@NoArgsConstructor  //无参构造
@AllArgsConstructor //有参构造
@TableName("user")  //user对应数据库中的表
public class User {

    private Integer id;
    private  String name;
    private Integer age;
    private String email;

}

当然,属性名也可以与表列名不一致,只是需要添加注解@TableField(String value)

    @TableField("email") //设置emal映射到user表中email列
    private String emal;

dao/UserDao

BaseMapper<>中的泛型对象为映射数据库对应表的实体类

/*
 * BaseMapper类用来完成对对象的操作方法(增删查改),它会映射到对应的表中,
 * 这个接口会在spring容器里,动态创建这个接口的实现类,同时产生这个类的对象
 *
 */

public interface UserDao extends BaseMapper<User> {
}

biz/UserBiz

IService类对CRUD【(Create(增)、Retrieve(查)、Update(改)和Delete(删)】进行进一步封装

IService<>中的泛型对象同样为映射数据库对应表的实体类

public interface UserBiz extends IService<User> {


}

biz/impl/UserBizImpl

ServiceImpl<M extends BaseMapper<T>, T>。M是继承了BaseMapper的一个接口类型,T是实体类类型。即可简化为ServiceImpl<M, T>。如有这个ServiceImpl不满足当前的需求,我们可以自己定义新方法

ServiceImpl是IService接口的一个实现类

@Service  //表示spring容器帮我们产生这个类的对像,同时,完成自动注入,将UserDao接口的实现类对像注入进来
public class UserBizImpl extends ServiceImpl<UserDao, User> implements UserBiz {
    //
}

MybatisPlusDemo01Application主类)

@MapperScan
作用:指定要变成实现类的接口所在的包,然后包下面的所有接口在编译之后都会生成相应的实现类
添加位置:Springboot启动类

参考文献:https://blog.csdn.net/manchengpiaoxue/article/details/84937257

@SpringBootApplication
@MapperScan("com.igeekhome.dao")
public class MybatisPlusDemo01Application {

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

}

数据库内置CRUD操作测试

测试结构

数据库原表

数据库层

框架代码:@SpringBootTest开启spring boot测试功能 ,@Autowired开启自动注入,这里userDao可能会被红线标记,但没关系

@SpringBootTest
public class UserDaoTest {

    @Autowired
    private  UserDao userDao;
}

查看mybatis-plus官网的参考文档或者查看BaseMapper<T>源码,根据参数类型提示对内置操作进行测试

 

public interface BaseMapper<T> extends Mapper<T> {
    int insert(T entity);

    int deleteById(Serializable id);

    int deleteByMap(@Param("cm") Map<String, Object> columnMap);

    int delete(@Param("ew") Wrapper<T> queryWrapper);

    int deleteBatchIds(@Param("coll") Collection<? extends Serializable> idList);

    int updateById(@Param("et") T entity);

    int update(@Param("et") T entity, @Param("ew") Wrapper<T> updateWrapper);

    T selectById(Serializable id);

    List<T> selectBatchIds(@Param("coll") Collection<? extends Serializable> idList);

    List<T> selectByMap(@Param("cm") Map<String, Object> columnMap);

    T selectOne(@Param("ew") Wrapper<T> queryWrapper);

    Integer selectCount(@Param("ew") Wrapper<T> queryWrapper);

    List<T> selectList(@Param("ew") Wrapper<T> queryWrapper);

    List<Map<String, Object>> selectMaps(@Param("ew") Wrapper<T> queryWrapper);

    List<Object> selectObjs(@Param("ew") Wrapper<T> queryWrapper);

    <E extends IPage<T>> E selectPage(E page, @Param("ew") Wrapper<T> queryWrapper);

    <E extends IPage<Map<String, Object>>> E selectMapsPage(E page, @Param("ew") Wrapper<T> queryWrapper);
}

编写测试方法时,方法前必须加注解@Test,方法的返回类型和参数均可为空

int insert(T entity);

T表示任意类型(泛型写法),entity表明这是一个实体对象

那这里我们就新建一个实体对象user,然后通过userDao对象调用insert()方法

    @Test
    void insert(){

      User user=new User(7,"wangweifeng",18,"wagnwei_fen@163.com");
      userDao.insert(user)

    }

鼠标光标放在在测试方法中,右键选择Run 'insert()'(Run 'method')

通过控制台可以看到数据插入成功的信息

对应数据库表点击刷新按钮 ,发现数据表中已经更新了插入信息

int deleteById(Serializable id);

Serializable类型可以简单理解为任意类型。

@Test
void deleteById()
{
   int i= userDao.deleteById(7);//i值,表示影响的行数
}

int delete(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

简化为int delete(Wrapper<T> queryWrapper),通过查看源码可知Wrapper是一个带有泛型的抽象类。点击其左侧的继承图标,可以发现有一个子类为QueryWrapper,那么我们就顺应文档参数名提示,将具体参数类型设为QueryWrapper<>,并将泛型对象设为User(映射到数据库目标表的映射实体类)

    @Test
    void  delete()
    {
        QueryWrapper<User> qw=new QueryWrapper<>();
        userDao.delete(qw);
    }

如果QueryWrapper对象不设置任何条件,那么就会删除表中所有的信息

这里可以参考:条件构造器

eq表示等于,le表示小于等于。这里设定的条件之间的关系是AND,即都要满足。从控制台的运行结果也可以看出来

    @Test
    void  delete()
    {
        QueryWrapper<User> qw=new QueryWrapper<>();
        qw.eq("name","Tom");//条件①,name="Tom"
        qw.le("age", 30);//条件②,age<=30

        userDao.delete(qw);
    }

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值