ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Mybatis_学习1

2021-09-28 01:02:57  阅读:175  来源: 互联网

标签:xml 数据库 UserMapper 学习 mybatis Mybatis 2.2


1. Mybatis简介

1.1 什么是Mybatis

  • Mybatis是一个持久层框架
  • 避免了几乎所有的JDBC代码和手动设置参数以及获取结果集的过程
  • 使用XML或者注释配置和映射原生信息, 将接口和Java的实体类映射成数据库中的记录

1.2 持久层

  • 什么是持久层:
    • 完成持久化工作的代码块(dao层)
    • 大多数情况通过各种关系数据库来完成
    • 我们的系统架构中,应该有一个相对独立的逻辑层面,专著于数据持久化逻辑的实现
    • 这个层面应该具有一个较为清晰和严格的逻辑边界

1.3 Mybatis作用

  • Mybatis就是帮助程序猿将数据存入数据库中 , 和从数据库中取数据
  • MyBatis 是一个半自动化的ORM框架 (Object Relationship Mapping) -->对象关系映射
  • MyBatis的优点
    • 没有任何第三方依赖
    • 不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。
    • 解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
    • 提供xml标签,支持编写动态sql。

2. 第一个Mybatis程序

流程: 环境搭建->加载Mybatis的jar包->编写程序->测试

2.1 创建数据库

create datebase `mybatis`;
use `mybatis`;
drop table if exists `user`;
create table `user`(
	`id` int(20) NOT NULL,
	`name` varchar(30) DEFAULT NULL,
	`pwd` varchar(30) DEFAULT NULL,
	PRIMARY KEY (`id`)
);
insert into `user`(`id`,`name`,`pwd`) values (1,'aa','123456'),(2,'bb','abcdef'),(3,'cc','987654');

2.2 idea创建Maven项目

2.2.1 导入所需的jar包

<!--导入Mybatis依赖-->
    <dependencies>
        <!--mysql 驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.24</version>
        </dependency>
        <!--mybatis -->
        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.6</version>
        </dependency>
        <!--junit-->
        <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

2.2.2 创建mybatis-config.xml 配置文件

image
XML 配置文件中包含了对 MyBatis 系统的核心设置,包括获取数据库连接实例的数据源(DataSource)以及决定事务作用域和控制方式的事务管理器(TransactionManager)

<?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.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&amp;useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
<!--    请注意项目里每写一个mapper都需要在这里进行注册!-->
    <mappers>
        <mapper resource="com/ctgu/dao/UserMapper.xml"/>
    </mappers>
</configuration>

2.2.3 构建 SqlSessionFactory 的实例

image
每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得

//构建sqlSessionFactory 生产 sqlSession
public class MybatisUtils {
    private static SqlSessionFactory sqlSessionFactory;
    static {
        try {
            //获取sqlSessionFactory对象
            String resource = "mybatis-config.xml";
            InputStream inputStream;
            inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //SqlSession 提供了在数据库执行 SQL 命令所需的所有方法
    //可以通过 SqlSession 实例来直接执行已映射的 SQL 语句
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }
}

2.2.4 创建实体类User

image

2.2.5 创建Dao层

image

  • UserMapper
public interface UserMapper {
    List<User> getUserList();
}
  • UserMapper.xml
<?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">

<!--namespace ==> mapper/dao interface  中文 -->
<mapper namespace="com.ctgu.dao.UserMapper">
    <select id="getUserList" resultType="com.ctgu.pojo.User">
        select * from user
    </select>
</mapper>

2.2.6 创建测试类 UserMapperTest

image

public class UserMapperTest {
    @Test
    public void test(){
        //第一步获取sqlSession, 使用try-with-resource方法会自动关闭资源
        try(SqlSession sqlSession =  MybatisUtils.getSqlSession()){
            //执行sql
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            List<User> userList = mapper.getUserList();
            for(User user : userList){
                System.out.println(user);
            }
        }
    }
}

输出结果:
结果根据自己创建的数据库表的内容不同而不同
image


至此第一个Mybatis程序就完成了
特别感谢遇见狂神说的视频教程

3. 常见问题

3.1 提示org.apache.ibatis.binding.BindingException: Type interface com.ctgu.dao.UserMapper is not known to the MapperRegistry.

找不到com.ctgu.dao.UserMapper的原因是没有在mybatis-config.xml这个文件中注册mapper
image
注册即可

3.2 配置文件无法被导出或者生效

pom.xml文件中加入配置:

<!--在build中配置resources,来防止我们资源导出失败的问题-->
    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>

添加完成后 Reload All Maven Projects
image
重新 run test 即可

3.3 报错"1字节的UTF-8序列的字节1无效" Invalid byte 1 of 1-byte UTF-8 sequence

设置idea的默认编码和项目编码:
image
重启idea即可

标签:xml,数据库,UserMapper,学习,mybatis,Mybatis,2.2
来源: https://www.cnblogs.com/kaixin-wbl/p/15346043.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有