java mybatis框架配置详解

yizhihongxing

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 时间区间的字符串合法性验证

    下面是“JAVA 时间区间的字符串合法性验证”的完整攻略: 背景 在Java中,时间区间通常由一个开始时间和一个结束时间组成,比如“2019-01-01 00:00:00”到“2019-01-01 23:59:59”这样的字符串格式。在实际开发中,我们需要对时间区间的字符串格式进行合法性验证,保证输入数据的有效性。本文将介绍一种简单有效的JAVA时间区间字符…

    Java 2023年5月20日
    00
  • JAVA日期处理类详解

    JAVA日期处理类详解 在JAVA编程中,日期处理是非常重要的一部分内容。JAVA内置了许多日期处理类,下面就来详细地介绍一下。 java.util.Date类 java.util.Date类是JAVA中最早的关于日期时间处理的类。在JAVA8之前,它被广泛使用。但是由于它的一些不足之处,比如日期时间格式化问题,API设计不具有可读性等等,所以在JAVA8之…

    Java 2023年5月20日
    00
  • JSP 自定义标签第3/3页

    我来详细讲解一下 “JSP 自定义标签第3/3页” 的完整攻略。 什么是 JSP 自定义标签 JSP 自定义标签,指的是用户可以自定义自己的标签,在 JSP 页面上使用,达到简化 JSP 页面代码,增加可读性的目的。JSP 自定义标签可以分为两种类型: 动态内容标签:在标签体中执行动态内容,并输出结果。 静态内容标签:输出预定的静态内容,不需要执行动态逻辑。…

    Java 2023年6月15日
    00
  • SpringCloud Feign使用ApacheHttpClient代替默认client方式

    请根据以下步骤进行操作。 1. 添加依赖 在pom.xml文件的dependencies标签中添加以下依赖: <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign&…

    Java 2023年5月19日
    00
  • SpringBoot详解整合Spring Boot Admin实现监控功能

    SpringBoot详解整合Spring Boot Admin实现监控功能 简介 Spring Boot Admin是用于管理和监控一个或多个Spring Boot应用程序的应用程序。相比于spring-boot-actuator,默认Web UI很友好。此外,它还提供了以下功能: 显示应用程序的元数据(例如:Git提交信息,构建时间等) 显示健康检查状态以…

    Java 2023年5月19日
    00
  • JAVA开发常用类库UUID、Optional、ThreadLocal、TimerTask、Base64使用方法与实例详解

    JAVA开发常用类库攻略 本文将介绍JAVA开发中常用的类库UUID、Optional、ThreadLocal、TimerTask、Base64的用法和实例。希望能对大家在实际开发中遇到的问题有所帮助。 UUID UUID全称为Universally Unique Identifier,在Java中为java.util.UUID类,主要用于生成唯一标识符。 …

    Java 2023年5月18日
    00
  • Lombok中关于@Data的使用解析

    下面就来详细讲解一下”Lombok中关于@Data的使用解析”的完整攻略。 什么是Lombok? Lombok是一种Java库,它通过注解的方式来简化Java代码的编写。使用Lombok库可以避免写很多样板代码,减少代码的臃肿程度,同时提高代码的可读性和可维护性。在使用Lombok之前,需要先在项目的pom.xml中加入lombok的依赖: <depe…

    Java 2023年5月20日
    00
  • Java实现的微信公众号获取微信用户信息示例

    Java实现的微信公众号获取微信用户信息示例的完整攻略包括以下步骤: 1. 注册微信公众号 首先需要在微信公众平台注册一个账号,然后将其认证为企业号或服务号,才能使用微信公众平台提供的API进行开发。 2. 配置公众号信息 在注册并认证好微信公众号之后,需要对其进行一些配置。首先,需要在“开发者中心”菜单中配置服务器URL和Token。将URL和Token填…

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