• mybatis基础系列(一)——mybatis入门


    好久不发博客了,写博文的一个好处是能让心静下来,整理下之前学习过的一些知识一起分享,大神路过~

    mybatis简介

    MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。传统的 JDBC代码通常存在如下问题:

    1. 频繁对数据库进行连接和关闭,造成资源浪费,性能下降。

    2. SQL代码、preparedStatement参数、占位符号等硬编码到代码中,不方便维护。

    3. 遍历结果集数据时,硬编码解析表字段成java属性,不方便维护。

    MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。

    MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

    mybatis框架简要原理

    mybatis的核心类与会话流程如下:

    Configuration:读取mybatis配置文件(SqlMapConfig.xml、mapper.xml等)->

    SqlSessionFactory:根据配置文件创建会话工厂->

    SqlSession:API接口,表示和数据库交互时的会话,定义增删改查->

    Executor:MyBatis 核心执行器,负责SQL语句的生成->

    MappedStatement:负责输入输出的封装。

    更详细的流程可参考其它资料。

    mybatis与springboot 整合

    创建项目

    Idea: File->new->project->Spring initializr->Next 依次输入maven坐标信息,Dependencies选择Mysql、Mybatis。在File->Setting->Maven中配置本地Maven安装目录和setting.xml配置文件路径,完成。

    image

    习惯用yml了,将application.properties改为application.yml。在 mybatis 开发包里面,会将 druid 的配置的数据库连接池变为所需要的 DataSource 数据源对象。下文junit Test中会用到。

    <dependencies>
            <!--mybatis 开发包-->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.3.2</version>
            </dependency>
    
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <!--druid 的数据源-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.0.31</version>
            </dependency>
        </dependencies>

    创建数据库以及关系表

    CREATE DATABASE mybatis_test;
    USE mybatis_test;
    CREATE TABLE t_user(
      id BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT,
      name VARCHAR(255) NOT NULL ,
      password VARCHAR(255) NOT NULL ,
      phone VARCHAR(255) NOT NULL
    ) ENGINE=INNODB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8;

    配置数据库连接方式与数据源

    后面要进行druid 的数据源的配置,需在pom.xml文件中添加druid 依赖包。

    <!--druid 的数据源-->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.0.31</version>
    </dependency>

    yml配置

    spring:
      datasource:
         url: jdbc:mysql://127.0.0.1:3306/mybatis_test
         username: root
         password: root
         driver-class-name: com.mysql.jdbc.Driver
         type: com.alibaba.druid.pool.DruidDataSource
         dbcp2:
           min-idle: 5
           initial-size: 5
           max-total: 5
           max-wait-millis: 200

    添加自动生成代码插件以及配置文件

    pom中的<plugins>添加mybatis generator 自动生成代码插件

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <!-- mybatis generator 自动生成代码插件 -->
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.2</version>
                <configuration>
                    <configurationFile>${basedir}/src/main/resources/generatorConfig.xml</configurationFile>
                    <overwrite>true</overwrite>
                    <verbose>true</verbose>
                </configuration>
            </plugin>
        </plugins>
    </build>

    新增/src/main/resources/generatorConfig.xm配置文件

    <?xml version="1.0" encoding="UTF-8"?>
     <!DOCTYPE generatorConfiguration
              PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
              "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
    
    <generatorConfiguration>
        <!-- 数据库驱动:选择你的本地硬盘上面的数据库驱动包-->
        <classPathEntry  location="C:Usershjwu.m2
    epositorymysqlmysql-connector-java5.1.46mysql-connector-java-5.1.46.jar"/>
        <context id="DB2Tables"  targetRuntime="MyBatis3">
            <commentGenerator>
                <property name="suppressDate" value="true"/>
                <!-- 是否去除自动生成的注释 true:是 : false:否 -->
                <property name="suppressAllComments" value="true"/>
            </commentGenerator>
            <!--数据库链接URL,用户名、密码 -->
            <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                            connectionURL="jdbc:mysql://localhost:3306/mybatis_test?characterEncoding=utf8"
                            userId="root" password="root">
            </jdbcConnection>
            <javaTypeResolver>
                <property name="forceBigDecimals" value="false"/>
            </javaTypeResolver>
            <!-- 生成模型的包名和位置-->
            <javaModelGenerator targetPackage="com.itpsc.entity" targetProject="src/main/java">
                <property name="enableSubPackages" value="true"/>
                <property name="trimStrings" value="true"/>
            </javaModelGenerator>
            <!-- 生成映射文件的包名和位置-->
            <sqlMapGenerator targetPackage="com.itpsc.mapper.xml" targetProject="src/main/java">
                <property name="enableSubPackages" value="true"/>
            </sqlMapGenerator>
            <!-- 生成DAO的包名和位置-->
            <javaClientGenerator type="XMLMAPPER" targetPackage="com.itpsc.mapper" targetProject="src/main/java">
                <property name="enableSubPackages" value="true"/>
            </javaClientGenerator>
            <table tableName="t_user" domainObjectName="User"></table>
        </context>
    </generatorConfiguration>

    运行插件生成CRUD代码,自动生成代码可以提高我们的开发效率。

    image

    可见自动生成user实体类、Mapper文件、xxxMapper.xml

    image

    启动测试

    启动SpringbootMybatisDemoApplication测试

    问题1

    o.m.s.mapper.ClassPathMapperScanner      : No MyBatis mapper was found in '[com.itpsc]' package. Please check your configuration.

    解决办法:在SpringbootMybatisDemoApplication中注解@MapperScan("com.itpsc.mapper*")

    问题2:

    Unregistering JMX-exposed beans on shutdown

    解决办法:

    pom.xml添加下面两个依赖包

    <!--嵌入tomcat-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
    </dependency>
    <!--springboot web模块支持-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    启动成功

    整合Mybatis-Plus

    添加mybatis plus插件。Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

    <!-- mybatis -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatisplus-spring-boot-starter</artifactId>
        <version>1.0.4</version>
    </dependency>
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus</artifactId>
        <version>2.0.7</version>
    </dependency>

    业务实现

    //User.java
    @TableName("t_user")
    public class User {
        private Long id;
        private String name;
        private String password;
        private String phone;
    ......
    }
    
    //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" >
    <mapper namespace="com.itpsc.mapper.UserMapper" >
    </mapper>
    
    //UserMapper.java
    public interface UserMapper extends BaseMapper<User>{
    }
    
    //UserService.java
    public interface UserService {
        boolean insert(User user);
        User query(Integer id);
        boolean update(User user);
        int delete(Integer id);
    }
    
    //UserServiceImpl.java
    
    @Service
    public class UserServiceImpl extends ServiceImpl<UserMapper,User> implements UserService{
        @Override
        public boolean insert(User entity) {
            return super.insert(entity);
        }
        @Override
        public User query(Integer id) {
            return super.selectById(id);
        }
        @Override
        public boolean update(User user) {
            return super.updateById(user);
        }
        @Override
        public int delete(Integer id) {
            return 0;
        }
    }
    
     
    //SpringbootMybatisDemoApplicationTests 
    SpringbootMybatisDemoApplicationTests.java
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class SpringbootMybatisDemoApplicationTests {
    
        @Resource
        private DataSource dataSource;
        @Resource
        private UserService userService;
    
        @Test
        public void contextLoads() {
        }
    
        @Test
        public void testConnection() throws Exception {
            System.out.println(this.dataSource);
        }
    
        @Test
        public void testInsertUser() {
            User user = new User();
            //user.setId(2L);
            user.setName("name3");
            user.setPassword("123456");
            user.setPhone("138777888888");
            System.out.println(userService.insert(user));
        }
        @Test
        public void testQueryUser() {
            System.out.println(userService.query(1));
        }
        @Test
        public void testUpdateUser() {
            User user = new User();
            user.setId(1L);
            user.setName("update name1 tow times");
            user.setPassword("98764");
            user.setPhone("13877711111");
            System.out.println(userService.update(user));
        }
    }

    从上面可以看出,我们的UserMapper.xml中不用写crud语句,Mybatis-Plus帮我们封装了基本的curd。下面我们重点学习mybatis的基础语法。

    下篇预告

    mybatis基础系列(二)——(增删改查语法、别名、输入映射、输出映射)

  • 相关阅读:
    tensorflow之tf.meshgrid()
    Python中数据的保存和读取
    透视投影推导
    tensorflow之tf.slice()
    tensorflow的tf.train.Saver()模型保存与恢复
    偶数分割求平均值
    母牛的故事
    统计一行的不重复的单词字符个数
    N个顶点构成多边形的面积
    贪心法基本入门
  • 原文地址:https://www.cnblogs.com/hjwublog/p/9957312.html
Copyright © 2020-2023  润新知