Spring Boot MyBatis 连接数据库配置示例
最近比较忙,没来得及抽时间把mybatis的集成发出来,其实mybatis官网在2015年11月底就已经发布了对springboot集成的release版本,示例代码:
前面对jpa和jdbc连接数据库做了说明,本文也是参考官方的代码做个总结。
先说个题外话,springboot默认使用 org.apache.tomcat.jdbc.pool.datasource
现在有个叫 hikaricp 的jdbc连接池组件,据说其性能比常用的 c3p0、tomcat、bone、vibur 这些要高很多。
我打算把工程中的datasource变更为hirakidatasource,做法很简单:
首先在application.properties配置文件中指定datasourcetype
spring.datasource.type=com.zaxxer.hikari.hikaridatasource
然后在pom中添加hikari的依赖
<dependency> <groupid>com.zaxxer</groupid> <artifactid>hikaricp</artifactid> <!-- 版本号可以不用指定,spring boot会选用合适的版本 --> </dependency>
言归正传,下面说在spring boot中配置mybatis。
关于在spring boot中集成mybatis,可以选用基于注解的方式,也可以选择xml文件配置的方式。通过对两者进行实际的使用,还是建议使用xml的方式(官方也建议使用xml)。
下面将介绍通过xml的方式来实现查询,其次会简单说一下注解方式,最后会附上分页插件(pagehelper)的集成。
一、通过xml配置文件方式
1、添加pom依赖
<dependency> <groupid>org.mybatis.spring.boot</groupid> <artifactid>mybatis-spring-boot-starter</artifactid> <!-- 请不要使用1.0.0版本,因为还不支持拦截器插件,1.0.1-snapshot 是博主写帖子时候的版本,大家使用最新版本即可 --> <version>1.0.1-snapshot</version> </dependency>
2、创建接口mapper(不是类)和对应的mapper.xml文件
定义相关方法,注意方法名称要和mapper.xml文件中的id一致,这样会自动对应上
studentmapper.java
package org.springboot.sample.mapper; import java.util.list; import org.springboot.sample.entity.student; /** * studentmapper,映射sql语句的接口,无逻辑实现 * * @author 单红宇(365384722) * @create 2016年1月20日 */ public interface studentmapper extends mymapper<student> { list<student> likename(string name); student getbyid(int id); string getnamebyid(int id); }
mymapper.java
package org.springboot.sample.config.mybatis; import tk.mybatis.mapper.common.mapper; import tk.mybatis.mapper.common.mysqlmapper; /** * 被继承的mapper,一般业务mapper继承它 * */ public interface mymapper<t> extends mapper<t>, mysqlmapper<t> { //todo //fixme 特别注意,该接口不能被扫描到,否则会出错 }
studentmapper.xml
<?xml version="1.0" encoding="utf-8"?> <!doctype mapper public "-//mybatis.org//dtd mapper 3.0//en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="org.springboot.sample.mapper.studentmapper"> <!-- type为实体类student,包名已经配置,可以直接写类名 --> <resultmap id="stumap" type="student"> <id property="id" column="id" /> <result property="name" column="name" /> <result property="sumscore" column="score_sum" /> <result property="avgscore" column="score_avg" /> <result property="age" column="age" /> </resultmap> <select id="getbyid" resultmap="stumap" resulttype="student"> select * from student where id = #{id} </select> <select id="likename" resultmap="stumap" parametertype="string" resulttype="list"> select * from student where name like concat('%',#{name},'%') </select> <select id="getnamebyid" resulttype="string"> select name from student where id = #{id} </select> </mapper>
3、实体类
package org.springboot.sample.entity; import java.io.serializable; /** * 学生实体 * * @author 单红宇(365384722) * @create 2016年1月12日 */ public class student implements serializable{ private static final long serialversionuid = 2120869894112984147l; private int id; private string name; private string sumscore; private string avgscore; private int age; // get set 方法省略 }
4、修改application.properties 配置文件
mybatis.mapper-locations=classpath*:org/springboot/sample/mapper/sql/mysql/*mapper.xml mybatis.type-aliases-package=org.springboot.sample.entity
5、在controller或service调用方法测试
@autowired private studentmapper stumapper; @requestmapping("/likename") public list<student> likename(@requestparam string name){ return stumapper.likename(name); }
二、使用注解方式
查看官方git上的代码使用注解方式,配置上很简单,使用上要对注解多做了解。至于xml和注解这两种哪种方法好,众口难调还是要看每个人吧。
1、启动类(我的)中添加@mapperscan注解
@springbootapplication @mapperscan("sample.mybatis.mapper") public class samplemybatisapplication implements commandlinerunner { @autowired private citymapper citymapper; public static void main(string[] args) { springapplication.run(samplemybatisapplication.class, args); } @override public void run(string... args) throws exception { system.out.println(this.citymapper.findbystate("ca")); } }
2、在接口上使用注解定义crud语句
package sample.mybatis.mapper; import org.apache.ibatis.annotations.param; import org.apache.ibatis.annotations.select; import sample.mybatis.domain.city; /** * @author eddú meléndez */ public interface citymapper { @select("select * from city where state = #{state}") city findbystate(@param("state") string state); }
其中city就是一个普通java类。
三、集成分页插件
这里与其说集成分页插件,不如说是介绍如何集成一个plugin。mybatis提供了拦截器接口,我们可以实现自己的拦截器,将其作为一个plugin装入到sqlsessionfactory中。
有位开发者写了一个分页插件,我觉得使用起来还可以,挺方便的。
项目地址: mybatis-pagehelper_jb51.rar
下面简单介绍下:
首先要说的是,spring在依赖注入bean的时候,会把所有实现mybatis中interceptor接口的所有类都注入到sqlsessionfactory中,作为plugin存在。既然如此,我们集成一个plugin便很简单了,只需要使用@bean创建pagehelper对象即可。
1、添加pom依赖
<dependency> <groupid>com.github.pagehelper</groupid> <artifactid>pagehelper</artifactid> <version>4.1.0</version> </dependency>
2、新增mybatisconfiguration.java
package org.springboot.sample.config; import java.util.properties; import org.slf4j.logger; import org.slf4j.loggerfactory; import org.springframework.context.annotation.bean; import org.springframework.context.annotation.configuration; import com.github.pagehelper.pagehelper; /** * mybatis 配置 * * @author 单红宇(365384722) * @create 2016年1月21日 */ @configuration public class mybatisconfiguration { private static final logger logger = loggerfactory.getlogger(mybatisconfiguration.class); @bean public pagehelper pagehelper() { logger.info("注册mybatis分页插件pagehelper"); pagehelper pagehelper = new pagehelper(); properties p = new properties(); p.setproperty("offsetaspagenum", "true"); p.setproperty("rowboundswithcount", "true"); p.setproperty("reasonable", "true"); pagehelper.setproperties(p); return pagehelper; } }
3、分页查询测试
@requestmapping("/likename") public list<student> likename(@requestparam string name){ pagehelper.startpage(1, 1); return stumapper.likename(name); }
更多参数使用方法,详见pagehelper说明文档。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: 浅谈PHP的数据库接口和技术
推荐阅读
-
Spring Boot MyBatis 连接数据库配置示例
-
Spring Boot JDBC 连接数据库示例
-
Spring Boot Mysql 数据库操作示例
-
Spring Boot 集成Mybatis实现主从(多数据源)分离方案示例
-
详解Spring Boot整合Mybatis实现 Druid多数据源配置
-
Spring Boot整合Mybatis并完成CRUD操作的实现示例
-
详解Spring Boot整合Mybatis实现 Druid多数据源配置
-
Spring Boot整合Mybatis并完成CRUD操作的实现示例
-
spring boot配置druid连接池的完整步骤
-
Spring Boot数据库链接池配置方法