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 协议》,转载必须注明作者和本文链接