歡迎使用社群 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 協議》,轉載必須註明作者和本文連結