Mybatis笔记
作者:互联网
Mybatis
是什么?
- 持久层的框架
如何使用
- 在maven上导入相关jar包
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.1</version>
<scope>test</scope>
</dependency>
- 编写相关xml的核心配置文件(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://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
</configuration>
- 编写mybatis工具类
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;
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
//获取SqlSession连接
public static SqlSession getSession(){
return sqlSessionFactory.openSession();
}
}
- 在核心配置的mybatis-config.xml文件中注册DAO层的接口
<mappers>
<mapper resource="com/kuang/dao/userMapper.xml"/>
</mappers>
- 编写实体类
- 编写DAO层的类的Mapper接口
public interface UserMapper {
List<User> selectUser();
}
- 编写Mapper接口的配置文件
<?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.kuang.dao.UserMapper">
<select id="selectUser" resultType="com.kuang.pojo.User">
select * from user
</select>
</mapper>
- 测试
public class MyTest {
@Test
public void selectUser() {
SqlSession session = MybatisUtils.getSession();
//方法一:
//List<User> users = session.selectList("com.kuang.mapper.UserMapper.selectUser");
//方法二:
UserMapper mapper = session.getMapper(UserMapper.class);
List<User> users = mapper.selectUser();
for (User user: users){
System.out.println(user);
}
session.close();
}
}
可能遇到的问题
- Maven的静态资源过滤导致Mapper的xml文件无法生成为target文件
解决办法 :在pom.xml文件添加以下代码
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
基础的CRUD操作(多练)
select操作
使用select标签,其中注意点就是关于参数的传递
参数的传递问题
方式一:通过注解进行传递
//通过密码和名字查询用户
User selectUserByNP(@Param("username") String username,@Param("pwd") String pwd);
/*
<select id="selectUserByNP" resultType="com.kuang.pojo.User">
select * from user where name = #{username} and pwd = #{pwd}
</select>
*/
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3ohhVqn7-1632833657545)(C:\Users\dell\AppData\Roaming\Typora\typora-user-images\image-20210928204552593.png)]
方式二:通过map进行参数的传递
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r5TNylic-1632833657550)(C:\Users\dell\AppData\Roaming\Typora\typora-user-images\image-20210928190603480.png)]
insert ,update,delete操作
注意事项:
- 所有的增删改操作都需要提交事务!
- 在标签中最好注明参数类型和返回值类型
配置文件
相关配置标签
configuration(配置) properties(属性) settings(设置) typeAliases(类型别名) typeHandlers(类型处理器) objectFactory(对象工厂) plugins(插件) environments(环境配置) environment(环境变量) transactionManager(事务管理器) dataSource(数据源) databaseIdProvider(数据库厂商标识) mappers(映射器) <!-- 注意元素节点的顺序!顺序不对会报错 -->
- environment元素
<environments default="development">
<environment id="development">
<transactionManager type="JDBC">
<property name="..." value="..."/>
</transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
其中有两个重要的子节点元素
1.transactionManager(事务管理器)
2.dataSourse(数据库源)
作用:配置连接对象
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nlLQu3Se-1632833657553)(C:\Users\dell\AppData\Roaming\Typora\typora-user-images\image-20210928192924757.png)]
- mapper元素
是什么? 就是映射器,映射接口文件
重点!!! 需要掌握四种引入方式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nKW5TBxo-1632833657559)(C:\Users\dell\AppData\Roaming\Typora\typora-user-images\image-20210928194135840.png)]
配置优化
1.使用properties元素导入相关连接信息
<configuration>
<!--导入properties文件-->
<properties resource="db.properties"/>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
</configuration>
2.使用别名来代替包的全路径
作用域和生命周期
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3lbIXqJf-1632833657560)(C:\Users\dell\AppData\Roaming\Typora\typora-user-images\image-20210928202318571.png)]
主要理解三个的各自存在的周期
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-53q8QPm0-1632833657562)(C:\Users\dell\AppData\Roaming\Typora\typora-user-images\image-20210928202402929.png)]
结果集映射ResultType
理解:顾名思义,就是将查询到的结果做一个新的映射,而不是使用原本的默认映射(HashMap)
目的是什么:能够解决从数据库查询到的数据列名和pojo的属性名不同的情况
分页功能
日志功能
动态SQl
tion>
2.使用别名来代替包的全路径
### 作用域和生命周期
[外链图片转存中...(img-3lbIXqJf-1632833657560)]
主要理解三个的各自存在的周期
[外链图片转存中...(img-53q8QPm0-1632833657562)]
###
### 结果集映射ResultType
理解:顾名思义,就是将查询到的结果做一个新的映射,而不是使用原本的默认映射(HashMap)
目的是什么:能够解决从数据库查询到的数据列名和pojo的属性名不同的情况
### 分页功能
### 日志功能
### 动态SQl
### 缓存(了解)
标签:xml,img,转存,笔记,user,Mybatis,外链,图片 来源: https://blog.csdn.net/qq_45639009/article/details/120537406