Mybatis(二 【优化】)

 在mybatis配置文件中各个标签要按照指定顺序编写,如果顺序规范则会报上述错误

顺序为上图中报错信息中的顺序

优化一:重复书写resultType返回值类型的全路径,可以给该全路径起别名,来减少类完全限定名的多余部分

<typeAliases>
        <!--给指定的单独的一个类起别名-->
        <typeAlias type="com.sw.entity.Flower" alias="flower"></typeAlias>
        <!--此时包下的所有类的别名就是其类的名称-->
        <package name="com.sw.entity"/>
</typeAliases>

优化二:使用数据库配置文件,比如mysql.properties

m_driver=com.mysql.cj.jdbc.Driver
m_url=jdbc:mysql://localhost:3306/flower?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
m_username=root
m_password=root
<!--读取属性文件,resource采用相对路径-->
    <properties resource="jdbc.properties"/>



<!--数据库连接配置-->
<!--底层使用数据库连接池-->
            <dataSource type="POOLED">
                <property name="driver" value="${m_driver}"/>
                <property name="url" value="${m_url}"/>
                <property name="username" value="${m_username}"/>
                <property name="password" value="${m_password}"/>
            </dataSource>

优化三:使用log4j输出日志文件

使用日志文件,可以通过不同级别的错误信息进行排查。

log4j的五种级别:①FATAL 严重错误,② ERROR 错误 ③WARN 警告 ④INFO 普通信息⑤DEBUG调试信息

① 使用前,要先导入log4j的jar包

②在src下创建【文件名必须是,这样就会自动在src下寻找该配置文件,不需要加载】log4j.properties填写以下内容【基本上就是固定写法】


<!--输出日志时,会显示错误级别及以上级别的信息-->
<!--为了防止输出很多冗余,与项目无关的日志信息,可以将全局的错误级别调高-->
<!--写上console,表示在控制台输出,logfile表示在文件中输出,可以只写一个表示只在某个地方输出-->
log4j.rootCategory=error, CONSOLE,LOGFILE

<!--局部配置,如果想要输出某个mapper的错误信息,就要相应的降低其错误级别-->
<!--因为如果不进行局部配置,就会按照全局配置的错误级别进行错误信息的日志输出-->
<!--设置某些mapper输出的错误级别-->
<!--格式如下:log4j.logger.[mapper.xml文件中的namespace]=错误级别-->

log4j.logger.com.sw.mapper.FlowerMapper1=debug
log4j.logger.com.sw.mapper.FlowerMapper2=debug
<!--控制台的输出配置-->
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender <!--导入一个包-->
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout<!--引入一个文件-->
log4j.appender.CONSOLE.layout.ConversionPattern=- %m%n<!--指定打印格式-->
<!--日志文件的输出配置-->
# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender<!--导入一个包-->
log4j.appender.LOGFILE.File=d:/axis.log<!--日志文件的位置-->
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n<!--指定打印格式-->

冗余日志信息

 

③在mybatis.xml中开启日志

<!--指定mybatis中的日志类型-->
    <settings>
        <setting name="logImpl" value="LOG4J"/>
    </settings>

三个优化的mybatis.xml 完整配置信息

<configuration>
    <!--读取属性文件-->
    <properties resource="jdbc.properties"/>
    <!--指定mybatis中的日志类型-->
    <settings>
        <setting name="logImpl" value="LOG4J"/>
    </settings>
    <!--给实体类配置起别名-->
    <typeAliases>
        <!--给指定的单独的一个类起别名-->
<!--        <typeAlias type="com.sw.entity.Flower" alias="flower"></typeAlias>-->
        <!--此时包下的所有类的别名就是其类的名称-->
        <package name="com.sw.entity"/>
    </typeAliases>

    <environments default="mysql">
        <!--Mysql数据库连接-->
        <environment id="mysql">
            <!-- MyBatis事务管理  -->
            <transactionManager type="JDBC"></transactionManager>
            <!--底层使用数据库连接池-->
            <dataSource type="POOLED">
                <property name="driver" value="${m_driver}"/>
                <property name="url" value="${m_url}"/>
                <property name="username" value="${m_username}"/>
                <property name="password" value="${m_password}"/>
            </dataSource>
        </environment>
        <!--ORCL数据库连接-->
        <environment id="oracal">
            <transactionManager type=""></transactionManager>
            <dataSource type=""></dataSource>
        </environment>
    </environments>

    <!--进行Mapper文件的扫描-->
    <mappers>
        <!--resource写的是XML文件所在的目录-->
        <mapper resource="com/sw/mapper/FlowerMapper.xml"></mapper>
    </mappers>
</configuration>

log4j写法再简化:

如果每创建一个Mapper.xml文件就在log4j中添加一行配置信息,有些繁琐


log4j.logger.com.sw.mapper.FlowerMapper1=debug
log4j.logger.com.sw.mapper.FlowerMapper2=debug

这些xml的namespace统一是以com.sw.mapper开头,所以可以简写为

log4j.logger.com.sw.mapper=debug
<!--等价于log4j.logger.com.sw.mapper.*=debug
    表示所有以com.sw.mapper为开头的namespace
因为mapper.xml文件遵从的namespace命名规则是按照包路径来命名的,所以按这种写法[简写]看起来这个好像
凡是在com.sw.mapper包下的所有mapper.xml文件都会生效,但是要注意这个其实是按照其namespace来寻找符合条件的mapper.xml文件,而不是包
-->

举例:如果在com.sw.mapper包下有一个mapper.xml文件的namespace是a.b.XXX,那么这个文件仍然不会生效

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MyBatis 是一个流行的 Java 持久化框架,对于性能优化,以下是一些建议: 1. 使用合适的缓存机制:MyBatis 提供了一级缓存和级缓存,默认情况下开启了一级缓存。你可以根据具体的业务需求来决定是否启用级缓存,并且可以配置合适的缓存策略,如使用 Redis 或 Ehcache。 2. 批量操作:对于批量插入、更新或删除操作,可以使用 MyBatis 提供的 `insertList`、`updateList`、`deleteList` 等方法来提高性能,减少与数据库的交互次数。 3. 合理设计 SQL 语句:尽量避免使用 `select *`,只选择需要的字段,以减少数据库传输的数据量。另外,合理设计 SQL 查询语句,避免多表关联查询和复杂的子查询,可以考虑使用分页查询等方式来优化查询性能。 4. 使用延迟加载:MyBatis 支持延迟加载,可以在需要时才加载关联对象,避免一次性加载大量数据。 5. 缓存预热:在系统启动时,可以通过预先查询常用数据并放入缓存中,以提高后续查询的性能。 6. 避免 N+1 查询问题:当一对多关联查询时,避免在循环中执行多次查询,可以使用 MyBatis 的关联查询功能或者使用批量查询方式来解决。 7. 合理配置连接池:MyBatis 使用的数据库连接池对性能也有一定影响,可以根据具体的需求配置合适的连接池参数,如最大连接数、最小空闲连接数等。 8. SQL 优化:使用 MyBatis 提供的 SQL 日志功能,在开发和调试阶段查看生成的 SQL 语句,检查是否存在慢查询、冗余查询等问题,根据需要进行优化。 这些是一些常见的 MyBatis 性能优化建议,根据具体的应用场景和需求,可能会有其他针对性的优化策略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Meikesibondwell

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值