Mybatis快速入门:
1.mybatis的快速开发(基于maven):
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.0.8</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
1.1注意:再改完配置文件后需要重新加载依赖
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UgDeVS6r-1678723796119)(C:\Users\somes\AppData\Roaming\Typora\typora-user-images\image-20230310175059762.png)]
1.2XML(写在resource里面):
1.2.1 logback.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[%level] %blue(%d{HH:mm:ss.SSS}) %cyan([%thread]) %boldGreen(%logger{15}) - %msg %n</pattern>
</encoder>
</appender>
<logger name="com.itheima" level="DEBUG" additivity="false">
<appender-ref ref="Console"/>
</logger>
</configuration>
1.2.2 mybatis-config.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<!--连接信息-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///mybatis?usesSL=false&characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--加载映射文件-->
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>
1.2.3 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="test">
<select id="selectAll" resultType="com.test">
select * from tb_user;
</select>
</mapper>
1.2.4 MybatisDome.java:
package com.test;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class MybatisDome {
public static void main(String[] args) throws IOException {
//加载mybatis的配置文件,获取SqlSessionFactory
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//获取sqlSession对象,用它来执行对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行SQL
List<User> user = sqlSession.selectList("test.selectAll");
System.out.println(user);
//释放资源
sqlSession.close();
}
}
1.2.5 User.java:
public class User {
private int id;
private String username;
private String password;
private char gender;
private String addr;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public char getGender() {
return gender;
}
public void setGender(char gender) {
this.gender = gender;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", gender=" + gender +
", addr='" + addr + '\'' +
'}';
}
}
2 Mapper代理开发:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QDEqayZF-1678723796121)(C:\Users\somes\AppData\Roaming\Typora\typora-user-images\image-20230310141432657.png)]
这样的书写格式也出现了硬编码的问题,我们可以解决这个问题:
2.1.11、定义一个mapper接口,要求mapper文件和这个mapper接口在同一个目录下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kTkTkynz-1678723796121)(C:\Users\somes\AppData\Roaming\Typora\typora-user-images\image-20230310143443241.png)]
这样User Mapper接口和xml文件编译后就在同一个包下了
2.1.2:设置SQL映射文件的namespace属性为Mapper接口全限定名
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sI4lxUWW-1678723796122)(C:\Users\somes\AppData\Roaming\Typora\typora-user-images\image-20230310144719322.png)]
2.1.3:在Mapper接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CgO6CX4k-1678723796122)(C:\Users\somes\AppData\Roaming\Typora\typora-user-images\image-20230310152225676.png)]
2.2执行过程:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ns6nnxR8-1678723796123)(C:\Users\somes\AppData\Roaming\Typora\typora-user-images\image-20230310170752224.png)]
3、mybatis核心配置文件(在配置时需要遵守顺序):
3.1mybatis-config.xml:
顺序如下:
configuration(配置)
properties(属性)
settings(设置)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境配置)
environment(环境变量)
transactionManager(事务管理器)
dataSource(数据源)
databaseIdProvider(数据库厂商标识)
mappers(映射器)
3.1.1environment:
environments:配置数据库连接环境信息。可以配置多个envinonment,通过default属性切换不同的environment
3.1.2typeAliases:
typeAliases:可以取别名->resultType在取完别名之后可以直接使用相应实体类的名字(不用区分大小写)
修改后重新加载依赖
插件:MybatisX
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-15nI8tOp-1678723796123)(C:\Users\somes\AppData\Roaming\Typora\typora-user-images\image-20230313093303360.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DwyPWGex-1678723796124)(C:\Users\somes\AppData\Roaming\Typora\typora-user-images\image-20230313093337975.png)]
4完成增删改查:
4.1:按id查
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5XYnBU3j-1678723796124)(C:\Users\somes\AppData\Roaming\Typora\typora-user-images\image-20230313104629139.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tx8kRBTr-1678723796125)(C:\Users\somes\AppData\Roaming\Typora\typora-user-images\image-20230313104500412.png)]
4.2小结:
4.3:模糊查询:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HTj5KFni-1678723796125)(C:\Users\somes\AppData\Roaming\Typora\typora-user-images\image-20230313115133901.png)]
4.3.1:@Param的作用是用来和SQL语句中的参数值来进行一 一对应赋值
public List<Brand> selectCondition(@Param("status") int status,@Param("company_name") String company_name,@Param("brand_name") String brand_name);
4.4:小结
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8eVraFwm-1678723796125)(C:\Users\somes\AppData\Roaming\Typora\typora-user-images\image-20230313162522615.png)]
5、动态查询
5.1 :官网动态 SQL_MyBatis中文网
- if
- choose —类似于switch (when—类似于 , otherwise)
- trim (where, set)
- foreach
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5wXnsrUd-1678723796126)(C:\Users\somes\AppData\Roaming\Typora\typora-user-images\image-20230313170630762.png)]
6、添加数据:
在添加数据时Mybatis会默认的把事务关闭:可以在获取SqlSession对象时加 true
SqlSession sqlSession = sqlSessionFactory.openSession( true);这样可以不用使用sqlSession.commit();
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DptBhLGa-1678723796126)(C:\Users\somes\AppData\Roaming\Typora\typora-user-images\image-20230313174509257.png)]
7、修改数据:
7.1:修改整个对象的值
xml:
<update id="updata">
update tb_brand
set brand_name = #{brand_name},
company_name = #{company_name},
ordered = #{ordered},
description = #{description},
status = #{status} where id=#{id};
;
</update>
Mapper: 定义一个方法updata
7.2: 动态修改对象的值
和动态查询相似:加判断,但是会有一个问题就是当我们只想修改局部值时,会出现SQL语义错误。解决办法是加 set 标签
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DavFeZwV-1678723796127)(C:\Users\somes\AppData\Roaming\Typora\typora-user-images\image-20230313202019393.png)]
8、删除数据:
8.1:删除单个数据
xml:
<delete id="delectById">
delete from tb_brand where id = #{id};
</delete>
mapper:接口
ublic void delectById(int id);
8.2:删除多个数据
mapper接口
public void delectByIds(int[] id);
xml:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i72WaXrP-1678723796128)(C:\Users\somes\AppData\Roaming\Typora\typora-user-images\image-20230313223635730.png)]
collection:如果不使用 @Param(“ids”) 则需要使用 array 来获取数据
open 是在开始的位置进行拼接 close 是在结束的位置进行拼接 例如:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7rSzSIke-1678723796128)(C:\Users\somes\AppData\Roaming\Typora\typora-user-images\image-20230313225222292.png)]
9、参数传递:
类:ParamNameResolver进行数据封装
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iYjUZ04z-1678723796129)(C:\Users\somes\AppData\Roaming\Typora\typora-user-images\image-20230313231504524.png)]
![](C:\Users\somes\AppData\Roaming\Typora\typora-user-images\image-20230313230828390.png
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cghjtcqQ-1678723796129)(C:\Users\somes\AppData\Roaming\Typora\typora-user-images\image-20230313231518195.png)]
10、注解完成增删改查:
简单的SQL语句 :注解会比写XML的来的更快,更方便。使代码更加的简洁
复杂的SQL语句还是需要使用XML的映射方式进行SQL语句的编写,使得代码更加的简洁,可以统一配置
[外链图片转存中…(img-7rSzSIke-1678723796128)]
9、参数传递:
类:ParamNameResolver进行数据封装
[外链图片转存中…(img-iYjUZ04z-1678723796129)]
![](C:\Users\somes\AppData\Roaming\Typora\typora-user-images\image-20230313230828390.png
[外链图片转存中…(img-cghjtcqQ-1678723796129)]
10、注解完成增删改查:
简单的SQL语句 :注解会比写XML的来的更快,更方便。使代码更加的简洁
复杂的SQL语句还是需要使用XML的映射方式进行SQL语句的编写,使得代码更加的简洁,可以统一配置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7ywj5Tql-1678723796129)(C:\Users\somes\AppData\Roaming\Typora\typora-user-images\image-20230314000114868.png)]