使用Mybatis
- 编写实体类
- 编写核心配置文件
- 编写接口
- 编写Mapper.xml
- 测试
使用Mybatis
配置文件
1、主配置文件
代码如下
<?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><!-- 配置 -->
<properties/><!-- 属性 -->
<settings/><!-- 设置 -->
<typeAliases/><!-- 类型别名 -->
<typeHandlers/><!-- 类型处理器 -->
<objectFactory/><!-- 对象工厂 -->
<plugins/><!-- 插件 -->
<environments><!-- 配置环境 -->
<environment><!-- 环境变量 -->
<transactionManager/><!-- 事务管理器 -->
<dataSource/><!-- 数据源 -->
</environment>
</environments>
<databaseIdProvider/><!-- 数据库厂商标识 -->
<mappers/><!-- 映射器 -->
</configuration>
示例
<?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>
<typeAliases>
<package name="com.itranswarp.learnjava.pojo"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="newpass"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/itranswarp/learnjava/mapper/UserMapper.xml"></mapper>
<!-- <package name="com.itranswarp.learnjava.mapper"/>-->
</mappers>
</configuration>
2、mapper示例
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itranswarp.learnjava.mapper.UserMapper">
<select id="selectUser" resultType="UserPojo">
select * from users
</select>
</mapper>
3、使用
常用对象
Resources
SqlSessionFactory
SqlSessionFactoryBuilder
` ```java
String resource = "mybatis.xml";
InputStream in = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
SqlSession session = sqlSessionFactory.openSession();
List<UserPojo> userPojoList = session.selectList("com.itranswarp.learnjava.mapper.UserMapper.selectUser");
// List<UserPojo> userPojoList = session.selectList("UserMapper.selectUser");
for(UserPojo u: userPojoList) {
System.out.println(u.toString());
System.out.println(u.name);
}
<a name="xPvgB"></a>
## <br />
<a name="MHzEi"></a>
# 引入
<a name="vifNe"></a>
## 什么是 MyBatis-Spring?
MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。它将允许 MyBatis 参与到 Spring 的事务管理之中,创建映射器 mapper 和 SqlSession 并注入到 bean 中,以及将 Mybatis 的异常转换为 Spring 的 DataAccessException。 最终,可以做到应用代码不依赖于 MyBatis,Spring 或 MyBatis-Spring。
![image.png](https://cdn.nlark.com/yuque/0/2022/png/25674276/1643205780654-4888574c-4c44-4f7f-b640-dc48db227b13.png#clientId=u1fbe8015-dc51-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=179&id=uef0426d1&margin=%5Bobject%20Object%5D&name=image.png&originHeight=358&originWidth=450&originalType=binary&ratio=1&rotation=0&showTitle=false&size=67990&status=done&style=none&taskId=u3300df5b-38bc-4e0c-bae4-78491a163fc&title=&width=225)
```xml
原生
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
结合
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
错误
编译时提示错误 Error parsing SQL Mappe
编译时提示错误 Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource com/shao/mapping/userMapper.xml
即找不到userMapper.xml这个Mapper文件,仔细查看了目录设置,并没有错误,在网上找了半天,终于发现原因:
idea不会编译src的java目录的xml文件
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
找不到类
Mapped Statements collection does not contain value for UserMapper.selectUser
typeAliases 别名
由于类的全限定名很长,在多次需要使用的时候,比较不方便,在mybatis中允许定义一个简写来代替,这就是别名,分为系统定义和自定义别名。在mybatis中别名由类TypeAliasRegistry来定义(org.apache.ibatis.type.TypeAliasRegistry)。在mybatis中,别名不区分大小写。
3.1、自定义别名
由于现实开发中,存在许多自定义的对象需要重复使用,因此mybatis中也提供了用户自定义别名的规则。我们可以通过TypeAliasRegistry类的registerAlias方法注册,也可以采用配置文件或或者扫描方式来定义它。
3.1.1、使用配置文件定义
3.1.2、扫描
现实开发中可能存在大量的实体类,如果一个一个的配置就不适合了。因此mybatis还提供了扫描别名。如上配置:两个实体类位于同一包下,还可以这样配置:
<typeAliases>
<package name="com.ssm.pojo"/>
</typeAliases>
<br />3.1.3、注解配置别名<br />如果多个类同时包含User实体类,在通过包扫描后,可能会有冲突。则可以通过注解来区分。比如:<br />package com.ssm.pojo; @Alias("user3") public Class User{ ... ... } <br />这样就可以避免因为别名重名导致的扫描失败的问题。<br />4、typeHandler类型转换器<br />在JDBC中,需要在PreparedStatement对象中设置哪些已经预编译过的SQL语句的参数。执行SQL后,会通过ResultSet对象获取得到数据库的数据。而这些,Mybatis是根据数据库数据的类型通过TypeHandler来实现的。
作者:东方欲晓_莫道君行早
链接:https://www.jianshu.com/p/29ea937bed35
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
来源