1、建库建表
CREATE DATABASE `mybatis-example`;USE `mybatis-example`;CREATE TABLE `t_emp`(emp_id INT AUTO_INCREMENT,emp_name CHAR(100),emp_salary DOUBLE(10,5),PRIMARY KEY(emp_id) );INSERT INTO `t_emp`(emp_name,emp_salary) VALUES("tom",200.33); INSERT INTO `t_emp`(emp_name,emp_salary) VALUES("jerry",666.66); INSERT INTO `t_emp`(emp_name,emp_salary) VALUES("andy",777.77);
2、pom.xml
<dependencies><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId></dependency><!-- MySQL驱动 mybatis底层依赖jdbc驱动实现,本次不需要导入连接池,mybatis自带! --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--junit5测试--><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies>
3、Employee.java(pojo)
package com.atguigu.mybatis.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor public class Employee {private Integer empId;private String empName;private Double empSalary; }
4、EmpMapper.java
package com.atguigu.mybatis.mapper; import com.atguigu.mybatis.pojo.Employee; import org.apache.ibatis.annotations.Param; import java.util.Map; public interface EmpMapper {void addEmp(Employee employee);void addEmp2(@Param("ename") String ename, @Param("esalary") Double esalary);void addEmp3(Map params); }
5、mybatis-config.xml(mybatis的总配置文件)
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration><!-- environments表示配置Mybatis的开发环境,可以配置多个环境,在众多具体环境中,使用default属性指定实际运行时使用的环境。default属性的取值是environment标签的id属性的值。 --><environments default="development"><!-- environment表示配置Mybatis的一个具体的环境 --><environment id="development"><!-- Mybatis的内置的事务管理器 --><transactionManager type="JDBC"/><!-- 配置数据源 --><dataSource type="POOLED"><!-- 建立数据库连接的具体信息 --><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis-example"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments><mappers><!-- Mapper注册:指定Mybatis映射文件的具体位置 --><!-- mapper标签:配置一个具体的Mapper映射文件 --><!-- resource属性:指定Mapper映射文件的实际存储位置,这里需要使用一个以类路径根目录为基准的相对路径 --><!-- 对Maven工程的目录结构来说,resources目录下的内容会直接放入类路径,所以这里我们可以以resources目录为基准 --><mapper resource="mapper/EmpMapper.xml"/></mappers></configuration>
6、EmpMapper.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- namespace等于mapper接口类的全限定名,这样实现对应 --> <mapper namespace="com.atguigu.mybatis.mapper.EmpMapper"><!--演示数据类型--><!--单个实体类型作为输入参数--><insert id="addEmp"><!--此处的empName和empSalary不能随便写,必须是参数中的属性名称-->insert into t_emp values(0,#{empName},#{empSalary})<!--Preparing: insert into t_emp values(0,?,?)--></insert><!--零散的参数--><insert id="addEmp2">insert into t_emp values(0,#{ename},#{esalary})<!--insert into t_emp values(0,#{arg0},#{arg1})--><!--insert into t_emp values(0,#{param1},#{param2})--></insert><!--Map类型的参数--><insert id="addEmp3">insert into t_emp values(0,#{ename},#{esalary})</insert></mapper>
7、MybatisTest3.java
package com.atguigu.mybatis; import com.atguigu.mybatis.mapper.EmpMapper; import com.atguigu.mybatis.pojo.Employee; 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 org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import java.io.IOException; import java.io.InputStream; import java.util.Map; public class MybatisTest3 {SqlSessionFactory sqlSessionFactory;SqlSession sqlSession;EmpMapper empMapper;@BeforeEachpublic void setup() throws IOException {// 获取资源流,读取"mybatis-config.xml"文件InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");// 使用资源流创建SqlSessionFactorysqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 使用SqlSessionFactory打开一个SessionsqlSession = sqlSessionFactory.openSession();// 使用Session获取EmpMapper的Mapper对象empMapper = sqlSession.getMapper(EmpMapper.class);}// 在每个测试用例之后执行的清理方法@AfterEachpublic void teardown() {sqlSession.commit(); // 提交事务sqlSession.close(); // 关闭SqlSession}@Testpublic void addEmpTest() {Employee employee = new Employee(0, "鸠摩智", 8080.0);empMapper.addEmp(employee);}@Testpublic void addEmpTest2() {empMapper.addEmp2("赵敏", 999.9);}@Testpublic void addEmpTest3() {empMapper.addEmp3(Map.of("ename","张三丰","esalary",1000.0));} }
8、Map.of()
Map.of
是 Java 9 中引入的一个新方法,用于创建一个不可变的Map。它接受一组键值对,并将它们放入一个Map中。这个Map是不可变的,也就是说,一旦创建,就不能再添加或删除键值对。这个方法提供了一种方便的方式来创建一个不可变的Map,而不需要手动创建一个新的Map实例并手动添加键值对。它还可以帮助避免在代码中出现一些常见的错误,比如在创建Map后不小心修改了它。
下面是一个使用
Map.of
创建Map的示例:Map<String, Integer> map = Map.of("a", 1, "b", 2, "c", 3);
这将创建一个包含三个键值对的Map,键的类型为String,值的类型为Integer。这个Map是不可变的,因此不能添加或删除键值对。
Map.of()是在Java 9中引入的方法,用于创建不可变的Map对象。它的作用是提供一种更简洁、更直观的方式来创建小型的、不可变的Map对象,而不需要使用传统的构造函数。
Map.of()方法接受若干个键值对作为参数,在执行时会自动创建一个不可变的Map对象并返回。例如:
Map<String, Integer> map = Map.of("one", 1, "two", 2, "three", 3);
上述代码将创建一个包含三个键值对的不可变Map对象,其中键为"one"、"two"、"three",值为1、2、3。
需要注意的是,Map.of()方法创建的Map对象是不可修改的,即调用put()、remove()等修改Map对象的方法会抛出UnsupportedOperationException异常。因此,如果需要修改Map对象,还是需要使用传统的构造函数来创建可修改的Map对象。