MyBatis(注解方式操作)

文章目录

    • 1.注解方式操作
        • 文件目录
        • 1.快速入门(完整步骤)
          • 1.pom.xml(完整)
          • 2.resources/jdbc.properties外部配置文件(根据实际情况修改参数)
          • 3.在resources/mybatis-config.xml(完整)中配置含有注解的接口
          • 4.映射类Monster.java
          • 5.编写MonsterAnnotation.java接口
          • 6.MyBatisUtils.java
          • 7.测试
        • 2.注意事项和细节
          • 1.复制sql语句
          • 2.使用注解方式也要在配置文件中引入这个类!
          • 3.返回自增值(update和insert适用)
          • 4.配置SQL提示
    • 2.MyBatis配置文件详解
        • 1.外部属性文件设置相关的值
          • 1.resources/jdbc.properties
          • 2.修改mybatis-config.xml引入外部文件
        • 2.settings配置日志
        • 3.typeAliases配置类型别名
        • 4.environments注册XXXMapper.xml或者含有注解的类
        • 5.pom.xml配置在build的时候要扫描的文件

1.注解方式操作

文件目录

image-20240304104303996

1.快速入门(完整步骤)
1.pom.xml(完整)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>mybatis</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging><name>Archetype - mybatis</name><url>http://maven.apache.org</url><modules><module>mybatis_quickstart</module></modules><dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.49</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.7</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><!--如果设置scope为test,则只能在test包下使用--><scope>test</scope></dependency></dependencies><!--在父模块中的pom.xml文件中配置在build的时候要扫描的文件,解决某些类型文件拷贝到target目录失败的问题--><build><resources><resource><directory>src/main/java</directory><includes><!--在java文件夹下的多级目录下的xml文件--><include>**/*.xml</include></includes></resource><resource><directory>src/main/resources</directory><includes><!--在resources文件夹下的多级目录下的xml文件和properties文件--><include>**/*.xml</include><include>**/*.properties</include></includes></resource></resources></build>
</project>
2.resources/jdbc.properties外部配置文件(根据实际情况修改参数)
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/mybatis?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8
jdbc.username=root
jdbc.password=root
3.在resources/mybatis-config.xml(完整)中配置含有注解的接口

image-20240304092233716

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!--引入外部文件jdbc.properties--><properties resource="jdbc.properties"/><!--配置mybatis自带的日志,settings需要放到最前面--><settings><setting name="logImpl" value="STDOUT_LOGGING"/></settings><environments default="development"><environment id="development"><!--配置事务管理器--><transactionManager type="JDBC"/><!--配置数据源--><dataSource type="POOLED"><!--配置驱动--><property name="driver" value="${jdbc.driver}"/><!--配置连接url--><!--1.jdbc:mysql:协议2.127.0.0.1:3306:指定连接mysql的ip+端口3.mybatis:连接的db4.useSSL:使用安全连接5.&amp;:表示&6.useUnicode=true:使用unicode,防止编码错误7.characterEncoding=UTF-8:字符集使用utf-8--><property name="url" value="${jdbc.url}"/><!--用户名--><property name="username" value="${jdbc.username}"/><!--密码--><property name="password" value="${jdbc.password}"/></dataSource></environment></environments><mappers><!--包的方式引入含有注解的类--><package name="com.sun.mapper"/></mappers></configuration>
4.映射类Monster.java
package com.sun.entity;import java.util.Date;/*** @author 孙显圣* @version 1.0*/
public class Monster {private Integer id;private Integer age;private Date birthday;private String email;private Integer gender;private String name;private Double salary;//无参构造器public Monster() {}public Monster(Integer id, Integer age, Date birthday, String email, Integer gender, String name, Double salary) {this.id = id;this.age = age;this.birthday = birthday;this.email = email;this.gender = gender;this.name = name;this.salary = salary;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public Integer getGender() {return gender;}public void setGender(Integer gender) {this.gender = gender;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Double getSalary() {return salary;}public void setSalary(Double salary) {this.salary = salary;}@Overridepublic String toString() {return "Monster{" +"id=" + id +", age=" + age +", birthday=" + birthday +", email='" + email + '\'' +", gender=" + gender +", name='" + name + '\'' +", salary=" + salary +'}';}
}
5.编写MonsterAnnotation.java接口
package com.sun.mapper;import com.sun.entity.Monster;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;import java.util.List;/*** @author 孙显圣* @version 1.0*/
public interface MonsterAnnotation {@Insert("INSERT INTO `monster`(`id`,`age`,`birthday`,`email`,`gender`,`name`,`salaary`) " +"VALUES(NULL, #{age}, #{birthday}, #{email}, #{gender}, #{name}, #{salary})")public void addMonster(Monster monster);@Delete("DELETE FROM `monster` where id = #{id}")public void delMonster(Integer id);@Update("UPDATE `monster` SET " +"`age` = #{age}, `birthday` = #{birthday}, " +"`email` = #{email}, `name` = #{name}, `salary` = #{salary} " +"WHERE `id` = #{id}")public void updateMonster(Monster monster);@Select("SELECT * FROM `monster` WHERE id = #{id}")public Monster getMonsterById(Integer id);@Select("SELECT * FROM `monster`")public List<Monster> findAllMonster();}
6.MyBatisUtils.java
package com.util;import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;
import java.io.InputStream;/*** @author 孙显圣* @version 1.0*/
public class MyBatisUtils {private static SqlSessionFactory sqlSessionFactory;//使用静态代码块初始化SqlSessionFactorystatic {try {//获取Mybatis配置文件的输入流String resource = "mybatis-config.xml";//默认是从类路径下获取资源,在maven中指的就是resources文件夹下,会映射到实际的工作目录InputStream resourceAsStream = Resources.getResourceAsStream(resource);//读取资源获取SessionFactory,可以理解为连接池sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);} catch (IOException e) {throw new RuntimeException(e);}}//编写方法返回SqlSessionpublic static SqlSession getSqlSession() {return sqlSessionFactory.openSession();}
}
7.测试
import com.sun.entity.Monster;
import com.sun.mapper.MonsterAnnotation;
import com.sun.mapper.MonsterMapper;
import com.util.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Before;
import org.junit.Test;import java.util.Date;
import java.util.List;/*** @author 孙显圣* @version 1.0*/
public class MonsterAnnotationTest {//两个属性private SqlSession sqlSession; //相当于连接private MonsterAnnotation monsterAnnotation;//编写方法完成初始化@Before //标注了Before之后表示了在执行目标测试方法前会执行该方法public void init() {//获取到sqlSessionsqlSession = MyBatisUtils.getSqlSession();//获取到代理对象monsterAnnotation = sqlSession.getMapper(MonsterAnnotation.class);}@Testpublic void addMonster() {for (int i = 0; i < 2; i++) {Monster monster = new Monster(null, 10 + i, new Date(), "sun@qq.com", 0, "孙显圣", 10.0 + i);//代理对象执行接口的方法monsterAnnotation.addMonster(monster);}//如果是增删改还要提交一下事务if (sqlSession != null) {sqlSession.commit();//将连接放回连接池sqlSession.close();}System.out.println("成功");}@Testpublic void find() {List<Monster> allMonster = monsterAnnotation.findAllMonster();for (Monster monster : allMonster) {System.out.println(monster);}if (sqlSession != null) {//将连接放回连接池sqlSession.close();}}}
2.注意事项和细节
1.复制sql语句
  • 如果有/n则将这个/n去掉然后替换成空格
  • 如果一行的前面有很多空格,就将这些空格都去掉
2.使用注解方式也要在配置文件中引入这个类!
3.返回自增值(update和insert适用)
  • 自增值对应的列如果与属性名相同则可以省略

image-20240304093516857

4.配置SQL提示

image-20240304160939437

2.MyBatis配置文件详解

1.外部属性文件设置相关的值
1.resources/jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/mybatis?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8
jdbc.username=root
jdbc.password=root
2.修改mybatis-config.xml引入外部文件

image-20240304095835601

2.settings配置日志

image-20240304100014106

3.typeAliases配置类型别名

image-20240304100324472

4.environments注册XXXMapper.xml或者含有注解的类

image-20240304101242735

5.pom.xml配置在build的时候要扫描的文件
  <!--在父模块中的pom.xml文件中配置在build的时候要扫描的文件,解决某些类型文件拷贝到target目录失败的问题--><build><resources><resource><directory>src/main/java</directory><includes><!--在java文件夹下的多级目录下的xml文件--><include>**/*.xml</include></includes></resource><resource><directory>src/main/resources</directory><includes><!--在resources文件夹下的多级目录下的xml文件和properties文件--><include>**/*.xml</include><include>**/*.properties</include></includes></resource></resources></build>

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

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

相关文章

Android Studio的笔记--布局文件

关于Layout布局文件的使用 LinearLayoutRelativeLayout之前文章的内容一些常见性质在android.graphics.Color中定义了12种常见的颜色常数线性布局LinearLayout 一些常见使用文本框TextView设置文本内容编辑框EditText获取文本内容按钮Button控件使用其他按钮修改图标及名称添加…

智慧旅游驱动行业革新:智能技术引领服务全面升级,匠心打造高品质、个性化旅游新体验

一、引言 随着科技的飞速发展和信息化程度的不断提高&#xff0c;智慧旅游正逐渐成为旅游业发展的新趋势。智慧旅游&#xff0c;顾名思义&#xff0c;是以智能化技术为支撑&#xff0c;通过大数据、云计算、物联网、人工智能等先进技术的应用&#xff0c;实现旅游服务的全面升…

React Router 路由配置数组配组持久化

在一些特定场景下,你可能需要将路由配置数组进行持久化,例如从后端动态加载路由配置或根据用户权限动态生成路由配置。这时,持久化路由配置数组就很有用,可以避免每次应用启动时重新获取或计算路由配置。 持久化路由配置数组的步骤如下: 定义路由配置数组 首先,你需要定义一…

ASR语音转录Prompt优化

ASR语音转录Prompt优化 一、前言 在ASR转录的时候&#xff0c;我们能很明显的感受到有时候语音识别不是很准确&#xff0c;这过程中常见的文本错误主要可以归纳为以下几类&#xff1a; 同音错误&#xff08;Homophone Errors&#xff09; 同音错误发生在不同词语发音相似或相…

使用Postman对@RequestPart和HttpServletRequest组合传参方式

使用Postman对RequestPart和HttpServletRequest组合传参方式 方法代码如下&#xff1a; /*** 发布*/ApiOperation("发布")ApiImplicitParams({ApiImplicitParam(name "req", value "json格式", dataType "Map", dataTypeClass Ma…

【在线名字作画HTML源码】

在线名字作画HTML源码 效果图部分源码领取源码下期更新预报 效果图 部分源码 index.htm <!DOCTYPE html> <html> <head> <title>在线名字作画|民间花鸟字|多彩花鸟虫鱼组合书法|藏字画|字谜语|飞帛板书|意匠文字</title> <meta http-equiv&…

HarmaonyOS鸿蒙应用科普课

一、什么是鸿蒙OS&#xff1f; 1.概念&#xff1a; 先给大家讲讲今天讲课的主题&#xff0c;鸿蒙OS是什么&#xff1f;鸿蒙系统大家都知道&#xff0c;就是一个操作系统&#xff0c;我们未来是为的成为鸿蒙程序员。所以我们不要将鸿蒙os完全等同于手机操作系统&#xff0c;太…

华为 huawei 交换机 配置 MUX VLAN 示例(汇聚层设备)

组网需求 在企业网络中&#xff0c;企业所有员工都可以访问企业的服务器。但对于企业来说&#xff0c;希望企业内部部分员工之间可以互相交流&#xff0c;而部分员工之间是隔离的&#xff0c;不能够互相访问。 如 图 6-4 所示&#xff0c; Switch1 位于网络的汇聚层&#xff0…

Nacos 安全零信任实践

作者&#xff1a;柳遵飞 Nacos 作为配置中心经常存储一些敏感信息&#xff0c;但是由于误用导致安全风险&#xff0c;最常见的主要是以下两个问题&#xff1a; 1&#xff09;Nacos 暴露公网可以吗&#xff1f;不可以&#xff0c;因为 Nacos 定位是注册配置中心&#xff0c;是…

Windows命令行基本命令

目录 什么是相对路径和绝对路径&#xff1f; 一、目录&#xff08;文件夹&#xff09;和文件操作 1.cd命令 用于切换目录 2.dir命令 用于显示目录和文件列表 3.md或mkdir命令 创建文件&#xff0c;也可以创建多级子目录 4.rd命令 用于删除目录 5.move命令 用于移动…

C++:拷贝构造函数和赋值运算符重载

目录 一、拷贝构造函数 1.1概念 1.2特征 二、赋值运算符重载 2.1运算符重载 2.2赋值运算符重载 2.2.1赋值运算符重载格式 2.2.2赋值运算符重载要求 2.2.3默认生成的赋值运算符重载 2.3前置和后置重载 一、拷贝构造函数 1.1概念 只有一个形参&#xff0c;这个形参是…

leetcode51.N皇后(困难)-回溯法

思路 都知道n皇后问题是回溯算法解决的经典问题&#xff0c;但是用回溯解决多了组合、切割、子集、排列问题之后&#xff0c;遇到这种二维矩阵还会有点不知所措。 首先来看一下皇后们的约束条件&#xff1a; 不能同行不能同列不能同斜线 确定完约束条件&#xff0c;来看看究…

Python爬虫(入门版)

1、爬虫是什么 简单的来说&#xff1a;就是用程序获取网络上数据。 2、爬虫的原理 如果要获取网络上数据&#xff0c;我们要给爬虫一个网址&#xff08;程序中通常叫URL&#xff09;&#xff0c;爬虫发送一个HTTP请求给目标网页的服务器&#xff0c;服务器返回数据给客户端&am…

异地组网、网络部署、无线覆盖,贝锐蒲公英一步到位

面对网络架构复杂的企业总部&#xff0c;分散在各地的分支机构&#xff0c;以及出差的远程办公人员&#xff0c;如何才能高效异地组网&#xff1f; 为了确保总部、分部网络实现远程稳定、高速互访&#xff0c;以及远程人员安全访问总部业务系统&#xff0c;基于自研SD-WAN的贝…

C++ 小游戏:战斗之旅

一、游戏名称&#xff1a;战斗之旅 游戏规则 角色选择&#xff1a;玩家可以选择不同的角色&#xff0c;每个角色都有不同的属性和技能。商城&#xff1a;玩家可以访问商城购买不同的装备&#xff0c;包括武器和回复物品。战斗&#xff1a;玩家可以与其他角色进行战斗。在战斗…

数据结构(01)——链表OJ

目录 移除链表元素 思路1 不创建虚拟头节点 思路2 创建虚拟头节点 反转链表 寻找链表中间节点 判断链表是否相交 回文链表 环形链表 环形链表|| 移除链表元素 . - 力扣&#xff08;LeetCode&#xff09; 要想移除链表的元素&#xff0c;那么只需要将目标节点的前一…

XMind轮播图banner测试点

banner测试点 显示1到5张banner图片 [1,5] 6 1 一张不轮播 5 3 0可选 自动轮播,3秒切换一张 鼠标悬停,不轮播 实心为当前图 点击可以跳转 点击左,切换一张图片 点击右, 切换一张图片…

【中级软件设计师】上午题12-软件工程(3):项目活动图、软件风险、软件评审、软件项目估算

【中级软件设计师】上午题12-软件工程&#xff08;3&#xff09; 1 软件项目估算1.1 COCOMO估算模型1.2 COCOMOⅡ模型 2 进度管理2.1 gantt甘特图2.2 pert图2.3 项目活动图2.3.1 画项目图 3 软件配置管理4 软件风险4.1 风险管理4.2 风险识别4.3 风险预测4.4 风险评估4.5 风险控…

Baidu comate智能编程助手评测

Baidu comate智能编程助手评测 作者&#xff1a;知孤云出岫 目录 一&#xff0e; 关于comate产品 二&#xff0e; 关于comate产品体验 三&#xff0e; 关于实际案例. 四&#xff0e; 关于baidu comate编程助手的实测体验感悟 五&#xff0e; …

Java包装类,128陷阱

包装类 基本数据类型都有自己对应的包装类&#xff0c;因为Java本质是面向对象编程的&#xff0c;一切的内容在Java看来都是对象 但是基本数据类型没有类&#xff0c;也没有对象&#xff0c;这样就有了矛盾 所以诞生了基本类型的包装类 基本数据类型&#xff1a; byte,short,…