MyBatis 框架的常用优化方法
优化 1:单独使用 MyBatis 时,可以封装一个用来获取 MyBatis中 Session 的工具类
(1) 工具类 MybatisUtil 将 Mybatis 框架中的 Session 对象的获取和关闭封装成一个类;
(2) UserDaoImpl 中,改为对 MybatisUtil 类的调用。
优化2:将连接字符串写入配置文件
(1) 阅读 database.properties 文件,并根据自己系统的信息进行修改;
(2) 修改 Mybatis 框架的主配置文件,代码如下;
<!-- 引入数据库配置文件 -->
<properties resource="database.properties"/>
<!-- 配置数据库连接环境:driver、url、username、password -->
<environments default="mysql">
<!-- 开始配置 mysql -->
<environment id="mysql">
<!--配置事务 -->
<transactionManager type="JDBC"></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>
(3) 测试程序
优化 3:去掉 dao 层实现类,简化项目结构
实体层包名:cn.java.pojo
持久层包名:cn.java.mapper
Mapper层接口名:UserMapper
Mybatis局部配置文件名:
一定要与它所支持的mapper层中的接口同名
如:UserMapper.xml要与UserMapper.java同名
可以将mapper层接口与Mybatis局部配置文件放在同一个包下:
mapper层接口中定义的方法名,一定要与Mybatis局部配置文件的SQL语句的id同名;
注意mapper层中,没有接口的实现类。
优化 4:使用@Before 和@After 注解,简化代码
在测试类中的某个方法前加@Before注解,可以使得在执行其他方法前,先执行该方法,如以下代码:
@Before
public void init(){
session= MybatisUtil.getSession();
//um 就是 Mapper 的实现类
um=session.getMapper(UserMapper.class);
}
在测试类中的某个方法前加@After注解,可以使得在执行其他方法后,再执行该方法,如以下代码:
@After
public void destory(){
//关闭 session 会话
MybatisUtil.closeSession(session);
}
优化 5:使用@Select 等注解,简化代码
优化 6:使用别名
在 Mybatis 的主配置文件中配置包的别名,简化代码。
e.g
在主配置文件中,加入以下代码,可以给实体类取别名,简化代码:
指定包名,直接给包下所有的实体类取别名,默认的实体类的别名就是类名(不区分小大写),如 User 实体类的别名可以是 User、user、USER。
<typeAliases>
<package name="cn.java.pojo"/>
</typeAliases>
优化7:使用包名关联 SQL 局部配置文件和主配置文件
在主配置文件中,加入以下代码,可以实现该包名下的所有 SQL 局部配置文件与主配置文件关联,简化代码;
<mappers>
<!--直接映射包的名字,那么这个包下面所有的 Mapper 配置文件全部关联!-->
<package name="cn.java.mapper"/>
</mappers>
Mybatis 的帮助文档:
https://mybatis.org/mybatis-3/zh/index.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗