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中Apache BeanUtils和Spring BeanUtils的用法

    浅析Java中Apache BeanUtils和Spring BeanUtils的用法 在Java中,BeanUtils是常用的一个实用工具类库,提供了对JavaBean属性的快速读写、类型转换等操作,而在Spring框架中,也有BeanUtils提供了一些符合Spring容器特性的扩展功能,下面将会对Apache BeanUtils和Spring Bean…

    Java 2023年5月19日
    00
  • SpringBoot设置动态定时任务的方法详解

    Spring Boot设置动态定时任务的方法详解 在Spring Boot中,我们可以使用Spring Task来实现定时任务。本文将详细讲解如何使用Spring Task设置动态定时任务,并提供两个示例。 1. 动态定时任务的概念 动态定时任务是指可以在运行时动态添加、修改和删除的定时任务。相比于静态定时任务,动态定时任务更加灵活和可扩展。 2. 动态定时…

    Java 2023年5月15日
    00
  • request.getParameter()取值为null的解决方法

    当使用request.getParameter()方法获取HTTP请求参数时,有时候会遇到值为null的情况。这可能是由于以下原因导致的: 没有传递对应参数的值 参数值为空字符串 “” 参数名不存在 针对这种情况,一些解决方法如下: 1. 使用默认值 可以使用Java8引入的Optional类型和orElse方法来设置默认值。示例代码如下: String u…

    Java 2023年6月15日
    00
  • jsp有两个按钮来控制Timer的开始和结束方法

    首先,我们需要明确以下几点: JSP是Java Web开发中的一种技术,可以用来生成动态网页; Timer类是Java中的一个计时器类,可以用来定时执行某些操作。 有了以上的基础知识,我们就可以来讲解如何使用JSP和Timer来实现在网页上控制定时器的开始和结束方法了。 第一步,我们需要在JSP页面中创建两个按钮,一个用来启动计时器,一个用来停止计时器。可以…

    Java 2023年6月15日
    00
  • java如何判断一个对象是否为空对象

    判断一个Java对象是否为空对象,通常可以通过以下几种方式进行: 1. 使用 == 进行判断 我们可以使用 Java 中的双等号 “==” 运算符来判断一个对象是否为 null。如果对象为 null,则其值为 null,否则就是一个有效对象。 下面是一个示例代码: Object object = null; if (object == null) { Sys…

    Java 2023年5月26日
    00
  • Java中如何使用Response重定向

    在JavaWeb中,可以使用Response对象的sendRedirect()方法进行重定向操作。该方法可以让服务器重定向到别的页面,实现页面跳转的功能。 下面是在Java中如何使用Response重定向的完整攻略: 1. 导入相关的包和类库 在使用重定向功能之前,需要先导入一些需要的包和类库。 import java.io.IOException; imp…

    Java 2023年5月26日
    00
  • Java Spring动态生成Mysql存储过程详解

    Java Spring动态生成Mysql存储过程详解 简介 存储过程是一种被保存在数据库中的预编译程序,它是通过一组SQL语句完成特定功能的。通常情况下,存储过程可以优化查询的性能,提高查询的复用率和安全性。 Java Spring 使用JdbcTemplate 去调用存储过程,有时我们需要动态生成存储过程来满足某些特殊的需求,本文将介绍如何使用Java S…

    Java 2023年5月20日
    00
  • java springmvc乱码解决归纳整理详解

    Java Spring MVC 是一种非常流行的 Java Web 开发框架。它提供了许多特性和强大的功能,但是在处理中文文本等需要编码转换的场景中,往往会遇到乱码问题。本篇攻略将详细讲解如何解决 Java Spring MVC 中的乱码问题。 1. 请求编码解决 一般情况下,在处理 HTTP 请求时,浏览器会设置请求的编码格式。但是如果请求头中没有指定编码…

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