spring boot整合mybatis
我这里使用maven创建项目,所以我的jar都是通过maven导入。
先添加mybatis的maven坐标
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
然后创建mybatis的spring配置xml
通过mybatis链接数据库,第一步是要配置datasource。
DataSource类是在javax.sql包下的一个接口,我们可以看看这个类的实现类有那些(后面我在讲解如何接入c3p0链接池,这里我先简单使用一个apache提供的一个实现类)
实现类有很多,这里我先采用apache提供的一个实现类
然后我们在mybatis的配置文件中将这个类进行注入
<bean class="org.apache.tomcat.jdbc.pool.DataSource" id="dataSource">
</bean>
这样就注入了,然后配置数据库链接的属性,比如数据库的链接、用户名、密码等信息
在配置链接信息时,我们需要根据不同的数据库导入不同的jar,比如我这里要链接mysql,就需要导入mysql的jar。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
导入了相应的数据库工具jar后可以对上面的datasource进行一个配置参数
在看配置参数时,我们可以先简单看下apache的datasource实现类
他继承了datasourceproxy,而这个类里面有很多的set方法,这些方法也就说明可以对数据的链接设置很多的属性
我们初涉的话只需要设置上图我所圈的这些参数,DriverClassName是数据库驱动类的类名(包括包名),password是数据库链接的密码,url是数据库链接的url,username是数据库链接的用户
然后设置set方法对应的是配置文件的property标签,如下:
<bean class="org.apache.tomcat.jdbc.pool.DataSource" id="dataSource">
<property name="username" value="root"/>
<property name="password" value="123456"/>
<property name="url" value="${jdbc.url}"/>
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
</bean>
其中url参数的值我是用${jdbc.url}这是spring获取properits配置文件中的值,${}这个符号代表获取properits值,中间的内容是properits配置文件中参数的key
然后我们driverClassName的值是com.mysql.jdbc.Driver这个是指com.mysql.jdbc包下的Driver类,这个类是mysql提供的一个驱动类,是在mysql的jar包内的
到这里我们的dataSource就简单配置完成了(数据库链接池是一样的配置方式,后面在说)
注入完datasource之后,我们开始对spring接入mybatis,在接入之前先看看官网http://www.mybatis.org/spring/zh/getting-started.html
根据官网,我们需要注入sqlSessionFactoryBean,其中可以设置的属性如下
其中我们需要设置的是datasource(数据库链接)和mapperlocations(mapper的xml配置路径),如下代码
<bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactory">
<property name="dataSource" ref="dataSource"/>
<property name="mapperLocations" value="classpath:mapper/*.xml"/>
</bean>
我指定mapper的xml路径是资源路径下面mapper文件夹下的所有mapper
然后我们需要将配置文件引入到springboot中,可以通过ImportResource指定注入spring的配置文件
该注解可以配置在configuration注解的类上或者是springboot的启动类上
@ImportResource("classpath:mybatis.xml")
之后配置mybatis的mapper;先定义mapper接口再配置xml,可以这么理解,mapper的接口是提供数据库相关表操作的方法,mapper的xml是该接口方法的实现。
我简单写个TestMapper接口,定义一个test方法
@Mapper
public interface TestMapper {
int test();
}
需要通过Mapper注解,因为这个接口没有实现类,所以需要加上Mapper注解。这样就完成了Mapper接口的定义
接下来就是mapper的xml实现
mapper.xml的dtd约束是
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
然后开始书写mapper内容,首先最外层是由mapper节点包裹,mapper节点有个nameSpace熟悉,是指定它所对应的java接口
<mapper namespace="com.lkl.test.mapper.TestMapper">
</mapper>
然后mapper节点下可以有很多不同的节点,这里我就不细说了,我们就简单的实现查询,使用select节点
select节点有个id属性,对应的是接口中需要实现的方法名,还有一个resultType属性,这是指返回的类型是什么(如果返回的是map或者是对象,可以使用resultMap属性)
然后节点内容是需要查询的sql语句
<select id="test" resultType="java.lang.Integer">
select 1 from dual
</select>
我这里简单的查询一个数字。
这样就实现了TestMapper接口中的test方法。
然后就是service、事物这些,我这里就暂时不讲这么多,先简单测下mapper是否可用。
我们写个controller,然后直接注入mapper,调用方法进行测试
@Controller
@RequestMapping("test")
public class TestController {
@Autowired
TestMapper testMapper;
@RequestMapping("mapper")
@ResponseBody
public String testMapper(){
return "测试testMapper的test查询语句“select 1 from dual”返回结果为:"+testMapper.test();
}
}
然后我们在启动类上面加上@ComponentScan注解,将controller扫描注入进来即可。
运行看效果:
=======================================c3p0链接池配置======================================
链接池的配置和上文配置的org.apache.tomcat.jdbc.pool.DataSource链接写法是一样的
连接池的好处是他帮你管理好了数据库的链接,然后我们可以设置各种参数来对数据库的链接进行优化
导入c3p0的jar包
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version> RELEASE</version>
</dependency>
然后继续看javax.sql.DataSource的实现类有哪些
有很多的实现类其中也有部分的抽象类,我们可以注入写好的类就可以了,然后写了这么多的实现类,他们之间功能是不同的,可以自行百度有什么不同,我这里就用ComboPooledDataSource
代码如下:
<bean class="com.mchange.v2.c3p0.ComboPooledDataSource" id="dataSource">
<property name="user" value="root"/>
<property name="password" value="123456"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
</bean>
和上述的配置都差不多,只是property节点的name略有不同,然后他除了设置这些基本的链接参数外,还可以设置很多的参数
他继承的AbstractComboPooledDataSource这个类里面定义了可以设置的参数有很多
可以去看他的TO_STRING_IGNORE_PROPS这个集合。这里可以设置初始链接池的链接数量,最大链接数、最小链接数等
<bean class="com.mchange.v2.c3p0.ComboPooledDataSource" id="dataSource">
<property name="user" value="root"/>
<property name="password" value="123456"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<!--======================配置链接池的属性====================-->
<property name="initialPoolSize" value="1"/>
<property name="maxPoolSize" value="5" />
<property name="minPoolSize" value="1"/>
</bean>