mybatis的基本使用

欢迎使用社区 Markdown 编辑器写文章!

mybatis 是一个半orm的持久层框架,他的优势是,可以在mapper中书写原生的sql语句,效果明显,开发者容易掌控sql的执行,可以通过动态sql的标签可以完成逻辑的sql的编写,sql的书写灵活,sql的管理可读性高;
mybatis支持注解的方式进行书写sql只需在mapper接口上贴上注解@Mapper,并在方法上贴上相应的crud注解在注解内部就可以书写sql;
@Select(“SELECT * FROM t_order_info WHERE order_no=#{orderNo}”)

一. 配置

xml方式 :
特别注意mapper文件的路径和mapper接口的路径要保持一致,在spring或者Springboot也一样,如果不一样需要指定mapper的位置,这个可以再配置文件中进行配置

配置文件大致如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">

    <!--引入db.properties文件-->
    <context:property-placeholder location="classpath:db.properties"/>
    <!--配置数据库连接池-->
    <bean class="com.alibaba.druid.pool.DruidDataSource" id="dataSource" init-method="init" destroy-method="clone">
        <property name="driverClassName" value="${jdbc.driverClassName}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>
    <!--配置sqlSessionFactory-->
    <bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactory">
        <property name="dataSource" ref="dataSource"/>
        <property name="configLocation" value="classpath:mybatis-config.xml"/>

    </bean>
    <!--配置mapper代理对象批量创建-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer" id="mapperScannerConfigurer">
        <property name="basePackage" value="cn.wolfcode.ssm.mapper"/>

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

    <context:component-scan base-package="cn.wolfcode.ssm"/>
    <!--事务管理 tx 注解解析器-->
    <tx:annotation-driven/>

</beans>

db.properties:

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/crm
jdbc.username=root
jdbc.password=root

上面是spring项目中集成mybatis的配置,如果是Springboot的化配置如下

#修改端口为80
server.port=80
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql:///crmtest?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=root
#配置别名
mybatis.type-aliases-package=cn.wo.kkk.domain

使用springboot最好使用启动包的方式,而不是原生的依赖

     <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
     </dependency>
     <dependency>
          <groupId>org.mybatis.spring.boot</groupId>
          <artifactId>mybatis-spring-boot-starter</artifactId>
     </dependency>

注解方式:
配置文件–该配置文件格式为yml格式

spring:

  datasource:

    url: jdbc:mysql://localhost:3306/wolfcode_goods?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8

    driverClassName: com.mysql.jdbc.Driver

    type: com.alibaba.druid.pool.DruidDataSource

    username: root

    password: root

    filters: stat

    maxActive: 1000

    initialSize: 100

    maxWait: 60000

    minIdle: 500

    timeBetweenEvictionRunsMillis: 60000

    minEvictableIdleTimeMillis: 300000

    testOnBorrow: false

    testOnReturn: false

    testWhileIdle: true

    poolPreparedStatements: true

    maxOpenPreparedStatements: 20

    validationQuery: select 'x'

 mybatis:

  configuration:

    default-fetch-size: 100

    default-statement-timeout: 3000

    map-underscore-to-camel-case: true

注解分为两种:如果是简单的sql 使用基本的注解@Select @insert @update @delete
一种是 @SelectProvider 后面多加了Provider ;
下面简单介绍两者的不同,直接给大家看看例子

以查询为例查询gooid等于我们所传参数的的商品数据
@Select("SELECT * FROM t_goods where id=#{goodId}")
Good getByGoodId(@Param("goodId") Long goodId);
如果我们需要查询的条件没有那么简单需要进行动态的拼接那么上面的方式实现会很麻烦但是下面的方式会简单很多
  @SelectProvider(type = GoodFind.class, method = "queryBygoodIds")
    List<Good> queryBygoodIds(@Param("ids") ArrayList<Long> ids);

我们可以通过类中的方法将参数拼接好直接拿来使用就可以了,说到这里大家也看的出来type的值就是类,method就是对应的方法

public class GoodFind {
    public String queryBygoodIds(@Param("ids") ArrayList<Long> ids) {
        //SELECT * FROM t_goods where id in(1,2)
  StringBuilder sql = new StringBuilder("SELECT * FROM t_goods where id in(");
 for (int i = 0; i < ids.size(); i++) {
            if (i != 0) {
                sql.append(",");
  }
            sql.append(ids.get(i));

  }
        sql.append(")");
 return sql.toString();
  }
}

这样看是不是一眼就明白了,简单说当的sql需要写成动态sql那么使用加Provider的注解方式;

初次分享,还望大家有发现错误的地方多多指正谢谢

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!