使用Mybatis

  1. 编写实体类
  2. 编写核心配置文件
  3. 编写接口
  4. 编写Mapper.xml
  5. 测试

使用Mybatis

配置文件

1、主配置文件

代码如下

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration><!-- 配置 -->
  6. <properties/><!-- 属性 -->
  7. <settings/><!-- 设置 -->
  8. <typeAliases/><!-- 类型别名 -->
  9. <typeHandlers/><!-- 类型处理器 -->
  10. <objectFactory/><!-- 对象工厂 -->
  11. <plugins/><!-- 插件 -->
  12. <environments><!-- 配置环境 -->
  13. <environment><!-- 环境变量 -->
  14. <transactionManager/><!-- 事务管理器 -->
  15. <dataSource/><!-- 数据源 -->
  16. </environment>
  17. </environments>
  18. <databaseIdProvider/><!-- 数据库厂商标识 -->
  19. <mappers/><!-- 映射器 -->
  20. </configuration>

示例

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <!DOCTYPE configuration
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6. <typeAliases>
  7. <package name="com.itranswarp.learnjava.pojo"/>
  8. </typeAliases>
  9. <environments default="development">
  10. <environment id="development">
  11. <transactionManager type="JDBC"></transactionManager>
  12. <dataSource type="POOLED">
  13. <property name="driver" value="com.mysql.jdbc.Driver"/>
  14. <property name="url" value="jdbc:mysql:localhost:3306/test"/>
  15. <property name="username" value="root"/>
  16. <property name="password" value="newpass"/>
  17. </dataSource>
  18. </environment>
  19. </environments>
  20. <mappers>
  21. <mapper resource="com/itranswarp/learnjava/mapper/UserMapper.xml"></mapper>
  22. <!-- <package name="com.itranswarp.learnjava.mapper"/>-->
  23. </mappers>
  24. </configuration>

2、mapper示例

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.itranswarp.learnjava.mapper.UserMapper">
  6. <select id="selectUser" resultType="UserPojo">
  7. select * from users
  8. </select>
  9. </mapper>

3、使用

常用对象

  • Resources
  • SqlSessionFactory
  • SqlSessionFactoryBuilder
  • ` ```java

    1. String resource = "mybatis.xml";
    2. InputStream in = Resources.getResourceAsStream(resource);
    3. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
  1. SqlSession session = sqlSessionFactory.openSession();
  2. List<UserPojo> userPojoList = session.selectList("com.itranswarp.learnjava.mapper.UserMapper.selectUser");
  3. // List<UserPojo> userPojoList = session.selectList("UserMapper.selectUser");
  4. for(UserPojo u: userPojoList) {
  5. System.out.println(u.toString());
  6. System.out.println(u.name);
  7. }
  1. <a name="xPvgB"></a>
  2. ## <br />
  3. <a name="MHzEi"></a>
  4. # 引入
  5. <a name="vifNe"></a>
  6. ## 什么是 MyBatis-Spring?
  7. MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。它将允许 MyBatis 参与到 Spring 的事务管理之中,创建映射器 mapper 和 SqlSession 并注入到 bean 中,以及将 Mybatis 的异常转换为 Spring 的 DataAccessException。 最终,可以做到应用代码不依赖于 MyBatis,Spring 或 MyBatis-Spring。
  8. ![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)
  9. ```xml
  10. 原生
  11. <dependency>
  12. <groupId>org.mybatis</groupId>
  13. <artifactId>mybatis</artifactId>
  14. <version>3.5.2</version>
  15. </dependency>
  16. 结合
  17. <dependency>
  18. <groupId>org.mybatis</groupId>
  19. <artifactId>mybatis-spring</artifactId>
  20. <version>2.0.6</version>
  21. </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文件

  1. <resources>
  2. <resource>
  3. <directory>src/main/java</directory>
  4. <includes>
  5. <include>**/*.xml</include>
  6. </includes>
  7. </resource>
  8. </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还提供了扫描别名。如上配置:两个实体类位于同一包下,还可以这样配置:

  1. <typeAliases>
  2. <package name="com.ssm.pojo"/>
  3. </typeAliases>
  1. <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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

来源

https://www.jianshu.com/p/29ea937bed35