mybatis

发布时间 2023-06-01 09:00:10作者: 梦浅
MyBatis的基本使用
MyBatis类中编写:
//1、加载mybatis的核心配置文件,获取 SqlSessionFactory
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

//2、使用 SqlSessionFactory 获取 SqlSession 对象,用它来执行sql
SqlSession sqlSession = sqlSessionFactory.openSession();

//3、执行sql
List<User> user = sqlSession.selectList("test.selectAll");
System.out.println(user);

//4、释放资源
sqlSession.close();

 

Mapper代理开发

优势;

首先它不依赖于字符串字面值,会更安全一点;其次,如果你的 IDE 有代码补全功能,那么代码补全可以帮你快速选择到映射好的 SQL 语句。

 

Mapper代理方式

1、定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下

2、设置SQL映射文件的namespace属性为Mapper接口全限定名

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

4、编码

  1、通过SqlSession的getMapper方法获取Mapper接口的代理对象

  2、调用对应方法完成sql的执行

 

注:如果Mapper接口名称和SQL映射文件名称相同,并在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载

 

MyBatis核心文件配置:

mybatis-config.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>
<!--
注意:顺序不能弄错 顺序查看 https://mybatis.org/mybatis-3/zh/configuration.html#typeAliases

类型别名(typeAliases) 可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写 。在此加上之后,mybatis会扫描这个包下的实体类,并起别名
每一个在包 com.song.pojo 中的实体类,在没有注解的情况下,会使用实体类的首字母小写的非限定类名来作为它的别名。
-->
<typeAliases>
<package name="com.song.pojo"/>
</typeAliases>
<!-- environments:配置数据库连接环境信息。可以配置多个environment,通过default属性切换不同的environment -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!--数据库连接信息-->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///ssm?useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="12345678"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--加载sql映射文件-->
<mapper resource="com/song/mapper/UserMapper.xml"/>
</mappers>
</configuration>

 

SQL映射文件配置:

如查询User表

UserMapper.xml:

<?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">
<!--namespace:名称空间-->
<mapper namespace="com.song.mapper.UserMapper">
<!--查User全部-->
<select id="selectAll" resultType="user"> <!--别名不区分大小写 若不使用别名,此处则需填写 com.song.pojo.User 否则报错-->
select * from user
</select>

</mapper>


处理数据库中表字段名称与实体类名称不一致的情况,使它自动封装数据

注意:下面代码放在mapper标签中

<!--数据库表的字段名称  和    实体类的属性名称   不一致,不能自动封装数据
  处理方式
    1、起别名:对不一样的列名起别名,让别名和实体类的属性名一样
      缺点:每次查询都要定义一次别名
    2、sql片段
      缺点:不灵活
    3、resultMap:
      定义<result Map>标签
      在<select>标签中,使用resultMap属性替换 resultType属性-->
<!-- id:唯一标识 type:映射的类型,支持别名 -->
<resultMap id="userResultMap" type="com.song.pojo.User">
<!--
id:完成主键字段的映射
column:表的列名
property:实体类的属性名
result:完成一般字段的映射
column:表的列名
property:实体类的属性名
-->
<result column="user_name" property="username"/>
</resultMap>