MyBatis基础
MyBatis是一款非常优秀的持久层框架,用于简化JDBC的开发
准备工作:
1,创建sprong boot工程,引入mybatis相关依赖2,准备数据库表User,实体类User3, 配置MyBatis(在application.properties中数据库连接信息)4,编写Mybatis程序:编写MyBatis的持久层接口,定义SQL(注解/XML)
创建spring boot工程,并且引入相关的依赖。
1,在自己的工程下右击,然后点击new,选择module。
选择:spring Initializr 右边的配置根据自己情况选择。
选择spring boot的版本和要添加的依赖,最后点击创建。
查看pom文件
<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
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
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {private Integer id;private String username;private String password;private String name;private Integer age;
}
3,在application.properties配置文件中添加连接数据库的配置。
#配置数据库连接信息
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接口的代码:
@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类中测试
代码:
@Autowiredprivate 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
#配置数据库连接信息
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数据库连接池。
先引入依赖:
<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.11</version></dependency>
在application.propertise 配置文件里面配置
配置的代码信息:
#配置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 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 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配置文件中生成一个标签。
点击这边的小鸟,可以跳转到绑定的类或者对应接口的方法。