使用mybatisUtil工具类体验基于xml和注解实现
- 项目结构
基础入门可参考:mybatis学习笔记(一)-- 简单入门(附测试Demo详细过程)
- 开始体验
1、新建项目,新建类MybatisUtil.java,路径:src/util/MybatisUtil.java
package util; import java.io.InputStream; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class MybatisUtil { /** * 获取SqlSessionFactory * @return SqlSessionFactory */ public static SqlSessionFactory getSqlSessionFactory() { String resource = "conf.xml"; InputStream is = MybatisUtil.class.getClassLoader().getResourceAsStream(resource); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is); return factory; } /** * 获取SqlSession * @return SqlSession */ public static SqlSession getSqlSession() { return getSqlSessionFactory().openSession(); } /** * 获取SqlSession * @param isAutoCommit * true 表示创建的SqlSession对象在执行完SQL之后会自动提交事务 * false 表示创建的SqlSession对象在执行完SQL之后不会自动提交事务,这时就需要我们手动调用sqlSession.commit()提交事务 * @return SqlSession */ public static SqlSession getSqlSession(boolean isAutoCommit) { return getSqlSessionFactory().openSession(isAutoCommit); } }
2、编写用户实体类User.java,路径:src/main/User.java
package main; public class User { private int id; private String name; private int age; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
3、编写mapper,以“新增用户”为示范案例
(1)基于xml实现,定义操作用户表的sql映射文件UserMapper.xml,路径:src/mapper/UserMapper.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="mapper.UserMapper"> <!-- 新增用户 --> <insert id="addUser" parameterType="main.User"> insert into tb_user(name,age) values(#{name},#{age}) </insert> </mapper>
(2)基于注解实现,定义sql映射的接口,使用注解指明方法要执行的SQL,新建UserMapperI.java,路径:src/mapper/UserMapperI.javapackage mapper;
import java.util.List; import main.User; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; public interface UserMapperI { //使用@Insert注解指明add方法要执行的SQL @Insert("insert into tb_user(name, age) values(#{name}, #{age})") public int add(User user); }
4、添加配置文件,新建conf.xml文件,路径:src/conf.xml<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <!-- 配置数据库连接信息 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/test" /> <property name="username" value="root" /> <property name="password" value="123456" /> </dataSource> </environment> </environments> <mappers> <!-- 注册userMapper.xml文件(基于xml实现)--> <mapper resource="mapper/userMapper.xml"/> <!-- 注册UserMapper映射接口(基于注解实现)--> <mapper class="mapper.UserMapperI"/> </mappers> </configuration>
5、编写测试函数
(1)测试基于xml实现
public static void testAddByXmlMapper(){ //SqlSession sqlSession = MyBatisUtil.getSqlSession(false); SqlSession sqlSession = MybatisUtil.getSqlSession(true); String statement = "mapper.UserMapper.addUser";//映射sql的标识字符串 User user = new User(); user.setName("lucy"); user.setAge(22); //执行插入操作 int retResult = sqlSession.insert(statement,user); //手动提交事务 //sqlSession.commit(); //使用SqlSession执行完SQL之后需要关闭SqlSession sqlSession.close(); System.out.println(retResult); }
* 注解:
SqlSession sqlSession = MybatisUtil.getSqlSession(true);
true 表示创建的SqlSession对象在执行完SQL之后会自动提交事务
false 表示创建的SqlSession对象在执行完SQL之后不会自动提交事务,这时就需要我们手动调用sqlSession.commit()提交事务
(2)测试基于注解实现
public void testAddByAnnotationMapper() { SqlSession sqlSession = MybatisUtil.getSqlSession(true); // 得到UserMapperI接口的实现类对象,UserMapperI接口的实现类对象由sqlSession.getMapper(UserMapperI.class)动态构建出来 UserMapperI mapper = sqlSession.getMapper(UserMapperI.class); User user = new User(); user.setName("tom"); user.setAge(20); int add = mapper.add(user); // 使用SqlSession执行完SQL之后需要关闭SqlSession sqlSession.close(); System.out.println(add); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!