当前位置: 首页 > backend >正文

小白学习Java第18天(上):mybatis

之前对于javaweb开发,在写dao层的是非常麻烦,而且有个不好就是你的SQL语句是和代码捆绑在一起,耦合性很强,因此对于持久层开发我们更希望有一个框架去代理它。详细我们可以查看mybatis的中文文档https://mybatis.net.cn/getting-started.html

1.创建一个SqlSession的对象

XML文件

下面是代码的实现:

package com.xcl.MybatisUtils;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;public class MybatisUtils {private static SqlSessionFactory sqlSessionFactory = null;static {try {//获取工厂对象sqlSessionFactoryString resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);} catch (IOException e) {throw new RuntimeException(e);}}//有了工厂对象,就可以获取SqlSession对象了,有了这个就可以进行操作,就相当于connectionpublic static SqlSession  getSqlSession() {SqlSession sqlSession = sqlSessionFactory.openSession();return sqlSession;}
}

下面我们就进行演示一下增删改查是什么:

首先创建相应的接口方法:

package com.xcl.dao;import com.xcl.pojo.User;import java.util.List;public interface UserMapper {/** 登录验证、查询密码、查询信息*/List<User> getList();User getUserById(int id);int addUser(User user);int updateUser(User user);int deleteUser(int id);}

然后进行xml文件配置:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!--首先就是进行接口的绑定,原来就是用一个类进行实现UserDaoImp,但是现在就用接口与xml进行绑定就可以-->
<mapper namespace="com.xcl.dao.UserMapper">
<!--查询所有的--><select id="getList" resultType="com.xcl.pojo.User">select * from stusystem.user</select><!--查询指定的id--><select id="getUserById" resultType="com.xcl.pojo.User" parameterType="int">select * from stusystem.user where user_id=#{id}</select><!--添加对象--><insert id="addUser" parameterType="com.xcl.pojo.User">insert into stusystem.user(user_num,user_name,password,phone,role_id) values(#{user_num},#{user_name},#{password},#{phone},#{role_id})</insert><!--修改对象--><update id="updateUser" parameterType="com.xcl.pojo.User">update stusystem.user set user_num=#{user_num},user_name=#{user_name},password=#{password},phone=#{phone},role_id=#{role_id} where user_id=#{user_id}</update><!--删除对象--><delete id="deleteUser" parameterType="int">delete from stusystem.user where user_id=#{id}</delete>
</mapper>

然后就是进行测试:

package com.xcl;import com.xcl.MybatisUtils.MybatisUtils;
import com.xcl.dao.UserMapper;
import com.xcl.pojo.User;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;import java.util.List;public class daoUserMapperTest {@Testpublic void test1() {//获得操作sql语句的对象SqlSession sqlSession = MybatisUtils.getSqlSession();//执行sql语句,给他得到了一个实体类userDaoUserMapper userMapper = sqlSession.getMapper(UserMapper.class);List<User> userLsit = userMapper.getList();for (User user : userLsit) {System.out.println(user);}//关闭sqlSessionsqlSession.close();}@Testpublic void test2() {//获得操作sql语句的对象SqlSession sqlSession = MybatisUtils.getSqlSession();//执行sql语句,给他得到了一个实体类userDaoUserMapper userMapper = sqlSession.getMapper(UserMapper.class);User userById = userMapper.getUserById(3);System.out.println(userById);//关闭sqlSessionsqlSession.close();}@Testpublic void test3() {//获得操作sql语句的对象SqlSession sqlSession = MybatisUtils.getSqlSession();//执行sql语句,给他得到了一个实体类userDaoUserMapper userMapper = sqlSession.getMapper(UserMapper.class);User user = new User(0,"152818", "向传龙", "123456", "123456789", "1");int i = userMapper.addUser(user);if (i > 0){System.out.println("添加成功");//提交事务sqlSession.commit();}else {System.out.println("添加失败");}//关闭sqlSessionsqlSession.close();}@Testpublic void test4() {//获得操作sql语句的对象SqlSession sqlSession = MybatisUtils.getSqlSession();//执行sql语句,给他得到了一个实体类userDaoUserMapper userMapper = sqlSession.getMapper(UserMapper.class);User user = new User(42,"11668", "小李文", "123456", "123456789", "1");int i = userMapper.updateUser(user);if (i > 0){System.out.println("修改成功");//提交事务sqlSession.commit();}else {System.out.println("修改失败");}}@Testpublic void test5() {//获得操作sql语句的对象SqlSession sqlSession = MybatisUtils.getSqlSession();//执行sql语句,给他得到了一个实体类userDaoUserMapper userMapper = sqlSession.getMapper(UserMapper.class);int i = userMapper.deleteUser(42);if (i > 0){System.out.println("删除成功");//提交事务sqlSession.commit();}else {System.out.println("删除失败");}}
}

自此上述增删改查就可以用mybatis进行解决!!

【有一个小的知识点就是,我们在进行查询的时候,一个小的知识点就是我想进行模糊查询,而不是输入全部我才能查询出来】

xml实现:

<!-- 进行模糊查询--><select id="getLikeList" resultType="com.xcl.pojo.User" parameterType="String">select * from stusystem.user where user_name like concat('%',#{name},'%')</select>
    @Testpublic void test6() {//获得操作sql语句的对象SqlSession sqlSession = MybatisUtils.getSqlSession();//执行sql语句,给他得到了一个实体类userDaoUserMapper userMapper = sqlSession.getMapper(UserMapper.class);List<User> userLsit = userMapper.getLikeList("李");for (User user : userLsit) {System.out.println(user);}//关闭sqlSessionsqlSession.close();}

2.配置(这个是比较常用还有一些就是看那个mybatis中文文档就行)

2.1properties

首先第一步我就不太喜欢里面驱动写死,因此我们在外面写一个配置文件properties文件,然后进行读取!

2.2然后就是设置别名

一种就是对于实体类直接起个别名

第二种就是直接扫描包,然后就是实体类,别名就用小写就行

    <typeAliases><typeAlias type="com.xcl.pojo.User" alias="User"/><package name="com.xcl.pojo.User"/></typeAliases>

 3.结果集映射

背景就是,不知道你们有没有遇到过就是你使用mybatis的时候你的数据库字段column和实体类的property属性对不上,那怎么办呢?

和它一样就可能对得上,但是不一样就可以就是为空!!!

解决方案就是我们需要在我们UserMapper里面xml文件进行配置,结果集进行改变

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!--首先就是进行接口的绑定,原来就是用一个类进行实现UserDaoImp,但是现在就用接口与xml进行绑定就可以-->
<mapper namespace="com.xcl.dao.UserMapper">
<!-- 结果集映射--><resultMap id="UserMap" type="User">
<!-- column数据库中的字段,property实体类中的属性--><id property="userID" column="user_id"/><id property="userNum" column="user_num"/><id property="userName" column="user_name"/><id property="password" column="password"/><id property="phone" column="phone"/><id property="roleID" column="role_id"/></resultMap><!--查询所有的--><select id="getList" resultMap="UserMap">select * from stusystem.user</select>
</mapper>

 小结一下就是:

mybatis就是需要配置两个xml文件(大的xml文件就是进行数据库的连接,小的xml文件就是对于sql语句进行操作,两者之间是需要进行绑定的,然后就是就是对于SqlSession进行创建。我们手首先是对于SqlSessionFactory创建,然后就是SqlSession进行创建。。。)

http://www.xdnf.cn/news/5762.html

相关文章:

  • 994. 腐烂的橘子
  • MYSQL时间函数、group by 和partition by的区别、组内编号leetcode学习
  • GitHub 趋势日报 (2025年05月11日)
  • LeetCode热题100——链表
  • docker-compose的yml文件配置deploy参数失效use the ‘deploy‘ key, which will be ignored.
  • MIMO 检测(2)--噪声白化
  • 雷池WAF的身份认证 - 钉钉配置教程
  • hi3516cv610的VPSS_ONLINE支持在vpss做图片放大的操作吗
  • IT团队如何通过ManageEngine卓豪Endpoint Central有效管理远程终端
  • 解决echartsV5+ restore后echarts显示空白
  • 防火墙来回路径不一致导致的业务异常
  • 当用户在浏览器输入一个 URL 并访问服务器时, 这个请求是如何到达对应的 Servlet 的?
  • 基于大模型预测的吉兰 - 巴雷综合征综合诊疗方案研究报告大纲
  • 5.11 - 5.12 JDBC+Mybatis+StringBoot项目配置文件
  • 【NextPilot日志移植】日志写入流程
  • windows 在安装 Ubuntu-20.04 显示操作超时解决办法
  • PDM采集数字麦克风数据
  • linux CUDA与CUDNN安装教程
  • OrangePi Zero 3学习笔记(Android篇)7 - ftdi_sio
  • Spring框架(二)
  • 2025年渗透测试面试题总结-渗透测试红队面试八(题目+回答)
  • 使用 Kyverno 验证 Kubernetes 容器镜像:实用指南
  • AUTOSAR图解==>AUTOSAR_TR_AIMeasurementCalibrationDiagnostics
  • 软考 系统架构设计师系列知识点之杂项集萃(57)
  • IIS URL静态化 伪静态组件ISAPI_Rewrite安装配置 伪静态不生效解决办法 避坑版
  • 音视频学习:使用NDK编译FFmpeg动态库
  • 【002】renPy android端启动流程分析
  • 主播美颜API常见问题解析:兼容性、性能与SDK效果调优
  • 【MCP】其他MCP服务((GitHub)
  • 001大模型-认识大模型以及大模型应用场景