mybatis 的快速入门以及基于spring boot整合mybatis(一)

MyBatis基础

MyBatis是一款非常优秀的持久层框架,用于简化JDBC的开发

准备工作:
复制代码
   1,创建sprong boot工程,引入mybatis相关依赖
   2,准备数据库表User,实体类User
   3, 配置MyBatis(在application.properties中数据库连接信息)
   4,编写Mybatis程序:编写MyBatis的持久层接口,定义SQL(注解/XML)

创建spring boot工程,并且引入相关的依赖。

1,在自己的工程下右击,然后点击new,选择module。

选择:spring Initializr 右边的配置根据自己情况选择。

选择spring boot的版本和要添加的依赖,最后点击创建。

查看pom文件

XML 复制代码
         <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>3.0.3</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.31</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.11</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

2,准备数据库库表user

sql 复制代码
create table user(
    id int unsigned primary key auto_increment comment 'ID,主键',
    username varchar(20) comment '用户名',
    password varchar(32) comment '密码',
    name varchar(10) comment '姓名',
    age tinyint unsigned comment '年龄'
) comment '用户表';

insert into user(id, username, password, name, age) values (1, 'daqiao', '123456', '大乔', 22),
                                                           (2, 'xiaoqiao', '123456', '小乔', 18),
                                                           (3, 'diaochan', '123456', '貂蝉', 24),
                                                           (4, 'lvbu', '123456', '吕布', 28),
                                                           (5, 'zhaoyun', '12345678', '赵云', 27);

和实体类User

java 复制代码
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private Integer id;
    private String username;
    private String password;
    private String name;
    private Integer age;
}

3,在application.properties配置文件中添加连接数据库的配置。

java 复制代码
#配置数据库连接信息
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/tlias
spring.datasource.username=root
spring.datasource.password=root

4,编写程序测试:

在com.sde包下创建子包mapper包,并创建一个UserMapper接口

mapper接口的代码:
java 复制代码
@Mapper
public interface UserMapper {

    /**
     * 根据用户名查询
     * @param username
     * @return
     */
    @Select("select * from user where username = #{username}")
    public User getByUsername(String username);

    /**
     * 查询全部用户
     * @return
     */
    @Select("select id, username, password, name, age from user")
    public List<User> selectAll();

    /**
     * 根据id删除
     * @param id
     */
    @Delete("delete from user where id = #{id}")
    public void delUser(Integer id);

    /**
     * 根据id修改用户信息
     * @param user
     */
    @Update("update user set username = #{username},password = #{password},name = #{name},age = #{age} where id = #{id}")
    public void updateUser(User user);

    /**
     * 添加用户信息
     * @param user
     */
    @Insert("insert into user values(null,#{username},#{password},#{name},#{age})")
    public void addUser(User user);

}
在test类中测试

代码:

java 复制代码
   @Autowired
    private UserMapper2 userMapper;

    @Test
    @DisplayName("测试查询全部")
    public void testSelectAll(){
        List<User> userList = userMapper.selectAll();
        userList.forEach(e -> System.out.println(e));
    }

    @Test
    @DisplayName("测试删除")
    public void testDel(){
        userMapper.delUser(8);
    }

    @Test
    @DisplayName("测试修改")
    public void testUpdate(){
        userMapper.updateUser(new User(7,"wxx","111","王星星",20));
    }

    @Test
    @DisplayName("测试添加")
    public void testAdd(){
        userMapper.addUser(new User(null,"java","111222","Java开发",55));
    }

    @Test
    @DisplayName("测试根据用户名查询")
    public void testGetByUsername(){
        User user = userMapper.getByUsername("daoen");
        System.out.println(user);
    }
辅助配置:
语法提示配置
  • 在写mysql语句的行,右击找到 Show Context Action。
  • 然后点击,inject language for reference。
  • 找到MySQL点击确定。
  • 当已经配置过这个语法提示的时候,在点击Show Context Action,会出现 Uninject language for reference。点击一下就去掉了语法提示。在重复上面的步骤,添加即可。

然后找到 inject language for reference

选择MySQL 双击即可。

看这里代码颜色就不一样了。

如果已经配置,在SQL语句上面右击,会出现 Uninject language for reference。点击这个就去掉了。

看效果:SQL语句全部变成了绿色。就去掉了

日志输出:

默认情况下,我们在mybatis中SQL语句执行时,我们看不到SQL语句执行的日志,配置一下配置,就可以看到在控制台输出的sql语句提示了。

在application.properties 配置文件中。添加 一面代码就行

#mybatis 的日志信息 -- 输出控制台 mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

java 复制代码
#配置数据库连接信息
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/sde01
spring.datasource.username=root
spring.datasource.password=root


#mybatis 的日志信息  -- 输出控制台
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
JDBC VS Mybatis 对比

看图说话

mybatis相比于jdbc可以很好的操作数据库并且能够简化代码开发。所以我们在以后项目和开发中,选取的是mybatis。

数据库连接池
  • 1,数据库连接池是一个容器,负责分配、管理数据库连接(Connection)。
  • 2,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个。
  • 3,释放空闲时间超过最大空闲时间的连接,来避免因为没有释放连接而引起的数据库连接遗漏。
优势:

​ 资源重用 ​

提升系统响应速度

​ 避免数据库连接遗漏 ​

标准接口:DataSource ​

官方(sun)提供的数据库连接池接口,由第三方组织实现此接口。

功能:获取连接 ​ Connection getConnection() throws SQLException;

常见产品:

Druid(德鲁伊) ​
  • 功能强大,性能优秀,是Java语言最好的数据库连接池之一
  • Druid连接池是阿里巴巴开源的数据库连接池项目

spring boot默认使用的是 Hikari连接池

通过上面的图片,我们可以看到,即便我们没有配置数据库连接池,也是有数据库连接池的。是spring boot默认自带的连接池(Hikari 追光者)

现在我们配置我们的国产数据库连接池 Druid数据库连接池。

先引入依赖:

XML 复制代码
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.11</version>
        </dependency>

在application.propertise 配置文件里面配置

配置的代码信息:

XML 复制代码
#配置druid连接池
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#配置数据库连接信息
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/tlias
spring.datasource.username=root
spring.datasource.password=root
xml映射配置

在Mybatis中,既可以通过注解配置SQL语句,也可以通过XML配置文件配置SQL语句。

规则:

  • 1,XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下(同包同名)。
  • 2,XML映射文件的namespace属性为Mapper接口全限定名一致。
  • 3,XML映射文件中sql语句的id与Mapper 接口中的方法名一致,并保持返回类型一致。

1,同包同名:

在resource是目录下,右击点击new然后选择Directory

切记在Directory里面,不是以逗号分割,而是用/分割。因为在电脑中,不同级别的目录,是/分开的,不是点。

这是一个错误的示范:

下面这个是正确的示范:

点击回车就创建成功了。

刚创建好长这样,下面添加一个和UserMapper,同名的xml文件

然后就创建成功了。

xml根标签

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=""><!--根节点-->


</mapper>

2,namespace属性为Mapper接口全限定名一致

右击UserMapper接口,点击 Copy Path/Refernence

接着点击 copy Reference

最后粘贴到 刚刚创建的UserMapper.xml 配置文件中的namespace里面

3,sql语句的id与Mapper 接口中的方法名一致

在UserMapper接口里面

在xml文件里面

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.sde.mapper.UserMapper"><!--根节点-->


    <select id="selectAll" resultType="com.sde.pojo.User">
        select * from user
    </select>
    
</mapper>

在service包下面编写UserService接口

在service包里面,在创建一个子包,impl包,并创建UserServiceImpl这个实现类

在controller包中编写 UserController

启动项目,在Apifox里面测试

看控制台的输出

MyBatisX:

是一款基于 IDEA 的快速开发Mybatis的插件,为效率而生。

安装:

点击 file然后点击settings 找到 plugs搜索要下载的插件,然后点击install。

因为我是之前就下载好的,所以页面提示让我更新。没有安装过的话,会先让安装。

安装好之后,就会发现我们的页面左侧就多了一个小鸟的标记。

安装好mybatisX插件之后,会发现我们在接口里面定义好方法,如果还没有写SQL语句,他会有一个红色的波浪线提示我们。

在红色波浪线处,右击就会出现这个页面。

点击 Generate statement

然后它就会在UserMapper.xml配置文件中生成一个标签。

点击这边的小鸟,可以跳转到绑定的类或者对应接口的方法。

相关推荐
黄昏_12 分钟前
在Springboot项目中实现将文件上传至阿里云 OSS
java·spring boot·后端·阿里云
2301_8112743133 分钟前
基于Vue+SpringBoot的考研学习分享平台设计与实现
vue.js·spring boot·考研
程序员阿龙33 分钟前
基于SpringBoot的京东绿谷旅游信息服务平台设计与实现(源码+定制+开发)
spring boot·毕业设计·旅游·京东绿谷智慧旅游管理平台·景点推荐与旅游预订系统设计·智能化旅游推荐与信息查询系统·高效旅游资源管理与用户服务平台
吾日三省吾码44 分钟前
JVM-类文件结构
后端
机器之心2 小时前
吴恩达出手,开源最新Python包,一个接口调用OpenAI等模型
人工智能·后端
A_Tai23333332 小时前
MyBatis多表映射
mybatis
big男孩2 小时前
vscode调试的launch.json配置字段
后端
树獭叔叔2 小时前
2K字速通MongoDB
数据库·后端·mongodb
九转成圣2 小时前
Spring Boot 同时接受文件和实体及 Postman 测试实战
spring boot·后端·postman
顽疲3 小时前
springboot vue 开源 会员收银系统 (10) 销单 销单后会员卡余额及库存优化
vue.js·spring boot·开源