MyBatis-特性及基本框架搭建(实现添加用户信息的功能)
MyBatis
MyBatis特性:
1) MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架
2) MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集
3) MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录
4) MyBatis 是一个 半自动的ORM(Object Relation Mapping)框架(sql语句需要写,jdbc中所有过程都需要自己写,而hibernate是全自动的ORM框架)
mybatis是对jdbc的封装,它让数据库底层操作变的透明。mybatis的操作都是围绕一个sqlSessionFactory实例展开的。mybatis通过配置文件关联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql语句映射。在每次与数据库交互时,通过sqlSessionFactory拿到一个sqlSession,再执行sql命令。
MyBatis的核心配置文件:
(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.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/ssm?
serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--引入映射文件-->
<mappers>
<mapper resource="mappers/UserMapper.xml"/>
</mappers>
</configuration>
创建mapper接口:
MyBatis中的mapper接口相当于以前的dao。但是区别在于,mapper仅仅是接口,不需要提供实现类。通过 MyBatis的功能创建代理实现类,当调用接口中的方法时直接对应SQL语句并执行。
(UserMapper.java)
package com.mybatis.mapper;
public interface UserMapper {
int insertUser(); //mapper接口与mapper映射的id保持一致
}
ORM(Object Relationship Mapping)对象关系映射
对象:Java的实体类对象
关系:关系型数据库
映射:二者之间的对应关系
(1)映射文件的命名规则:
表所对应的实体类的类名+Mapper.xml
例如:表t_user,映射的实体类为User,所对应的映射文件为UserMapper.xml
因此一个映射文件对应一个实体类,对应一张表的操作
MyBatis映射文件用于编写SQL,访问以及操作表中的数据
MyBatis映射文件存放的位置是src/main/resources/mappers目录下
(2) mapper接口和映射文件要保证两个一致:
1)mapper接口的全类名和映射文件的namespace一致;
2)mapper接口中的方法的方法名要和映射文件中的sql的id保持一致。
映射文件:
一个映射文件对应一个实体类,对应一张表的操作
MyBatis映射文件用于编写SQL,访问以及操作表中的数据
(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.mybatis.mapper.UserMapper">
<!--int insertUser();-->
<insert id="insertUser"> <!--方法名与id一致-->
insert into t_user values(null,'admin','123456',23,'男','12345@qq.com')
</insert>
</mapper>
在核心配置文件 (mybatis-config.xml)中引入mybatis的映射文件
<!--引入映射文件-->
<mappers>
<mapper resource="mappers/UserMapper.xml"/>
</mappers>
文件结构:
测试类:(MyBatisTest.java)
public class MyBatisTest {
@Test
public static void main(String[] args) throws IOException {
//获取核心配置文件的输入流
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//获取SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//获取sqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
//获取sql的会话对象sqlSession(是MyBatis提供的操作数据库的对象)
//SqlSession sqlSession = sqlSessionFactory.openSession(); //不会自动提交事务
SqlSession sqlSession = sqlSessionFactory.openSession(true);//会自动提交事务
/*(使用最多)
//获取UserMapper的代理实现类对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//调用mapper接口中的方法,实现添加用户信息的功能
int result = mapper.insertUser();
System.out.println("结果"+result);
*/
//提供SQL语句的唯一标识id找到sql并执行。唯一标识是 namespace.sqlId
int insert = sqlSession.insert("com.mybatis.mapper.UserMapper.insertUser");
System.out.println("结果"+insert);
//提交事务
//sqlSession.commit();
//关闭sqlSession
sqlSession.close();
}
}
SqlSession sqlSession = sqlSessionFactory.openSession(); //不会自动提交事务
若不提交事务( sqlSession.commit() ),显示插入成功,但是数据库中无数据。
SqlSession sqlSession = sqlSessionFactory.openSession(true);//会自动提交事务
- SqlSession:代表Java程序和数据库之间的会话。(HttpSession是Java程序和浏览器之间的
会话) - SqlSessionFactory:是“生产”SqlSession的“工厂”。
- 工厂模式:如果创建某一个对象,使用的过程基本固定,那么我们就可以把创建这个对象的
相关代码封装到一个“工厂类”中,以后都使用这个工厂类来“生产”我们需要的对象。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix