java mybatis框架配置详解

Java MyBatis框架配置详解

1. 简介

MyBatis是一个用Java编写的开源ORM(object relational mapping)框架。它通过XML或注解方式向数据库发送SQL语句,执行相应的操作,并将结果映射到Java对象中。

MyBatis具有以下优点:

  • 灵活性较高,可以使用纯SQL,减少了ORM框架带来的性能压力。
  • 可以进行批处理,进一步提高了性能。
  • 易于学习和使用,对于用过Hibernate、JPA等ORM框架的开发者来说,学习曲线较小。

2. 配置

2.1 添加依赖

在Maven项目中,我们需要在pom.xml中添加以下依赖:

<!-- MyBatis依赖 -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.1</version>
</dependency>

<!-- MyBatis-Spring依赖 -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>2.0.5</version>
</dependency>

<!-- Spring依赖 -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>5.1.5.RELEASE</version>
</dependency>

2.2 配置数据源

在Spring中,我们使用DataSource来连接数据库。可以使用DBCP、C3P0等常见数据源工具,也可以使用Spring自带的数据源-Druid

<!-- 数据源 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
    <property name="url" value="jdbc:mysql://localhost:3306/test?useSSL=false&amp;allowPublicKeyRetrieval=true&amp;serverTimezone=UTC"/>
    <property name="username" value="root"/>
    <property name="password" value="123456"/>
    <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
    <property name="initialSize" value="2"/>
    <property name="maxActive" value="10"/>
</bean>

2.3 配置SqlSession工厂

在MyBatis中,我们需要使用SqlSessionFactory来创建SqlSession。我们可以将两者结合在一起,使用MyBatis-Spring提供的SqlSessionFactoryBean

<!-- SqlSessionFactory配置 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="configLocation" value="classpath:mybatis-config.xml"/>
    <property name="mapperLocations" value="classpath:mapper/*.xml"/>
</bean>

configLocation属性指定了MyBatis的全局配置文件,mapperLocations属性指定了Mapper(即DAO)接口所在的包路径。

2.4 配置Mapper扫描器

我们可以使用MapperScannerConfigurer扫描Mapper所在的包,自动生成Mapper接口的实现类:

<!-- Mapper接口扫描 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.example.mapper"/>
</bean>

2.5 配置事务

在Spring中,我们使用@Transactional注解来开启事务。我们需要将MyBatis的事务管理交给Spring,我们需要一个DataSourceTransactionManager

<!-- 事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
</bean>

<!-- 开启事务 -->
<aop:config>
    <aop:pointcut id="mybatisService" expression="execution(* com.example.service..*(..))"/>
    <aop:advisor advice-ref="txAdvice" pointcut-ref="mybatisService"/>
</aop:config>

<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="*" propagation="REQUIRED" rollback-for="Exception"/>
    </tx:attributes>
</tx:advice>

2.6 配置日志

在MyBatis的开发过程中,日志非常重要,可以帮助我们查看SQL语句是否正确、性能是否足够。我们可以将MyBatis的日志输出到控制台,也可以使用Log4j等日志框架:

<!-- 日志输出 -->
<bean id="logFactory" class="org.apache.ibatis.logging.stdout.StdOutImpl"/>

<!-- MyBatis日志 -->
<settings>
    <setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>

2.7 配置注解

在MyBatis中,我们可以使用注解方式来执行SQL语句。为了开启注解功能,我们需要在MyBatis全局配置文件中添加以下内容:

<!-- 开启注解 -->
<settings>
    <setting name="mapUnderscoreToCamelCase" value="true"/>
    <setting name="cacheEnabled" value="true"/>
    <setting name="lazyLoadingEnabled" value="true"/>
    <setting name="aggressiveLazyLoading" value="true"/>
</settings>

<!-- 扫描Mapper接口 -->
<typeAliases>
    <package name="com.example.mapper"/>
</typeAliases>

<!-- 注解方式 -->
<mappers>
    <mapper class="org.mybatis.spring.annotation.MapperScannerConfigurer">
        <property name="basePackage" value="com.example.mapper"/>
    </mapper>
</mappers>

3. 示例

3.1 使用Mapper接口方式

在Mapper接口中定义SQL语句:

public interface UserMapper {

    @Select("SELECT * FROM user WHERE id=#{id}")
    User selectUserById(int id);

    @Insert("INSERT INTO user(username,password) VALUES(#{username}, #{password})")
    @Options(useGeneratedKeys=true, keyProperty="id", keyColumn="id")
    int insertUser(User user);

}

在Service中使用Mapper接口:

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public User getUserById(int id) {
        return userMapper.selectUserById(id);
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    public int addUser(User user) {
        return userMapper.insertUser(user);
    }

}

3.2 使用XML方式

在XML文件中定义SQL语句:

<mapper namespace="com.example.mapper.UserMapper">

    <select id="selectUserById" parameterType="int" resultType="com.example.model.User">
        SELECT * FROM user WHERE id=#{id}
    </select>

    <insert id="insertUser" parameterType="com.example.model.User" useGeneratedKeys="true" keyProperty="id">
        INSERT INTO user(username,password) VALUES(#{username}, #{password})
    </insert>

</mapper>

在Mapper接口中使用SQL语句:

public interface UserMapper {

    User selectUserById(int id);

    int insertUser(User user);

}

在Service中使用Mapper接口:

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public User getUserById(int id) {
        return userMapper.selectUserById(id);
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    public int addUser(User user) {
        return userMapper.insertUser(user);
    }

}

4. 总结

本文主要介绍了MyBatis的配置方式,包括数据源、SqlSession工厂、Mapper扫描器、事务、日志和注解。通过两个示例,分别介绍了使用Mapper接口方式和XML方式配置SQL语句。MyBatis作为ORM框架,能够使开发者快速地操作数据库,极大的提高了开发的效率。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java mybatis框架配置详解 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • 详解JAVA中获取文件MD5值的四种方法

    下面是“详解JAVA中获取文件MD5值的四种方法”的攻略: 1. 使用Java内置的MessageDigest类获取MD5值 Java语言提供了一个DigestMessage类,它可以将任意长度的数据转换成定长的数据,如将任意长度的文件转换成128位(16个字节)的MD5值。使用如下代码可以实现获取文件的MD5值: public static String …

    Java 2023年5月19日
    00
  • java webApp异步上传图片实现代码

    下面是详细的java webApp异步上传图片实现代码的攻略: 一、介绍 本文将详细讲解如何在Java Web应用程序中实现异步上传图片的功能。异步上传可以提高上传的效率并提升用户体验。本文中的示例代码使用了Spring MVC框架,使用了jQuery的异步文件上传插件。 二、向项目中添加所需的库和插件 首先,需要将所需的库和插件添加到项目中。这些库包含Sp…

    Java 2023年6月2日
    00
  • IntelliJ IDEA 安装 Grep Console插件 自定义控制台输出多颜色格式功能

    下面是详细的攻略介绍: 安装 Grep Console 插件 打开 IntelliJ IDEA 软件,点击上方菜单栏中的“File”菜单,然后选择左侧的“Settings”选项。 在“Settings”页面中,选择左侧的“Plugins”选项。 在右侧的搜索框中,输入“Grep Console”关键词,并点击“Install”按钮进行插件安装。 安装完成后,…

    Java 2023年5月26日
    00
  • spring设置拦截器代码实例

    下面我将为你详细讲解”Spring设置拦截器代码实例”的完整攻略,包括以下内容: 什么是拦截器 Spring中的拦截器 设置Spring拦截器的步骤 两个代码示例 1. 什么是拦截器 拦截器(Interceptor)是一种AOP(面向切面编程)思想的应用,它是用来处理请求的,类似于Servlet中的过滤器(Filter)。拦截器可以在一个请求时的preHan…

    Java 2023年5月19日
    00
  • 什么是Java诊断工具?

    Java诊断工具可用于检测、分析和调试Java应用程序的性能和瓶颈。它们被广泛用于Java开发和维护中,以发现问题并提高系统性能。下面是Java诊断工具的详细使用攻略,包括两个示例说明: 什么是Java诊断工具? Java诊断工具是一组开发工具,可用于调试和优化Java应用程序的性能。它们可用于收集各种数据和指标,并提供有关应用程序的详细性能信息。Java诊…

    Java 2023年5月11日
    00
  • 小程序实现带年月选取效果的日历

    下面是关于小程序实现带年月选取效果的日历的完整攻略: 一、实现思路 获取当前日期的年和月以及当月的天数; 使用数据渲染模板,并在相应的日期上添加样式; 实现滑动切换月份功能; 添加点击事件,实现从日历中选择日期并将该日期传递给父组件。 二、具体实现 下面我们将通过两个示例来说明具体实现步骤。 示例一 首先,我们需要在 wxml 文件中编写日历的结构,并通过 …

    Java 2023年5月23日
    00
  • ResourceBundle类在jsp中的国际化实现方法

    ResourceBundle类是Java提供用来访问资源文件(properties文件)的类。在JSP中,我们可以使用ResourceBundle类实现页面的国际化。下面是使用ResourceBundle类在JSP中实现国际化的完整攻略。 步骤一:准备资源文件 在项目的资源目录下,创建多个properties文件,针对不同语言(如中文、英文)分别命名。其中,…

    Java 2023年6月15日
    00
  • Nginx负载均衡以及动静分离的原理与配置

    Nginx是一个高性能的Web服务器和反向代理服务器,可以用于负载均衡和动静分离。本文将讲解Nginx负载均衡及动静分离的原理和配置方法,内容包括以下几个方面: 负载均衡原理及方法 动静分离原理及方法 Nginx配置示例 1. 负载均衡原理及方法 负载均衡主要用于分摊用户请求到多个服务器上,以提高吞吐量、降低延迟和避免单点故障。Nginx基于反向代理实现负载…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部