MyBatis

作者: 扶光_ | 来源:发表于2023-10-19 15:55 被阅读0次

MyBatis是简化JDBC开发的一款优秀的持久型框架
javaEE三层架构:表现层 业务层 持久层
表现层:是将结果展示到页面上的那一层代码
业务层:应用程序的核心逻辑,负责处理业务流程和实现业务规则
持久层就是负责将数据保存到数据库的那一层代码
mybatis官网

一,MyBatis的快速入门

1.首先在pom.xml中导入mybatis依赖
2.在resources创建一个名为mybatis-config,xml的配置文件,写入以下代码


image.png
<?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:///db1?useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="1234"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
<!--        加载sql映射文件-->
        <mapper resource="org/mybatis/example/BlogMapper.xml"/>
    </mappers>
</configuration>

第三步 你如果想操作数据库中的那个表 ,就对应在resources目录下创建xml的文件


image.png

放以下代码

<?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="111">
    //id是sql语句的唯一标识   resultType是返回结果的类型
    <select id="selectBlog" resultType="Blog">
        select * from Blog where id = #{id}
    </select>
</mapper>

第四步 然后在测试类中写

    public static void main(String[] args) throws Exception {
        //1.加载mybatis的核心配置文件,获取SqlSessionFactory
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //2 获取SqlSession对象 用来执行sql
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //执行sql,返回list集合
        List<Emp> emps =  sqlSession.selectList("one.selectAll");
        System.out.println(emps);
        sqlSession.close();
    }

二,使用Mapper代理的形式来执行sql语句

目的是解决原生方式的硬解码,简化后期执行sql

  • 1 定义与SQL映射文件同名的Mapper接口,要放在同一目录下.


    放在同一目录下

    但为什么不放在一个文件夹呢 ,因为这样方便管理,配置文件统一用配置文件夹下


    注意事项
  • 2 设置SQL映射文件的namespace属性为Mapper接口全限定名


    image.png
  • 3 在Mapper接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致


    image.png
  • 4编码
 //获取empMapper接口的代理对象
        empMapper mapper = sqlSession.getMapper(empMapper.class);
        List<Emp> emps = mapper.selectAll();
        System.out.println(emps);
        sqlSession.close();
  <!--        加载sql映射文件  操作一个表就需要引入一个 -->
<!--        <mapper resource="com/it/Mapper/empMapper.xml"/>-->

<!--   mapper代理方式加载  不管你管理多少表 我都会从这个mapper包下拿到    -->
        <package name="com.it.Mapper"/>

2.3 配置文件完成增删改查

首先安装一个mybatisX插件
1 可以方便我们在接口和配置文件中切换
2 根据接口方法自动在配置文件中生成标签(statement)


image.png

2.4 查询所有数据

查询的时候数据库字段名和pojo实体类属性名称需要一致,要不然不能自动封装数据
但可以在SQL语句中添加别名来跟pojo定义的实体类属性名一致
缺点每次查询都要写别名很麻烦

image.png

resultMap

  • 1 定义<resultMap>标签
  • 2 在<select>标签中,使用resultMap属性替换,resultType属性

2.5 查询详细数据

根据id判断那条数据的详细信息


image.png

{}参数占位符防止sql注入问题

sql语句的特殊字符不可以识别,所以可以使用CDATA区

<![CDATA[
<
]>
多条件查询

2.6 动态sql

如我们多条件查询的时候,比如要查名字为华为,价格大于3000的手机,此时我们的SQL语句是
select * from brand where brand_name = '华为' and price > 3000;

那么当用户只输入一个条件而不输出另一个条件时,这条SQL语句就会崩掉
所以提供了
if
choose (when, otherwise)
trim (where, set)
foreach

select * from  brand 
<where>
<if test=" brand_name!=null and  brand_name!=' ' ">
 brand_name = '华为' 
</if>
<if  test=" price!= null  ">
 and price > 3000;
</if>
</where>
  • if条件判断
    • test 逻辑表达式

2.7添加数据

image.png

2.8主键返回

就是当添加到数据库的数据我们就拿不到他的id信息了
比如订单和订单项的关联
添加订单项需要设置所属的订单id


image.png

2.9修改

  • 1修改全部字段


    修改全部字段
  • 2 修改动态字段


    image.png

2.10删除功能

删除根据id删除


image.png

相关文章

网友评论

      本文标题:MyBatis

      本文链接:https://www.haomeiwen.com/subject/fptcidtx.html