MyBatis

MyBatis是一款优秀的持久层框架,用于简化JDBC开发

持久层:

负责将数据到保存到数据库的那一层代码

JavaEE三层架构:表现层、业务层、持久层

框架:

框架就是一个半成品软件,是一套可重用的、通用的、软件基础代码模型

在框架的基础之上构建软件编写更加高效、规范、通用、可扩展

1,模板

其中:

(1)logback.xml

XML 复制代码
<?xml version="1.0" encoding="UTF-8"?>
   <configuration>
       <!--
           CONSOLE :表示当前的日志信息是可以输出到控制台的。
       -->
       <appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
           <encoder>
               <pattern>【%level】 %blue(%d{HH:mm:ss.SSS}) %cyan(【%thread】) %boldGreen(%logger{15}) - %msg %n</pattern>
           </encoder>
       </appender>
   
       <logger name="com.itheima" level="DEBUG" additivity="false">
           <appender-ref ref="Console"/>
       </logger>

       <root level="DEBUG">
           <appender-ref ref="Console"/>
       </root>
   </configuration>

(2)mybatis-config.xml

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:///mybatis?useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="111111"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="UserMapper.xml"/>
    </mappers>
</configuration>

(3)UserMapper.xml

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="test">
    <select id="selectAll" resultType="com.jaa.pojo.User">
        select * from tb_user;
    </select>
</mapper>
java 复制代码
public class MyBatisDemo {
    public static void main(String[] args) throws IOException{
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        SqlSession sqlSession=sqlSessionFactory.openSession();


        List<User> users=sqlSession.selectList("test.selectAll");

        System.out.println(users);

        sqlSession.close();
    }
}

2,解决SQL映射文件的警告提示

产生原因:ldea和数据库没有建立连接,不识别表信息

解决方式:在ldea中配置MySQL数据库连接

3,Mapper代理开发

目的:

解决原生方式中的硬编码

简化后期执行SQL

java 复制代码
List<User> users = sqlSession.selectList("test.selectAll");

//获取UserMapper接口的代理对象 UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
List<User> users=userMapper.selectAll();
XML 复制代码
 <typeAliases>
        <package name="com.jaa.pojo"/>
    </typeAliases>
XML 复制代码
<select id="selectAll" resultType="user">

其中package name会简化resultType的代码,更加简洁

4,配置文件完成功能列表清单

要完成的功能列表清单:

1.查询

查询所有数据

查看详情

条件查询

2.添加

3.修改

修改全部字段

修改动态字段

4.删除

删除一个

批量删除

MybatisX是一款基于IDEA的快速开发插件,为效率而生。

主要功能:

XML和接口方法相互跳转

根据接口方法生成statement

5,查询

(1)查询所有

1.编写接口方法: Mapper接口

参数:无

结果:List<Brand>

2.编写SQL语句:SQL映射文件

3.执行方法,测试

java 复制代码
    @Test
    public void testSelectAll() throws IOException {
        //1.获取sqlSessionFactory
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //2.获取SqlSessionFactory对象
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //3.获取Mapper的代理对象
        BrandMapper brandMapper=sqlSession.getMapper(BrandMapper.class);

        //4.执行方法
        List<Brand> brands=brandMapper.selectAll();
        System.out.println(brands);

        //5.释放资源
        sqlSession.close();
    }

实体类属性名和数据库表列名不一致,不能自动封装数据

1)起别名:在SQL语句中,对不一样的列名起别名,别名和实体类属性名一样*可以定义<sql>片段,提升复用性

  1. resultMap:定义<resultMap>完成不一致的属性名和列名的映射

id:主键字段的映射

result:一般字段的映射

XML 复制代码
   <resultMap id="brandResultMap" type="brand">
       <result column="brand_name" property="brandName"/>
       <result column="company_name" property="companyName"/>
   </resultMap>


    <select id="selectAll" resultMap="brandResultMap">
    select
        *
    from tb_brand;

    </select>

(2)查看详情

XML 复制代码
    <select id="selectById" resultMap="brandResultMap">
        select *
        from tb_brand where id=#{id};
    </select>

参数占位符:

1.#{}:会将其替换成?,为了防止sql注入问题

2.${}:拼sql,会存在sql注入问题

3.使用时机:

参数传递的时候:#{}

表格或者列名不固定的情况下:${}

特殊字符处理:

1.转义文字:<替代成&lt;

2.CDATA区:<替代成<!CDATA\[ \< ]>

相关推荐
CJi0NG7 小时前
【自用】MySQL-多表查询
数据库·mysql
雨落在了我的手上7 小时前
MySQL数据库基础(12):事务
数据库·mysql
D姐聊门店7 小时前
门店收银系统断网兜底怎么设计:本地账本、离线续传与日终对账的工程实现
数据库·saas
用户8662978480087 小时前
抓包看 KingbaseES 内部协议?官方给了个现成工具
数据库
wefg17 小时前
【Redis】安装与启动
数据库·redis·缓存
大圣编蚕8 小时前
常见的 Redis 面试题(高频整理)
数据库·redis·缓存
派小心.8 小时前
网站统计采样数据的误差核对
大数据·服务器·前端·数据库·人工智能·小程序·数据分析
龙腾AI白云9 小时前
数字孪生、具身智能、世界模型三者交叉
数据库·人工智能·机器学习·flask·pygame
SelectDB技术团队9 小时前
Apache Doris 基于 Lance 的向量检索深度解析
数据库·数据仓库·数据分析·湖仓一体·apache doris·lakehouse·多模湖仓
这个DBA有点耶9 小时前
从INDEX到JOIN_ORDER:MySQL 8.0 Hint语法体系与五类实战场景
数据库·mysql·架构