springboot---mybits整合

配置

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类的包的路径,比如:

@SpringBootApplication  
@MapperScan("com.kfit.*.mapper")  
public class App {  public static void main(String[] args) {  SpringApplication.run(App.class, args);  }  
}  

或者:

@SpringBootApplication  
@MapperScan("com.kfit.mapper")  
public class App {  public static void main(String[] args) {  SpringApplication.run(App.class, args);  }  
}  

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

使用@MapperScan注解多个包

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

@SpringBootApplication  
@MapperScan({"com.kfit.demo","com.kfit.user"})  
public class App {  public static void main(String[] args) {  SpringApplication.run(App.class, args);  }  
}  

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

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

单元测试

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 {@Autowiredprivate UserMapper mapper;// 插入一条新记录@Testpublic 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("插入成功");}// 批量插入记录@Testpublic 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查询)@Testpublic 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查询)@Testpublic void selectByCardNoByXml() {User dbUser = mapper.selectByCardNo(6105967);if (dbUser != null) {System.out.println("数据库用户(XML查询):" + dbUser.getName());return;}System.out.println("查无此用户");}// 根据年龄查询一组用户@Testpublic void selectByAge() {User paramBean = new User();paramBean.setAge(24);List<User> dbUserList = mapper.select(paramBean);System.out.println("总共查询数:" + dbUserList.size());}// 分页查询用户@Testpublic void selectByPage() {PageHelper.offsetPage(1, 5);List<User> dbUserList = mapper.select(null);for (User item : dbUserList) {System.out.println("分页用户:" + item.getName());}}// 更新用户信息@Testpublic void updateOneInfo() {User paramBean = new User();paramBean.setId(1);paramBean.setAge(26);mapper.updateByPrimaryKeySelective(paramBean);System.out.println("更新成功");}}

事务的使用

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

@EnableTransactionManagement放在启动类上

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/250124.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用airdrop进行文件共享

使用airdrop进行文件共享 学习了&#xff1a; https://support.apple.com/zh-cn/HT203106 https://zh.wikihow.com/%E5%9C%A8Mac%E4%B8%8A%E7%94%A8%E8%BF%91%E6%9C%BA%E6%8D%B7%E4%BC%A0%EF%BC%88Airdrop%EF%BC%89%E5%85%B1%E4%BA%AB%E6%96%87%E4%BB%B6 转载于:https://www.cn…

【链表】逆序打印链表

1 public class Main {2 3 // 逆序打印链表4 public void reversePrint(Node node) {5 if (node null){6 return;7 }8 reversePrint(node.next);9 System.out.println(node.data); 10 } 11 12 public Node crea…

[pytorch、学习] - 5.8 网络中的网络(NiN)

参考 5.8 网络中的网络&#xff08;NiN&#xff09; 前几节介绍的LeNet、AlexNet和VGG在设计上的共同之处是&#xff1a;先以由卷积层构成的模块充分抽取空间特征&#xff0c;再以由全连接层构成的模块来输出分类结果。其中&#xff0c;AlexNet和VGG对LeNet的改进主要在于如何…

springboot---集成mybits方法

SpringBoot集成mybatis配置 一个有趣的现象&#xff1a;传统企业大都喜欢使用hibernate,互联网行业通常使用mybatis&#xff1b;之所以出现这个问题感觉与对应的业务有关&#xff0c;比方说&#xff0c;互联网的业务更加的复杂&#xff0c;更加需要进行灵活性的处理&#xff0c…

jQuery源码解读

参考 &#xff1a; https://www.cnblogs.com/yuqingfamily/p/5785593.html 转载于:https://www.cnblogs.com/wfblog/p/9172622.html

info.plist文件里面添加描述 - 配置定位,相册等

<key>NSAppleMusicUsageDescription</key> <string>App需要您的同意,才能访问媒体资料库</string> <key>NSBluetoothPeripheralUsageDescription</key> <string>App需要您的同意,才能访问蓝牙</string> <key>NSCalendar…

[pytorch、学习] - 5.9 含并行连结的网络(GoogLeNet)

参考 5.9 含并行连结的网络&#xff08;GoogLeNet&#xff09; 在2014年的ImageNet图像识别挑战赛中&#xff0c;一个名叫GoogLeNet的网络结构大放异彩。它虽然在名字上向LeNet致敬&#xff0c;但在网络结构上已经很难看到LeNet的影子。GoogLeNet吸收了NiN中网络串联网络的思…

mybits注解详解

一、mybatis 简单注解 关键注解词 &#xff1a; Insert &#xff1a; 插入sql , 和xml insert sql语法完全一样 Select &#xff1a; 查询sql, 和xml select sql语法完全一样 Update &#xff1a; 更新sql, 和xml update sql语法完全一样 Delete &#xff1a; 删除sql, 和xml d…

使用python装饰器计算函数运行时间的实例

使用python装饰器计算函数运行时间的实例 装饰器在python里面有很重要的作用&#xff0c; 如果能够熟练使用&#xff0c;将会大大的提高工作效率 今天就来见识一下 python 装饰器&#xff0c;到底是怎么工作的。 本文主要是利用python装饰器计算函数运行时间 一些需要精确的计算…

SQLServer用存储过程实现插入更新数据

实现 1&#xff09;有同样的数据&#xff0c;直接返回&#xff08;返回值&#xff1a;0&#xff09;。 2&#xff09;有主键同样。可是数据不同的数据。进行更新处理&#xff08;返回值&#xff1a;2&#xff09;&#xff1b; 3&#xff09;没有数据&#xff0c;进行插入数据处…

[pytorch、学习] - 9.1 图像增广

参考 9.1 图像增广 在5.6节(深度卷积神经网络)里我们提过,大规模数据集是成功应用神经网络的前提。图像增广(image augmentation)技术通过对训练图像做一系列随机改变,来产生相似但又不相同的训练样本,从而扩大训练数据集的规模。图像增广的另一种解释是,随机改变训练样本可以…

mysql绿色版安装

导读&#xff1a;MySQL是一款关系型数据库产品&#xff0c;官网给出了两种安装包格式&#xff1a;MSI和ZIP。MSI格式是图形界面安装方式&#xff0c;基本只需下一步即可&#xff0c;这篇文章主要介绍ZIP格式的安装过程。ZIP Archive版是免安装的。只要解压就行了。 一、首先下…

在微信浏览器字体被调大导致页面错乱的解决办法

iOS的解决方案是覆盖掉微信的样式&#xff1a; body { /* IOS禁止微信调整字体大小 */-webkit-text-size-adjust: 100% !important; } 安卓的解决方案是通过 WeixinJSBridge 对象将网页的字体大小设置为默认大小&#xff0c;并且重写设置字体大小的方法&#xff0c;让用户不能在…

[pytorch、学习] - 9.2 微调

参考 9.2 微调 在前面得一些章节中,我们介绍了如何在只有6万张图像的Fashion-MNIST训练数据集上训练模型。我们还描述了学术界当下使用最广泛规模图像数据集ImageNet,它有超过1000万的图像和1000类的物体。然而,我们平常接触到数据集的规模通常在这两者之间。 假设我们想从图…

Springboot默认加载application.yml原理

Springboot默认加载application.yml原理以及扩展 SpringApplication.run(…)默认会加载classpath下的application.yml或application.properties配置文件。公司要求搭建的框架默认加载一套默认的配置文件demo.properties&#xff0c;让开发人员实现“零”配置开发&#xff0c;但…

java 集合(Set接口)

Set接口&#xff1a;无序集合&#xff0c;不允许有重复值&#xff0c;允许有null值 存入与取出的顺序有可能不一致 HashSet:具有set集合的基本特性&#xff0c;不允许重复值&#xff0c;允许null值 底层实现是哈希表结构 初始容量为16 保存自定义对象时&#xff0c;保证数据的唯…

关于mac机抓包的几点基础知识

1. 我使用的抓包工具为WireShark&#xff0c;以下操作按我当前的版本(Version 2.6.1)做的&#xff0c;以前的版本或者以后的版本可能有稍微的区别。 2. 将mac设置为热点&#xff1a;打开系统偏好设置&#xff0c;点击共享&#xff1a; 然后点击WIFI选项&#xff0c;设置WIFI名…

SpringBoot启动如何加载application.yml配置文件

一、前言 在spring时代配置文件的加载都是通过web.xml配置加载的(Servlet3.0之前)&#xff0c;可能配置方式有所不同&#xff0c;但是大多数都是通过指定路径的文件名的形式去告诉spring该加载哪个文件&#xff1b; <context-param><param-name>contextConfigLocat…

[github] - git使用小结(分支拉取、版本回退)

1. 首次(fork项目之后) $ git clone [master] $ git branch -a $ git checkout -b [自己的分支名] [远程仓库的分支名]克隆的是主干网络 2. 再次拉取代码 $ git pull [master下选择分支名] [分支名] $ git push origin HEAD:[分支名]拉取首先得进入主仓(不是自己的远程仓)然后…

MYSQL 查看最大连接数和修改最大连接数

MySQL查看最大连接数和修改最大连接数 1、查看最大连接数show variables like %max_connections%;2、修改最大连接数set GLOBAL max_connections 200; 以下的文章主要是向大家介绍的是MySQL最大连接数的修改&#xff0c;我们大家都知道MySQL最大连接数的默认值是100, 这个数值…