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文件
<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类中测试
代码:
@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
#配置数据库连接信息
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配置文件中生成一个标签。
点击这边的小鸟,可以跳转到绑定的类或者对应接口的方法。