mybaits入门
ibatis提供持久层框架包括Sql Maps(封装JDBC)和Data Access Object(dao数据访问对象)
特性/概念
1、MyBatis支持定制化SQL(SQL语句自己写,自己维护)、存储过程以及高级映射(自定义一对多)的优秀的持久层框架
2、避免几乎所有JDBC代码和手动设置参数以及获取结果集。
3、可以使用简单的XML*或者注解用于配置和原始映射(SQL语句可以写在xml中或者通过注解写在接口中,面向接口编程),将接口和Java的POJO(普通JAVA对象)映射乘数据库中的记录
4、是一个半自动的ORM(Object(实体对象) Relation(关系型数据库) Mapping(映射))对象关系映射框架
和其他对比
jdbc
1、SQL夹杂在Java代码中偶合度高,导致硬编码硬伤
2、维护不易且时机开发需求中SQL有变化,频繁修改情况多见
3、代码冗长,开发效率低
Hibernat/JPA
1、操作简便,开发效率高
2、程序中的长难复杂SQL需要绕过框架
3、内部自动生产的sql,不容易做特殊优化
4、基于全反射的全自动框架,大量字段的POJO进行部分映射比较困难
5、反射操作太多,数据库性能下降
Mybatis
1、轻量级,性能出色
2、SQL和JAVA编码分开,功能边界清晰。JAVA代码专注业务,SQL语句专注数据
3、开发效率少寻Hibernate,但是完全能接受。
创建工程
Maven工程
Mybatis核心配置文件
习惯上命名mybatis-config.xml,整合Spring之后,整个配置文件可以省略
核心配置文件主要用于配置连接数据库的环境以及MyBatis的全局配置信息
1)enviorments:配置多个连接数据库环境
-
default:默认使用的环境的ID
2)enviroment:配置某个具体的环境
-
id:表示连接数据库有的唯一标识,不能重复
3)transactionManager:设置事务管理方式
-
type:"JDBC/MANAGED"
-
JDBC:表示当前环境中,执行sql时,使用的是JDBC中原生的事务管理方式,事务的提交或回滚需要手动
-
MANAGED:表示被管理,例如被Spring
4)dataSource:配置数据源
-
type:"POOLED\UPOOLED\JNDI"
-
POOLED:表示使用数据库连接池缓存数据库连接
-
UNPOOLED:表示不适用数据库连接池
-
JNDI:表示使用上下文数据源
核心配置文件存放的位置:src/main/resources
配置连接数据库的环境 <environments default="development"> <environment id="development"> //这里我们使用JDBC作为事务管理器,测试的时候记得提交事务 <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments> 引入映射文件 <mappers> <mapper resource="mappers/UserMapper.xml" </mappers>
创建表
创建实体类POJO
保证字段名和属性名一致
com.atguigu.mybatis.pojo.User
public class User { private Integer id; private String name; private String password; private Integer age; private char sex; private String eamil; ..... }
创建mapper接口
MyBatis中的Mapper接口相当于以前的Dao,区别在于mapper仅仅是接口,不需要提供实现类
com.atguigu.mybatis.mapper.UserMapper(Interface)
public interface UserMapper { /** * 插入用户 * @return */ public int insertUser(); }
创建映射文件
相关概念:ORM对象关系映射
-
对象:JAVA实体类对象
-
关系:关系型数据库
-
映射:二者之间的关系
JAVA概念 | 数据库概念 |
---|---|
类 | 表 |
属性 | 字段/列 |
对象 | 记录/行 |
1、映射文件命名规则
-
表对应的实体类的类名+Mapper.xml
-
存放位置为src/main/resource/mappers
表t_user,映射实体类User,映射文件UserMapper.xml
2、面向接口编程
表——实体类——mapper接口——映射文件
-
映射文件的namespace和mapper全类名一致
-
映射文件中sql语句的id和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.atguigu.mybatis.mapper.UserMapper"> <insert id="insertUser" > insert into t_user values(null,"asd","123","12","m","123@123.com") </insert> </mapper>
3、测试功能
注意提交事务
public class MyBatisTest { @Test public static void main(String[] args) throws IOException { //加载核心配置文件 InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); //获取SqlSessionFactoryBuilder SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); //获取sqlSessionFactory SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream); //获取SqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); //获取mapper接口对象 UserMapper mapper = sqlSession.getMapper(UserMapper.class); //测试功能 int i = mapper.insertUser(); //提交事务 sqlSession.commit(); //输出受影响的行数 System.out.println(i); } }
4、功能增强
(1)是否自动提交事务:
//获取SqlSession默认不提交事务,参数列表true自动提交 SqlSession sqlSession = sqlSessionFactory.openSession(true);
(2)查看日志
a>pom加入log4j依赖
<!--日志--> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.14</version> </dependency>
b>建立log4j配置文件
日志的级别:
-
FATAL(致命)>ERROR(错误)>WARN(警告)>INFO(信息)>DEBUG(调试)
-
resource/固定名称log4j.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender"> <param name="Encoding" value="UTF-8" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n" /> </layout> </appender> <logger name="java.sql"> <level value="debug" /> </logger> <logger name="org.apache.ibatis"> <level value="info" /> </logger> <root> <level value="debug" /> <appender-ref ref="STDOUT" /> </root> </log4j:configuration>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南