Mybatis03 - 基础CURD
1 创建核心配置文件
其中配置连接数据库的环境
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://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.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!-- 引入mybatis映射文件 -->
<mappers>
<mapper resource="mappers/UserMapper.xml"/>
</mappers>
</configuration>
2 创建 UserMapper接口
其中提供操作数据库的方法名
public interface UserMapper {
//新增用户 一个mapper接口对应一个映射文件中的SQL语句
int insertUser();
}
3 创建 UserMapper映射文件
其中,将SQL语句映射到 UserMapper接口类以及类中的具体方法,确保一致
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zzz.mybatis.mapper.UserMapper">
<!-- 两个映射必须一致
namespace 映射类名 UserMapper
id 映射类中的方法名,一个方法执行一条语句-DAO层
-->
<insert id="insertUser">
INSERT INTO t_user VALUES (null,'admin','123456','23','男','12345@qq.com');
</insert>
</mapper>
4 JUnit测试 insert方法
进行测试时,需要 io流读取核心配置文件
再创建 SqlSessionFactoryBuilder对象 -> SqlSessionFactory对象 -> SqlSession对象
调用 sqlSession 中的 getMapper方法,通过代理模式,创建接口的代理实现类,得到实例对象从而调用方法
@Test
public void testInsert() throws IOException {
//获取核心配置文件的输入流
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//获取 SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//获取 SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
//获取 SQL的会话对象 SqlSession -- 是Mybatis提供的操作数据库的对象
SqlSession sqlSession = sqlSessionFactory.openSession(true);
//接口不能直接 new 实例对象
//因此,通过sqlSession中的 getMapper方法
//使用代理模式,创建接口的代理实现类
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
int result = userMapper.insertUser();
System.out.println("结果:" + result);
//如果 openSession方法中没有设置 true,则需要手动提交事务
//sqlSession.commit();
//关闭会话
sqlSession.close();
}
最后,必须手动提交事务以及关闭会话
或者,直接调用 sqlSession中数据库操作方法(不常使用)
//接口不能直接 new 实例对象 //因此,通过sqlSession中的 getMapper方法 //使用代理模式,创建接口的代理实现类 // UserMapper userMapper = sqlSession.getMapper(UserMapper.class); // int result = userMapper.insertUser(); //通过Mapper文件中SQL语句的唯一标识定位SQL语句,从而执行SQL语句 //唯一标识:namespaces.sqlId = 定位到具体方法 int result = sqlSession.insert("com.zzz.mybatis.mapper.UserMapper.insertUser"); System.out.println("结果:" + result);
5 优化,将获取sqlSession的过程封装成工具类
public class SqlSessionUtil {
//封装从读取文件一直到获取 sqlSession的方法
public static SqlSession getSqlSession() {
try {
//获取核心配置文件的输入流
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//获取 SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//获取 SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
//获取 SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession(true);
} catch (IOException e) {
e.printStackTrace();
}
return sqlSession;
}
}
从而在使用代理实例化接口类时,可以直接调用 sqlSession
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
int result = userMapper.insertUser();
6 查询,一条或多条结果
<!-- User getUserById();-->
<!--
resultType: 设置结果类型,即查询的数据要转换为的java类型
resultMap: 自定义映射关系,处理多对一或一对多的映射
-->
<select id="getUserById" resultType="com.zzz.mybatis.pojo.User">
SELECT * FROM t_user WHERE id = 2;
</select>
<select id="getAllUsers" resultType="com.zzz.mybatis.pojo.User">
SELECT * FROM t_user;
</select>
多条结果存放在 list集合中,通过 forEach遍历输出
@Test
public void testAllUsers(){
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> users = userMapper.getAllUsers();
users.forEach(System.out::println);
sqlSession.close();
}
分类:
SSM / Mybatis
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析