mybatis02

发布于:2025-06-03 ⋅ 阅读:(27) ⋅ 点赞:(0)

一、搭建环境

1.引入jar包

mysql.jar
mybatis.jar

2.补全结构

com.hl.pojo
com.hl.mapper
mybatis-config.xml 
sqlMapper.xml

3.测试类

加载myabtis核心配置文件,得到IO流  Resources
创建sqlSessionFactory   SqlsessionFactoryBuilder
SqlSession session = sqlSessionFactory.openSession()
//获取mapper接口
调用mapper方法
//关闭流

二、核心配置文件

<?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>
    <!--引入外部配置文件-->
    <properties resource="db.properties"></properties>

    <!--设置-->
    <settings>
        <!--下划线到驼峰式命名法自动映射-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>

    <!--类型起别名-->
    <typeAliases>
        <!--type="类型" alias="别名"-->
        <!--针对每一个javabean分别起别名-->
<!--        <typeAlias type="com.hl.mybatis02.pojo.Student" alias="student"></typeAlias>-->
        <!--统一起别名   别名默认为类名  不区分大小写-->
        <package name="com.hl.mybatis02.pojo" />
    </typeAliases>
    <!--数据库环境-->
    <environments default="dev">
        <environment id="dev">
            <transactionManager type="jdbc"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--mappers映射器-->
    <mappers>
        <!--sqlMapper文件位置-->
<!--        <mapper resource="com/hl/mybatis02/mapper/GoodsMapper.xml"></mapper>-->
        <!--指向mapper接口位置-->
<!--        <mapper class="com.hl.mybatis02.mapper.GoodsMapper"></mapper>-->
<!--        <mapper class="com.hl.mybatis02.mapper.ItemMapper"></mapper>-->
        <!--指向mapper包的位置,统一扫描该包下所有接口-->
        <package name="com.hl.mybatis02.mapper"/>
    </mappers>
</configuration>

三、核心类(测试类)

四、缓存机制

缓存:多次执行相同dql,第一次走数据库表查询,第二次不再执行sql语句,直接从缓存区中获取数据。

4.1一级缓存

默认已开启,可以直接使用,属于sqlSession级别的缓存。

4.2二级缓存

默认没有开启,需要手动在mybatis配置文件中开启,属于sqlSessionFactory级别的缓存。

<!--开启当前命名空间的二级缓存-->
<cache></cache>

4.3清理缓存

java代码清理缓存

session.clearCache();

sqlMapper文件清理缓存  

<!--    //查询 下划线到驼峰式命名法的映射-->
<!--    public List<Student> listAll();
        useCache="false"  禁用当前sql语句的二级缓存
        flushCache="true"  清空缓存区数据  导致一级缓存和二级缓存失效
-->
    <select id="listAll" resultType="student"  useCache="false">
        select * from student
    </select>

五、sqlMapper文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--命名空间 唯一标识-->
<mapper namespace="com.hl.mybatis02.mapper.StudentMapper">
        <!--    测试自增主键的生成
        useGeneratedKeys="true"  获取自动生成的主键
        keyProperty="studentId"  主键对应的属性名
        -->
<!--    public int insertStudent(Student student);-->
    <insert id="insertStudent" useGeneratedKeys="true" keyProperty="studentId">
        insert into student(name,gender,birth_date,class_id,enrollment_date)
        values (#{name},#{gender},#{birthDate},#{classId},now())
    </insert>

<!--    //查询 下划线到驼峰式命名法的映射-->
<!--    public List<Student> listAll(); -->
    <select id="listAll" resultType="student">
        select * from student
    </select>
</mapper>

六、单参数传递和多参数

//测试自增主键的生成
public int insertStudent(@Param("stu") Student student);
//查询 下划线到驼峰式命名法的映射
public List<Student> listAll();
//多个参数
public List<Student> findStudents(@Param("name") String name,
                                  @Param("phone") String phone);
//单个参数
public Student findStudentById(@Param("id") int id);
<!--命名空间 唯一标识-->
<mapper namespace="com.hl.mybatis02.mapper.StudentMapper">
        <!--    测试自增主键的生成
        useGeneratedKeys="true"  获取自动生成的主键
        keyProperty="studentId"  主键对应的属性名
        -->
<!--    public int insertStudent(Student student);-->
    <insert id="insertStudent" useGeneratedKeys="true" keyProperty="studentId">
        insert into student(name,gender,birth_date,class_id,enrollment_date)
        values (#{stu.name},#{stu.gender},#{stu.birthDate},#{stu.classId},now())
    </insert>

<!--    //查询 下划线到驼峰式命名法的映射-->
<!--    public List<Student> listAll(); -->
    <select id="listAll" resultType="student">
        select * from student
    </select>

    <!-- //多个参数
    public List<Student> findStudents(String name,String phone);
    -->
    <select id="findStudents" resultType="Student">
        select * from student where name=#{name} and phone=#{phone}
    </select>
    <!--public Student findStudentById(int id);-->
    <select id="findStudentById" resultType="Student">
        select * from student where student_id=#{id}
    </select>

</mapper>

 

七、mybatis中Statement和preparedStatement

statementType="PREPARED" 默认 使用预编译 STATEMENT sql字符串拼接 CALLABLE 调用存储过程

<!-- //多个参数
public List<Student> findStudents(String name,String phone);
statementType="PREPARED" 默认 使用预编译
               STATEMENT sql字符串拼接
               CALLABLE  调用存储过程
-->
<select id="findStudents" resultType="Student">
    select * from student where name like concat('%',#{name},'%') or phone=#{phone}
</select>
<!--public Student findStudentById(int id);-->
<select id="findStudentById" resultType="Student" statementType="STATEMENT">
    select * from student where student_id=${id}
</select>

作业

1、掌握环境搭建

步骤 操作 说明
1 添加依赖 <dependency> 中加入 mybatis 和数据库驱动
2 创建配置文件 mybatis-config.xml 配置数据源和映射文件
3 创建映射文件 XXXMapper.xml 定义SQL语句
4 创建实体类 与数据库表对应的POJO类
5 创建SqlSessionFactory 通过配置文件构建
6 获取SqlSession 通过工厂实例获取会话

MyBatis环境搭建首先需要引入核心依赖,包括MyBatis框架和对应的数据库驱动。然后创建mybatis-config.xml配置文件来设置数据源、事务管理器和Mapper文件位置。接着定义实体类和Mapper接口,并为每个Mapper接口编写XML映射文件来配置SQL语句和结果映射。最后通过SqlSessionFactoryBuilder构建SqlSessionFactory,就可以获取SqlSession执行数据库操作了。 

2、掌握单个参数、多个参数的增删改查

参数类型 示例 说明
单个基本类型 @Param("id") int id 可直接用#{id}引用
多个参数 (String name, int age) 需用@Param或param1/param2
POJO对象 User user 直接使用属性名#{userName}
Map集合 Map<String,Object> 使用key值#{name}
集合/数组 List<Integer> ids 使用foreach遍历

对于增删改查操作,单个参数直接在XML中使用#{}引用即可。多个参数建议使用@Param注解明确指定参数名,或者在接口方法中使用Map作为参数传递。增删改查分别对应insert、delete、update和select标签,需要注意正确设置参数类型和返回类型。 

3、缓存机制 (一级、二级缓存特点)

MyBatis的缓存分为一级缓存和二级缓存。一级缓存是SqlSession级别的,默认开启,同一个SqlSession中相同的查询会直接从缓存返回结果。二级缓存是Mapper级别的,需要手动开启,多个SqlSession可以共享,适用于读多写少的场景,但要注意数据一致性问题。

4、mybatis核心配置文件 常见的配置项

mybatis-config.xml是核心配置文件,主要配置数据源信息、类型别名、全局设置和映射器注册。这些配置为MyBatis运行提供了基础环境和默认行为。

5、#和$的区别?(重点)

区别点 #(占位符) $(拼接符)
处理方式 预编译处理,防止SQL注入 字符串替换,直接拼接到SQL中
参数类型 自动添加引号(字符串) 原样输出,不添加引号
安全性 低,有SQL注入风险
使用场景 参数值传递 动态表名、列名等非参数值场景
性能 高(预编译SQL可重用) 低(每次SQL都不同)

 #和$的主要区别在于处理方式。#采用预编译处理,能防止SQL注入,适合传递参数值;$是直接字符串替换,有SQL注入风险,一般用于动态表名、列名等非参数值场景。实际开发中应该优先使用#。

6、sqlMapper文件新增返回自增主键

<!--useGeneratedKeys="true"  获取自动生成的主键
        keyProperty="studentId"  主键对应的属性名-->
    <insert id="insertStudent" useGeneratedKeys="true" keyProperty="studentId">
        insert into student(name,gender,birth_date,class_id,enrollment_date)
        values (#{name},#{gender},#{birthDate},#{classId},now())
    </insert>

7、预习 动态sql和多表关联映射

动态sql


网站公告

今日签到

点亮在社区的每一天
去签到