mybatis进阶篇-执行CRUD操作-typeAliases别名-接口绑定

目录结构

在这里插入图片描述

所需jar包

https://download.csdn.net/download/weixin_44201223/89160447?spm=1003.2166.3001.6637.1

1.创建数据表(book)

# 创建book表
create table book(
    id int auto_increment primary key,
    name varchar(255) ,
    price double ,
    num int
);

2.mybatis.xml配置文件

<?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">
    <!-- 声明可以使用的环境(如:开发环境(development),测试环境(testing),生产环境
(production),三个环境是系统开发的三个阶段:开发->测试->上线,其中生产环境也就是通常说的真实环境) -->
        <environment id="development">
        <!-- 使用原生 JDBC 事务 -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- POOLED数据源的配置, property配置JDBC四个变量-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/数据库"/>
                <property name="username" value="root"/>
                <property name="password" value="密码"/>
            </dataSource>
        </environment>
    </environments>
    <!-- MyBatis查找映射文件 -->
    <mappers>
        <mapper resource="dao/mapper/BookMapper.xml">
         </mapper>
    </mappers>
</configuration>

3.JDBCUtil封装

public class JDBCUtil {

    public static SqlSession getSqlSession() throws Exception{
    	//1.通过Resources查找全局mybatis配置文件
        InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
        //2.使用SqlSessionFactoryBuilder的使用工厂设计模式
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream );
        //3.生成SqlSession
        SqlSession sqlSession= sqlSessionFactory.openSession();
        //4.返回SqlSession
        return sqlSession;
    }

    public static void close(SqlSession session){
    	//资源关闭
        session.close();
    }
}

4.实体类(BookModel)

private int id;
    private String name;//书的名称
    private double price;//书的价格
    private int num;//书的数量

    public BookModel() {
    }

    public BookModel(String name, double price, int num) {
        this.name = name;
        this.price = price;
        this.num = num;
    }

    public BookModel(int id, String name, double price, int num) {
        this.id = id;
        this.name = name;
        this.price = price;
        this.num = num;
    }

    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 double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    @Override
    public String toString() {
        return "BookModel{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", price=" + price +
                ", num=" + num +
                '}';
    }

5.dao层接口

	//增删改默认返回类型为int,不需要设置
    /**
     * 添加图书
     * @param bookModel:添加类型
     * @return 1表示成功,0表示失败
     */
    int insertBook(BookModel bookModel);

    /**
     * 修改图书
     * @param bookModel:修改对象,以id为条件
     * @return 1表示成功,0表示失败
     */
    int updateBook(BookModel bookModel);

    /**
     * 根据id删除数据
     * @param id:删除数据的id
     * @return 1表示成功,0表示失败
     */
    int delectBook(int id);

    /**
     * 查看所有信息
     * @return :添加到集合中返回
     */
    List<BookModel> findAll();
	
	/**
     * 查询指定数据
     * @param map:根据书的名称,书的价格
     * @return 
     */
    BookModel findBook(Map<String,Object> map);
	
	/**
     * 分页查询:返回当前页的数据
     * @param map 传入参数为查询第几页,一页显示条数)
     * @return
     */
    List<BookModel> getBookListByPagePraram(Map<String,Integer> map);

6.dao层映射文件

<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="dao.BookDao">
	<!-- id:指定dao方法名
		 parameterType:传参类型
		 resultType:返回值类型
	-->
    <!-- 添加 -->
    <insert id="insertBook" parameterType="model.BookModel">
        insert into book(name, price, num) values(#{name},#{price},#{num})
    </insert>
	<!-- 修改  -->
    <update id="updateBook" parameterType="model.BookModel">
        update book set name = #{name} where id = #{id}
    </update>
	<!-- 删除(根据id) -->
    <delete id="delectBook" parameterType="int">
        delete from book where id = #{id}
    </delete>
    <!-- 查询所有 -->
    <select id="findAll" resultType="model.BookModel">
        select * from book
    </select>
	<!-- 查询(根据书的名称和书的价格 -->
    <select id="findBook" parameterType="map" resultType="model.BookModel">
        select * from book where name = #{name} and price = #{price}
    </select>
    <!-- 分页查询 -->
	<select id="getBookListByPagePraram" parameterType="map" resultType="model.BookModel">
        select * from book limit 2,2
    </select>
</mapper>

7.测试类

public class BookAppMain {
    public static void main(String[] args) throws Exception{
        //insertBook();
        //updateBook();
        //delectBook(3);
        //findBookAll();
        //findBook();
        //getBookListByPagePraram(2,2);
    }
    //添加
    public static void insertBook() throws Exception{
    	//获取SqlSession对象
        SqlSession sqlSession = JDBCUtil.getSqlSession();
        //初始化BookModel
        BookModel bookModel = new BookModel("斗破苍穹", 211, 1);
        //指定dao方法,传入BookModel实例,返回1/0
        int row = sqlSession.insert("dao.BookDao.insertBook",bookModel);
        //把最终的sql真正执行,必须添加,添加后才能在数据库中显示成功操作的数据
        sqlSession.commit();
        //释放资源
        JDBCUtil.close(sqlSession);
    }
    //修改
    public static void updateBook() throws Exception{
    	//获取SqlSession对象
        SqlSession sqlSession = JDBCUtil.getSqlSession();
        //初始化BookModel
        BookModel bookModel = new BookModel();
        bookModel.setId(3);
        bookModel.setName("一人之下");
        //未设置参数,保留原来数据
        sqlSession.update("dao.BookDao.updateBook",bookModel);
        //提交到数据库
        sqlSession.commit();
        //释放资源
        JDBCUtil.close(sqlSession);
    }
    //删除
    public static void delectBook(int id) throws  Exception{
    	//获取SqlSession对象
        SqlSession sqlSession = JDBCUtil.getSqlSession();
        //根据id删除
        sqlSession.delete("dao.BookDao.delectBook",id);
        //提交到数据库
        sqlSession.commit();
         //释放资源
        JDBCUtil.close(sqlSession);
    }
    //查看所有
    public static void findBookAll() throws Exception{
    	//获取SqlSession对象
        SqlSession sqlSession = JDBCUtil.getSqlSession();
        //查询到所有BookModel实例,映射到集合中
        //.selectList()返回值则为一个集合列表
        //.selectOne()返回值一个 Object 对象,返量一条数据或是一个变量值如 int...
        //.selectMap()查询结果中通过某列的值取到这行数据,通过 Map<key,resultType 控制>
        List<BookModel> list = sqlSession.selectList("dao.BookDao.findAll");
        //遍历集合
        for (BookModel book : list){
            System.out.println(book);
        }
        //查询操作可以不执行commit()方法
        //sqlSession.commit();
        //释放资源
        JDBCUtil.close(sqlSession);
    }
    //根据名称和价格查看
    public static void findBook() throws Exception{
    	//获取SqlSession对象
        SqlSession sqlSession = JDBCUtil.getSqlSession();
        //设置需要查询对象
        Map<String,Object> map = new HashMap<>();
        map.put("name", "斗罗大陆1");
        map.put("price", 58.0);
        //根据name,price查询
        BookModel bookModel = sqlSession.selectOne("dao.BookDao.findBook",map);
        //查询操作可以不执行commit()方法
        //sqlSession.commit();
        System.out.println(bookModel);
        //释放资源
        JDBCUtil.close(sqlSession);
    }
    //分页查询
    public static void getBookListByPagePraram(Integer pageName,Integer pageSize) throws Exception{
        SqlSession sqlSession = JDBCUtil.getSqlSession();
        Map<String, Integer> map = new HashMap<>();
        Integer pageStart = (pageName - 1);
        map.put("pageStart",pageStart);
        map.put("pageSize",pageSize);
        List<BookModel> list = sqlSession.selectList("dao.BookDao.getBookListByPagePraram", map);
        for (BookModel bookModel : list ){
            System.out.println("第" + pageName + "页:" + bookModel);
        }

    }

}

typeAliases 别名

自定义某个类别名

类型别名是为 Java 类型命名一个短的名字。它只和 XML 配置有关, 只用来减少类完全限定名的多余部分。在mybatis.xml设置typeAliases,注意放置位置顺序

	<typeAliases>
		<typeAlias type="类的路径" alias="别名"/>
	</typeAliases>

设置别名测试

mybatis.xml添加typeAliases

把model.BookModel路径起别名为Book

	<typeAliases>
        <typeAlias type="model.BookModel" alias="Book"/>
    </typeAliases>

在BookMapper.xml中使用别名

 <!-- <select id="findAll" resultType="model.BookModel">-->
    <select id="findAll" resultType="Book">
        select * from book;
    </select>

包下所有类命名为别名

给某个包下所有类起别名,别名为类名,不区分大小写, mybatis.xml 中配置

<!-- 加入包下的类名作为传递的别名 -->
	<typeAliases>
		<package name="包的路径"/>
	</typeAliases>

XXMapper.xml 中通过类名引用对应的 resultType=“User” 或是 resultType=“user”,不用在写包的路径

接口绑定

让创建好的对应接口与 mapper.xml 对应(对应是指:BookDao与BookrMapper.xml一一对应),由 mybatis 生成接口的实现类,通过调用接口对象获取到 Bookmapper.xml 中编写的 sql 方法。
框架的spring与mybatis结合正是使用此方式

	//修改上面添加方法,使用接口绑定方式
    public static void insertBook2() throws Exception{
        SqlSession sqlSession = JDBCUtil.getSqlSession();
        BookModel bookModel = new BookModel("大头儿子小头爸爸", 211, 1);
        //int row = sqlSession.insert("dao.BookDao.insertBook",bookModel);
        //接口绑定,绑定上路径地址,文件地址更改时,自动变更
        BookDao mapper = sqlSession.getMapper(BookDao.class);
        //相当于调用接口实现类方法一样,直接调用方法,添加参数
        int row = mapper.insertBook(bookModel);
        //把最终的sql真正执行,必须添加,添加后才能在数据库中显示成功操作的数据
        sqlSession.commit();
        System.out.println(row > 0 ? "添加成功" : "添加失败");
        JDBCUtil.close(sqlSession);
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/554429.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux OpenSSH最新版9.7p1升级操作详细教程

原创声明&#xff1a;非本人许可&#xff0c;谢绝转载&#xff01; 1.背景说明 前几天与朋友闲聊中得知他朋友圈有服务器因OpenSSH漏洞遭受攻击的事情&#xff0c;OpenSSH重要性这里就不废话了&#xff0c;在网上一查&#xff0c;公布的漏洞还真不少&#xff0c;其中还有不少…

RK3588平台开发系列讲解(PCIe开发篇2)

根据原理图填写DTS 原理图是基于IO信号的视⻆来描述硬件&#xff0c;IO信号是跟PHY的index强相关的&#xff0c;前⾯提到RK3588的controller和PHY的index可能不⼀致&#xff0c;所以看原理图的时候需要特别注意这⼀点。这⾥给出⼀些填写建议&#xff0c;并通过⽰例说明如何将原…

socket通信基础讲解及示例-C

socket通信之C篇 服务端与客户端简介 socket通信服务端与客户端通信模型通信实战server&#xff08;服务端&#xff09;创建client&#xff08;客户端&#xff09;创建 函数详解创建套接字 socket绑定端口bind进入监听状态listen获取客户端连接请求accept接收网络数据read发送数…

音素与视素(Viseme)

什么是视素&#xff08;视位&#xff09; 音素(Phoneme)&#xff0c;是人类语言中能够区别意义的最小声音单位。视素(Viseme)&#xff0c;是指与某一音素相对应的嘴、舌头、下腭等可视发音器官所处的状态。Viseme是MPEG-4 标准提出来的概念。 有时Viseme也翻译为视位。下面会…

JavaEE初阶Day 10:多线程(8)

目录 Day 10&#xff1a;多线程&#xff08;8&#xff09;单例模式阻塞队列1. 生产者消费者模型1.1 生产者消费者模型解耦合1.2 生产者消费者模型削峰填谷 2. 生产者消费者代码3. 阻塞队列实现 Day 10&#xff1a;多线程&#xff08;8&#xff09; 单例模式 单例模式&#xf…

springboot中mongodb连接池配置-源码分析

yml下spring.data.mongodb 以前mysql等在spring.xxx下配置&#xff0c;现在springboot新版本&#xff08;小编3.2.3&#xff09;在spring.data.xxx下了&#xff0c;如下所示&#xff0c;mongodb的配置在spring.data.mongodb下&#xff1a; 连接池相关参数配置-源码分析 拼接在…

vue3 删除对象中的属性,可以使用js里的delete,但需注意ts定义对象类型!

如上如&#xff0c;当使用delete 删除stateData中的属性时&#xff0c; 报错&#xff0c;意思为 TypeScript 错误“‘delete’ 运算符的操作数必须是可选的 什么原因呢&#xff1f;是因为我偷懒 缺少了ts定义类型 方法一&#xff1a; &#xff08;不推荐&#xff09; delete …

【网络安全 | 信息收集】JS文件信息收集工具LinkFinder安装使用教程

文章目录 前言安装教程使用教程 前言 JavaScript文件可能会泄露敏感信息&#xff0c;如注释中的机密信息、内部IP地址&#xff0c;以及包含未授权访问或其他漏洞的URL。手动检查这些信息效率低下&#xff0c;而该工具——LinkFinder&#xff0c;可用于自动收集JavaScript文件中…

Windows10系统中忘记MySQL数据库root权限登录密码

本文档所使用的MySQL版本为MySQL5.7>> mysqld_safe --skip-grant-tables&mysql -u root mysql在命令行中使用上面的命令登录MySQL&#xff0c;其中--skip-grant-tables允许用户跳过权限表进行无密码登录 >> UPDATE user SET authentication_stringPASSWORD(&q…

2024 年 Web 前端开发趋势

希腊哲学家赫拉克利特认为&#xff0c;变化是生命中唯一不变的东西。这句话适用于我们的个人生活、行业和职业领域。 尤其是前端开发领域&#xff0c;新技术、开发趋势、库和框架不断涌现&#xff0c;变化并不陌生。最近发生的一些事件正在改变开发人员构建网站和 Web 应用的方…

buuctf之ciscn_2019_c_1

ciscn_2019_c_1 一、查看属性二、静态分析三、动态分析四、思路五、exp 一、查看属性 首先还是必要的查看属性环节&#xff1a; 可以知道该文件是一个x86架构下的64位小端ELF文件&#xff0c;开启了栈不可执行&#xff08;NX&#xff09; 执行一下&#xff0c;先有一个选择&…

容联云QCon全球软件大会分享:大模型引领“营销服”创新实践

近日&#xff0c;QCon 全球软件开发大会正式召开。容联云大模型产品负责人唐兴才受邀出席&#xff0c;并分享营销服场景中&#xff0c;大模型的创新应用与实践。 唐兴才指出&#xff0c;在大模型浪潮的推动下&#xff0c;营销服场景正经历着前所未有的变革。面对激烈的市场竞争…

LineVul: 基于Transformer的行号级漏洞预测

文中提出一种基于Transformer的行号级漏洞预测方法 LineVul&#xff0c;以解决最先进的 IVDetect 方法的若干局限性。该方法通过对包含 188k C/C 函数的大规模真实数据集进行实证评估&#xff0c;LineVul 实现了&#xff1a;&#xff08;1&#xff09;函数级预测的 F1-measure …

sublime text的json快捷键

系统 macos 配置 sublime Text->Settings->Key Bindings 效果 可以看到&#xff0c;按&#xff1a;shiftcommandp&#xff0c;会出现快捷键窗口&#xff0c;打pretty&#xff0c;会出现Format JSON&#xff0c;最右侧显示⌘J&#xff0c;说明只需要macos的⌘和J同时按…

ASP.NET医院手麻信息系统源码 .NET6.0+VUE

目录 麻醉记录单 复苏记录单 麻醉文书 手术麻醉信息 1、 体征监控记录 2、 麻醉用药信息 3、 手术事件登记 4、 手术状态变更 5、 麻醉医师交接 6、 其他辅助操作 手麻信息系统是以服务围术期临床业务工作的开展为核心&#xff0c;通过与床边监护设备以及医院H…

物流单打印模板怎么设置,物流发货单打印软件操作教程

物流单打印模板怎么设置&#xff0c;物流发货单打印软件操作教程 一、前言 以下软件操作教程以&#xff0c;佳易王物流货运单管理系统软件为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 佳易王物流单管理系统软件直接在空白单上打印可以在卷纸…

AI论文速读 | 2024[VLDB]TFB:全面与公正的时间序列预测方法基准测试研究

论文标题&#xff1a;TFB: Towards Comprehensive and Fair Benchmarking of Time Series Forecasting Methods 作者&#xff1a;Xiangfei Qiu ; Jilin Hu&#xff08;胡吉林&#xff09; ; Lekui Zhou ; Xingjian Wu ; Junyang Du ; Buang Zhang ; Chenjuan Guo&#xff08;郭…

mybatisPlus数据字段填充

这里用到的时实体类User import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; import lombok.…

如何在ubuntu上使用clash

下载CLASH软件 修改配置文件 解压之后&#xff0c;将.env文件中的URL改为自己订阅的URL&#xff0c;然后再执行start.sh脚本 最后按照提示&#xff0c;将clash.sh添加到环境变量 如何修改端口 在start.sh中更改 祝大家在ubuntu上玩得开心

多高的学历才能轻松找到工作?这个热点有点扯吧~

先来唠唠 昨天刷脉脉的时候&#xff0c;热榜第一的内容吸引了我&#xff1a;多高的学历才能轻松找到工作&#xff1f; 现在这行情&#xff0c;不管多高得学历都很难说能轻松找到工作吧~ 评论区也有不少小伙伴发表自己的见解&#xff0c;比如&#xff1a; 学历固然是非常重要…