配置

POM文件

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.6.RELEASE</version>
<relativePath />
</parent> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties> <dependencies>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>RELEASE</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>RELEASE</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

同一环境1.5.7.RELEASE版本的Spring-boot会抛Caused by: java.lang.IllegalStateException: Cannot load driver class: com.mysql.jdbc.Driver异常,1.5.6.RELEASE以及1.5.5.RELEASE版本亲测没问题


application.properties配置文件

#数据库
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test
spring.datasource.username=root
spring.datasource.password=741852
spring.datasource.driver-class-name=com.mysql.jdbc.Driver #mybatis&&通用Mapper
mybatis.type-aliases-package=com.karle.bean
mybatis.mapper-locations=classpath:mapper/*.xml
mapper.mappers=com.karle.tk.TkMapper
mapper.identity=MYSQL #分页插件
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.params=count=countSql #log
logging.file=logger.log
logging.level.*=debug

映射实体(省略字段get、set)

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table; @Table(name = "user")
public class User { @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id; /**
* 名称
*/
@Column(name = "name")
private String name; /**
* 年龄
*/
@Column(name = "age")
private Integer age; /**
* 身份编号
*/
@Column(name = "card_no")
private Integer cardNo; /**
* 生日
*/
@Column(name = "birthday")
private Date birthday;
}

本地通用Mapper接口(继承通用Mapper接口)

import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.MySqlMapper; public interface TkMapper<T> extends Mapper<T>, MySqlMapper<T> { }

Mapper接口:基本的增、删、改、查方法 
MySqlMapper:针对MySQL的额外补充接口,支持批量插入

业务接口(继承“本地通用Mapper接口”)

import org.apache.ibatis.annotations.Param;

import com.karle.bean.User;
import com.karle.tk.TkMapper; public interface UserMapper extends TkMapper<User> { public User selectByCardNo(@Param("cardNo") int cardNo); }

Spring-boot启动类,@MapperScan仅扫描业务接口包,不能扫描本地通用Mapper接口包,否则报java.lang.ClassCastException: sun.reflect.generics.reflectiveObjects.TypeVariableImpl cannot be cast to java.lang.Class异常

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication
@MapperScan(basePackages = { "com.karle.mapper" })
public class SpringBootMyBatisApplication { public static void main(String[] args) {
SpringApplication.run(SpringBootMyBatisApplication.class, args);
} }

通过使用@MapperScan可以指定要扫描的Mapper类的包的路径,比如:

  1. @SpringBootApplication
  2. @MapperScan("com.kfit.*.mapper")
  3. public class App {
  4. public static void main(String[] args) {
  5. SpringApplication.run(App.class, args);
  6. }
  7. }

或者:

  1. @SpringBootApplication
  2. @MapperScan("com.kfit.mapper")
  3. public class App {
  4. public static void main(String[] args) {
  5. SpringApplication.run(App.class, args);
  6. }
  7. }

可以根据包的结构指定不同的表达式。

使用@MapperScan注解多个包

可以使用如下的方式指定多个包:

  1. @SpringBootApplication
  2. @MapperScan({"com.kfit.demo","com.kfit.user"})
  3. public class App {
  4. public static void main(String[] args) {
  5. SpringApplication.run(App.class, args);
  6. }
  7. }

如果mapper类没有在Spring Boot主程序可以扫描的包或者子包下面,可以使用如下方式进行配置:

  1. @SpringBootApplication
  2. @MapperScan({"com.kfit.*.mapper","org.kfit.*.mapper"})
  3. public class App {
  4. public static void main(String[] args) {
  5. SpringApplication.run(App.class, args);
  6. }
  7. }

单元测试


import java.util.ArrayList;
import java.util.Date;
import java.util.List; import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner; import com.github.pagehelper.PageHelper;
import com.karle.bean.User;
import com.karle.mapper.UserMapper; @RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBootMyBatisApplicationTests { @Autowired
private UserMapper mapper; // 插入一条新记录
@Test
public void insertOne() {
User newUser = new User();
int cardNo = (int) (Math.random() * 10000000);
newUser.setAge(24);
newUser.setBirthday(new Date());
newUser.setName(cardNo + "用户");
newUser.setCardNo(cardNo);
mapper.insertSelective(newUser);
System.out.println("插入成功");
} // 批量插入记录
@Test
public void insertMore() {
List<User> recordList = new ArrayList<User>();
for (int i = 0; i < 2; i++) {
User newUser = new User();
int cardNo = (int) (Math.random() * 10000000);
newUser.setAge(26);
newUser.setBirthday(new Date());
newUser.setName(cardNo + "批量插入用户");
newUser.setCardNo(cardNo);
recordList.add(newUser);
}
mapper.insertList(recordList);
System.out.println("批量插入成功");
} // 根据唯一编号查询用户(通用Mapper查询)
@Test
public void selectByCardNo() {
User paramBean = new User();
paramBean.setCardNo(6647403);
User dbUser = mapper.selectOne(paramBean);
if (dbUser != null) {
System.out.println("数据库用户(通用Mapper查询):" + dbUser.getName());
return;
}
System.out.println("查无此用户");
} // 根据唯一编号查询用户(XML查询)
@Test
public void selectByCardNoByXml() {
User dbUser = mapper.selectByCardNo(6105967);
if (dbUser != null) {
System.out.println("数据库用户(XML查询):" + dbUser.getName());
return;
}
System.out.println("查无此用户");
} // 根据年龄查询一组用户
@Test
public void selectByAge() {
User paramBean = new User();
paramBean.setAge(24);
List<User> dbUserList = mapper.select(paramBean);
System.out.println("总共查询数:" + dbUserList.size());
} // 分页查询用户
@Test
public void selectByPage() {
PageHelper.offsetPage(1, 5);
List<User> dbUserList = mapper.select(null);
for (User item : dbUserList) {
System.out.println("分页用户:" + item.getName());
}
} // 更新用户信息
@Test
public void updateOneInfo() {
User paramBean = new User();
paramBean.setId(1);
paramBean.setAge(26);
mapper.updateByPrimaryKeySelective(paramBean);
System.out.println("更新成功");
} }

事物的使用

spring Boot 使用事务非常简单,首先使用注解 @EnableTransactionManagement开启事务支持后,然后在访问数据库的Service方法上添加注解 @Transactional 便可。

@EnableTransactionManagement放在启动类上

 

Spring boot集成 MyBatis 通用Mapper的更多相关文章

  1. spring boot集成MyBatis 通用Mapper 使用总结

    spring boot集成MyBatis 通用Mapper 使用总结 2019年 参考资料: Spring boot集成 MyBatis 通用Mapper SpringBoot框架之通用mapper插 ...

  2. Spring Boot集成MyBatis开发Web项目

    1.Maven构建Spring Boot 创建Maven Web工程,引入spring-boot-starter-parent依赖 <project xmlns="http://mav ...

  3. 详解Spring Boot集成MyBatis的开发流程

    MyBatis是支持定制化SQL.存储过程以及高级映射的优秀的持久层框架,避免了几乎所有的JDBC代码和手动设置参数以及获取结果集. spring Boot是能支持快速创建Spring应用的Java框 ...

  4. 【spring boot】14.spring boot集成mybatis,注解方式OR映射文件方式AND pagehelper分页插件【Mybatis】pagehelper分页插件分页查询无效解决方法

    spring boot集成mybatis,集成使用mybatis拖沓了好久,今天终于可以补起来了. 本篇源码中,同时使用了Spring data JPA 和 Mybatis两种方式. 在使用的过程中一 ...

  5. spring boot集成mybatis(1)

    Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...

  6. spring boot集成mybatis(2) - 使用pagehelper实现分页

    Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...

  7. spring boot集成mybatis(3) - mybatis generator 配置

    Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...

  8. spring boot集成mybatis只剩两个sql 并提示 Cannot obtain primary key information from the database, generated objects may be incomplete

    前言 spring boot集成mybatis时只生成两个sql, 搞了一个早上,终于找到原因了 找了很多办法都没有解决, 最后注意到生成sql的时候打印了一句话: Cannot obtain pri ...

  9. Spring Boot集成Mybatis及通用Mapper

    集成Mybatis可以通过 mybatis-spring-boot-starter 实现. <!-- https://mvnrepository.com/artifact/org.mybatis ...

随机推荐

  1. 【Hibernate异常处理-1】java.lang.NoSuchMethodError: javax.persistence.JoinColumn.foreignKey()Ljavax/persistence/ForeignKey;

    原文链接(经验证正确) 说明:其他几个涉及到:NoSuchMethodError: javax.persistence.xxx的处理方法和这相同. JAVAEE6.0中的  javax.persist ...

  2. Spring IOC - 控制反转(依赖注入) - 入门案例 - 获取对象的方式 - 别名标签

    1. IOC - 控制反转(依赖注入) 所谓的IOC称之为控制反转,简单来说就是将对象的创建的权利及对象的生命周期的管理过程交 由Spring框架来处理,从此在开发过程中不再需要关注对象的创建和生命周 ...

  3. Bootstrap:百科

    ylbtech-Bootstrap:百科 Bootstrap (Web框架) Bootstrap,来自 Twitter,是目前很受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.Java ...

  4. 如何使用HttpClient认证机制

    1.服务器认证(Server Authentication)HttpClient处理服务器认证几乎是透明的,仅需要开发人员提供登录信息(login credentials).登录信息保存在HttpSt ...

  5. httpclient 用户名密码认证实例

    import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.com ...

  6. PHP书写格式

    从一个例子开始. 启动编辑器,创建一个php文件并键入如下代码: <?php echo "你好!"; ?> 运行 将该文件命名为 test.php 并存储于 E:htm ...

  7. Kubernetes 无法删除pod实例的排查过程

    今天在k8s集群创建pod时,执行了如下命令: #kubectl run busybox-service --image=busybox --replicas=3 但是在创建过程中pod既然失败了, ...

  8. c++官方文档-模版类

    #include <iostream> using namespace std; template<class T> class MyPair { private: T t[] ...

  9. 写了个TP5下PHP和手机端通信的API接口校验

    写了个PHP和手机端通信的API接口校验 直接发函数吧 public function _initialize() { //定义密码和盐 $password="123456"; $ ...

  10. hive 下篇

    由于spark on hive 问题,导致无法插入数据,暂时使用spark进行hive操作 向分区表插入数据 hive> show partitions customers;OKpartitio ...