【JavaWeb_Part05】JDBC?弱爆了,看看轻量级的 Mybatis FreeStyle

2023-10-29

开篇

上篇文章我们已经讲了 Mybatis 的入门以及简单的对单表进行增删改查,那么今天我们就来讲一下使用 mybatis 开发dao的两种方式以及 mysql 比较厉害的动态 sql。

利用 mybatis 开发 DAO

1. 原始的方式开发DAO

主要完成功能

  1. 根据用户 id 查询用户信息

  2. 根据用户姓名查询用户列表

  3. 插入用户

  4. 新建一个接口 User1Dao.java 和一个实现类 User1DaoImpl.java,并在 User1Dao 中添加如下方法

User1Dao.java

public interface UserDao {

    //根据用户id 查询用户
    User findUserById(Integer id);
    //根据用户名称查询用户列表
    List<User> findUserByName(String name);
    //插入用户
    void insertUser(User user);
}

  1. 在实现类中实现如下方法
    User1DaoImpl.java
public class User1DaoImpl implements UserDao{
    private static SqlSessionFactory factory;

    static {
        String resource = "SqlMapConfig.xml";
        InputStream inputStream = null;
        try {
            inputStream = Resources.getResourceAsStream(resource);
            factory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public User findUserById(Integer id) {
        SqlSession session = factory.openSession();
        User user= session.selectOne("test.findUserById", id);

        return user;
    }

    @Override
    public List<User> findUserByName(String name) {
        SqlSession session = factory.openSession();
        List<User> userList = session.selectList("test.findUserByName", name);
        return userList;
    }

    @Override
    public void insertUser(User user) {
        SqlSession session = factory.openSession();
        session.insert("test.insertUser", user);
        session.commit();
    }
}

注意

只有查询方法不用提交事务,其他的,比如增加,删除,更新等操作都要执行 session.close() 方法。

  1. 新建测试类 TestDao1.java
public class TestDao1 {

    @Test
    public void testFindUserById(){
        System.out.println(new User1DaoImpl().findUserById(6));
    }

    @Test
    public void testFindUserByName(){
        List<User> userList = new User1DaoImpl().findUserByName("二");
        for (User user :
                userList) {
            System.out.println(user);
        }
    }

    @Test
    public void testInsertUser(){
        User user = new User();
        user.setName("李二牛");
        user.setAddress("湖北武汉");
        user.setSex("1");
        new User1DaoImpl().insertUser(user);
    }
}

以上的结果就非常简单了,在这里我就不贴图了,相信小伙伴们都可以看得明白。这就是原生的 Dao 的开发方式,实际上还是有点麻烦的。这里省略了 service 层,这种原生的开发方式我们只要知道怎么写就可以了,在实际工作中我们并不会使用这种方式来开发。

2.使用 Mapper 的动态代理的方式开发 DAO

Mapper 接口开发方法只需要程序员编写 Mapper 接口(相当于 Dao 接口),由 mybatis 框架家根据接口定义创建接口的动态代理对象, 代理对象的方式同上边 Dao 接口实现类方法。这种方式简单的多,但是有一定的规则。具体规则如下:

Mapper.xml 文件中的 namespace 于 mapper 接口的类路径相同。
Mapper 接口方法名和 Mapper.xml 中定义的每个 Statement 的 id 相同。
Mapper 接口方法点的输入参数类型和 Mapper.xml 中定义的每个 sql 的 parameterType 的类型相同。
Mapper 接口方法的输出参数类型和 Mapper.xml 中定义的每个 sql 的 resultType 的类型相同。

有了上面的规则,我们就开始编写 Mapper.xml 映射文件

Mapper.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="com.student.mybatis.mapper.UserMapper">
    <select id="findUserById" parameterType="int" resultType="user">
        select * from user where uid = #{uid}
    </select>

    <select id="findUserByName" parameterType="string" resultType="user">
        select * from user where name LIKE '%${value}%'
    </select>

    <delete id="deleteUserById" parameterType="int">
        delete from user where uid = #{uid}
    </delete>

    <insert id="insertUser" parameterType="user">
        <selectKey keyProperty="uid" resultType="int" order="AFTER">
            SELECT LAST_INSERT_ID()
        </selectKey>
        insert into user(name, sex, address) values (#{name}, #{sex}, #{address});
    </insert>

    <update id="updateUserById" parameterType="user">
        update user set name = #{name} where uid = #{id};
    </update>
</mapper>

注意:namespace 要改成 UserMapper 这个接口的全路径。

UserMapper.java

public interface UserMapper {

    User findUserById(Integer id);

    List<User> findUserByName(String name);

    void insertUser(User user);
}

切记:需要在 SqlMapConfig.xml 中引入 UserMapper.xml 文件,否则会报错。

<!--批量引入mapper文件 -->
<package name="com.student.mybatis.mapper"/>

测试类 TestMapper.java

public class TestMapper {
    private SqlSessionFactory factory;

    @Before
    public void setUP() throws Exception{
        String resources = "SqlMapConfig.xml";
        InputStream inputStrea
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【JavaWeb_Part05】JDBC?弱爆了,看看轻量级的 Mybatis FreeStyle 的相关文章

随机推荐

  • windows无法访问FTP服务器的各种报错解决

    本文转载自windows无法访问FTP服务器的各种报错解决 对于windows无法访问FTP服务 原因有很多 但首先要保证 你的服务配置无误 用户有访问资源的权限 防火墙拦截 服务器防火墙通行了 忽略了客户端的防火墙可不行 对于不信任的连接
  • special effects - 樱花飘落背景特效

    樱花飘落背景特效 一 效果图 二 实现代码 一 效果图 二 实现代码
  • VPS是虚拟专用服务器,部署VPS包括以下步骤

    VPS是虚拟专用服务器 部署VPS包括以下步骤 购买VPS主机 选择可靠的云服务提供商 如亚马逊AWS 谷歌云 腾讯云或阿里云 并注册账户和创建VPS实例 为了确保您的应用程序在运行过程中具有快速的性能和可靠的服务级别协议 请评估不同主机计
  • Intel TBB简介及在Windows7 VS2013上源码的编译过程

    Intel TBB Intel Threading Building Blocks 是Intel线程构建块开源库 它的License是Apache 2 0 Intel TBB是一种用于并行编程的基于C 语言的框架 它是一套C 模板库 它提供
  • 【http协议】超详细介绍

    文章目录 一 协议 1 1 Method 1 1 1 HEAD 1 2 Status 1 3 Http Head Http 头 1 3 1 Http Request Body 1 3 1 1 Content Type 1 3 1 2 miu
  • 浅谈Web用户体验(二)

    在所有网页或浏览器的GUI中我最喜欢的是google的用户体验效果 平时我们只把它作为搜索工具 从没仔细欣赏过它的设计细节 有篇博客对google的用户体验总结的非常好 google的设计一向以简单著称 让页面清爽优雅地呈现 一方面减少页面
  • Notepad++找回缓存的内容

    场景 在使用Notepad 的时候 有一个非常方便的自动保存功能 也就是你在新建一个文档后 输入你的内容 在你没有手动保存前 Notepad 会帮你保存当前内容 当你没有保存就退出Notepad 下次进来Notepad 会自动把你上次编辑的
  • 图像处理之三角法图像二值化

    图像处理之三角法图像二值化 三角法求阈值最早见于Zack的论文 Automatic measurement of sister chromatid exchange frequency 主要是用于染色体的研究 该方法是使用直方图数据 基于纯
  • mybatis常见的报错点总结

    1 invalid comparison java util Date and java lang String 错误代码 正确代码 错误原因 将日期格式和字符串进行了比较 2 NumberFormatException 错误代码 正确代码
  • IDEA项目编写到一半 突然Install报错Cannot resolve org.apache.maven.plugins:maven-compiler-plugin:X.X.X

    描述 是一次很蛇皮的踩坑经历 原因很简单 但是太容易中招了 简单记录一下 项目没有做热部署 添加完一个CRUD的接口后 重启项目测试 突然就报错了 mvn clear install也没用 Cannot resolve org apache
  • 笔试真题解析

    恭喜发现宝藏 搜索公众号 TechGuide 回复公司名 解锁更多新鲜好文和互联网大厂的笔经面经 作者 TechGuide 全网同名 订阅专栏 进阶版 2023最新大厂笔试真题 题解 不容错过的宝藏资源 第一题 服务器能耗统计 100分 题
  • Fine BI、Smart BI、永洪BI、瓴羊Quick BI这些国产BI工具,都擅长哪些功能?

    近几年 随着国内大数据的火热 商业智能BI工具市场也迎来了大爆发 市面上涌现出了各种各样的BI工具 让很多企业在选择BI工具的时候遇上了 选择困难症 在最初 大多数企业都会选择Tableau 微软Power BI等外国公司的BI工具 然而
  • ARouter(七) 依赖注入

    当你从FirstActivity跳到SecondActivity 有时需要把参数值放在intent里面传过去 ARouter的依赖注入会帮你在SecondActivity里面的属性直接赋好参数值 当然需要你事先在SecondActivity
  • 西瓜书-3.9,3.10理解过程-线性模型

    许多人对3 9公式不理解 其实 min右侧只是用矩阵的形式表示了均方差的概念 大家可以结合矩阵的乘法运算举个例子试试 argmin表示右侧式子最小时w取得的值 我们的目标就是求出这个向量w 需要注意的是 实际问题中 我们的样例数可能很少 而
  • GPU基础与CUDA编程入门

    文章目录 一 GPU和CPU的区别 GPU 高吞吐量导向设计 CPU 低延迟导向设计 GPU适合什么场景 什么是Prefetch 二 CUDA与OpenCL 三 CUDA编程并行计算整体流程 内存模型 线程块 网格Grid 并行线程块组合
  • 【Python解题1】PAT 乙级1055 集体照(详解)测试点345错误原因分析

    题目传送门 语言 python3 9 编译工具 pycharm 社区版 输入样例 10 3 Tom 188 Mike 170 Eva 168 Tim 160 Joe 190 Ann 168 Bob 175 Nick 186 Amy 160
  • 《C++ System Programming Cookbook》第二章读书笔记

    第二章 C 重要知识点回顾 C primitive types 原生数据类型 char int float double wchar t bool void nullptr t 可用numeraic limits检查范围 sizeof检查大
  • 【翻译】如何在你的IT转型中浪费数以亿计的资金

    你担任范德雷工业公司的首席执行官已经有几年时间了 这是一家在运输领域存在了几十年的巨无霸 真正的战略 你真的希望股价能尽快上涨 这样你就可以在命运之轮转动之前 在最佳的时间点卖掉你的股票 而董事会也不可避免地要把你赶走 你已经厌倦了蒲公英
  • 甘特图排程组件开发(TsyGantt)

    甘特图在Project2000中 很是好用 可是我想在项目开发中还要买了MS的Project2000的版权 所以索性自己开发一套相关的组件
  • 【JavaWeb_Part05】JDBC?弱爆了,看看轻量级的 Mybatis FreeStyle

    开篇 上篇文章我们已经讲了 Mybatis 的入门以及简单的对单表进行增删改查 那么今天我们就来讲一下使用 mybatis 开发dao的两种方式以及 mysql 比较厉害的动态 sql 利用 mybatis 开发 DAO 1 原始的方式开发