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[ < ]]>

相关推荐
科技小花4 小时前
数据治理平台架构演进观察:AI原生设计如何重构企业数据管理范式
数据库·重构·架构·数据治理·ai-native·ai原生
一江寒逸4 小时前
零基础从入门到精通MySQL(中篇):进阶篇——吃透多表查询、事务核心与高级特性,搞定复杂业务SQL
数据库·sql·mysql
凯尔萨厮4 小时前
创建SpringWeb项目(Spring2.0)
spring·mvc·mybatis
D4c-lovetrain4 小时前
linux个人心得22 (mysql)
数据库·mysql
阿里小阿希4 小时前
CentOS7 PostgreSQL 9.2 升级到 15 完整教程
数据库·postgresql
荒川之神4 小时前
Oracle 数据仓库雪花模型设计(完整实战方案)
数据库·数据仓库·oracle
做个文艺程序员5 小时前
MySQL安全加固十大硬核操作
数据库·mysql·安全
不吃香菜学java5 小时前
Redis简单应用
数据库·spring boot·tomcat·maven
一个天蝎座 白勺 程序猿5 小时前
Apache IoTDB(15):IoTDB查询写回(INTO子句)深度解析——从语法到实战的ETL全链路指南
数据库·apache·etl·iotdb
不知名的老吴5 小时前
Redis的延迟瓶颈:TCP栈开销无法避免
数据库·redis·缓存