zoukankan      html  css  js  c++  java
  • springboot集成mybatis及mybatis generator工具使用

    原文链接 

    前言
    mybatis是一个半自动化的orm框架,所谓半自动化就是mybaitis只支持数据库查出的数据映射到pojo类上,而实体到数据库的映射需要自己编写sql语句实现,相较于hibernate这种完全自动化的框架我更喜欢mybatis,mybatis非常灵活,可以随心所欲的编写自己的sql语句来实现复杂的数据库操作,还会有一种畅酣淋漓的编写sql语句的潇洒感,但是以前的mybaits需要一大堆的配置文件,以及各种mapper和dao和实体的关联,导致使用mybatis还是不够简洁,后来mybatis也发现了这个弊端,开发了mybatis generator工具来自动化生成实体类、mapper配置文件、dao层代码来减轻开发工作量,在后期也是实现了抛弃mapper配置文件基于注解的开发模式,直到现在,mybatis看spring boot这么火热,也开发了一套基于spring boot的模式:mybatis-spring-boot-starter。
    spring boot简约轻巧的风格正在逐渐被越来越多的厂商及开发者所认可,包括阿里的开源RPC框架dubbo也准备开发一套对spring boot应用的支持(dubbo-spring-boot-starter启动配置模块)

    正文
    springboot与mybatis集成
    首先还是从http://start.spring.io/ 上初始化一个项目下来,然后在pom.xml文件中加入mybatis启动项(由于mybatis-spring-boot-starter依赖了spring-boot-starter,所以可以不用再添加spring-boot-starter了)以及mysql及web依赖

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.1</version>
        </dependency>
    
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    在application.properties中配置数据源及mybatis配置:

    spring.application.name=spring-boot-config
    server.port=8080
    server.context-path=/
    
    #mybatis.config-location=classpath:mybatis-config.xml
    #mybatis mapper文件的位置
    mybatis.mapper-locations=classpath*:mapper/**/*.xml
    #扫描pojo类的位置,在此处指明扫描实体类的包,在mapper中就可以不用写pojo类的全路径名了
    mybatis.type-aliases-package=com.cuit
    
    jdbc.type=mysql
    spring.datasource.url=jdbc:mysql://localhost:3306/demo
    spring.datasource.username=root
    spring.datasource.password=123456
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver

    可以通过mybatis.config-location属性来指定mybatis的配置文件的位置,简单起见这里使用默认配置就不用指定了,接下来分别在数据库中创建user表,并插入一些数据 

    分别创建pojo类和dao接口对应mapper文件

    public class User{
        private String id;
    
        private String name;
    
        private String sex;
    
        private int age;
    
    }
    
    @Mapper//加上该注解才能使用@MapperScan扫描到
    public interface UserDao {
    
        User getUserById(@Param("id") int id);
    
        int updateUser(@Param("user") User user);
    
        int insertUser(@Param("user") User user);
    
        int deleteUserById(@Param("id") int id);
    }

    对应的mapper文件:

    <?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.cuit.springboot.dao.UserDao">
    
        <select id="getUserById" resultType="User">
            SELECT
                  ID as id,
                  NAME as name,
                  SEX as sex,
                  AGE as age
            FROM user
            WHERE ID = #{id}
        </select>
        <update id="updateUser">
            UPDATE user
            SET NAME = #{user.name},
                SEX = #{user.sex},
                AGE = #{user.age}
            WHERE ID = #{user.id}
        </update>
        <insert id="insertUser">
            INSERT INTO
                user(id, name, sex, age)
                VALUES (
                    #{user.id},
                    #{user.name},
                    #{user.sex},
                    #{user.age}
                )
        </insert>
        <delete id="deleteUserById">
            DELETE user WHERE ID = #{id}
        </delete>
    
    </mapper>

    在启动类上加上@MapperScan注解,扫描指定包下的dao类:

    @ComponentScan("com.cuit")
    @MapperScan("com.cuit")
    public class SpringBootApplicationStarter {
        ...
    }

    最后写个Controller方法用于测试:

    @RestController
    public class HelloController {
    
        @Autowired
        private UserDao userDao;
    
        @RequestMapping("/hello")
        public User hello(){
            User user = userDao.getUserById(1);
            System.out.println(user);
            return user;
        }
    
    }

    在浏览器中输入http://localhost:8080/hello 可以看到已经查到数据了,sprigboot与mybatis简单集成就完成了。

    使用注解方式

    当我们需要一个很简单的DML功能时,如果去创建mapper文件并编写一堆语句的时候也许会显得很麻烦,这个时候就可以通过注解的方式简化配置,新建一个UserAnnotationDao通过注解的方式来实现增删改查:

    @Mapper
    public interface UserAnnotationDao {
    
        @Select("SELECT * FROM user WHERE id = #{id}")
        @Results({
                @Result(property = "id", column = "id"),
                @Result(property = "name", column = "name"),
                @Result(property = "sex", column = "sex"),
                @Result(property = "age", column = "age")
        })
        User getUserById(int id);
    
        @Select("SELECT * FROM user")
        @Results({
                @Result(property = "id", column = "id"),
                @Result(property = "name", column = "name"),
                @Result(property = "sex", column = "sex"),
                @Result(property = "age", column = "age")
        })
        List<User> queryAll();
    
        @Update("UPDATE user SET NAME = #{user.name}, SEX = #{user.sex}, AGE = #{user.age} WHERE ID = #{user.id}")
        int updateUser(User user);
    
        @Insert("INSERT INTO user(id, name, sex, age) VALUES (#{user.id}, #{user.name}, #{user.sex}, #{user.age})")
        int insertUser(User user);
    
        @Delete("DELETE user WHERE ID = #{id}")
        int deleteUserById(int id);
    }

    使用注解自后就不需要mapper文件了,分别测试这几个方法均能正确执行,使用注解和使用xml的方式都差不多,通常情况下,如果没有复杂的连接查询,我们可以使用注解的方式,当设计到复杂的sql还是使用xml的方式更好掌控一些,所以通常情况下两种方式都会使用,根据sql的复杂程度选择不同的方式来提高开发效率。

    mybatis generator工具的使用
    在前言中说到,mybatis也发现了我们需要重复的去创建pojo类、mapper文件以及dao类并且需要配置它们之间的依赖关系可能会很麻烦,所以mybtis提供了一个mybatis generator工具来帮我们自动创建pojo类、mapper文件以及dao类并且会帮我们配置好它们的依赖关系,而我们只需要关系我们的业务逻辑直接使用就行了。
    要使用mybatis generator工具需要在pom.xml文件中添加一个generator的maven工具:

    <build>
          <plugins>
               <plugin>
                   <groupId>org.mybatis.generator</groupId>
                   <artifactId>mybatis-generator-maven-plugin</artifactId>
                   <version>1.3.2</version>
                   <executions>
                       <execution>
                           <id>Generate MyBatis Artifacts</id>
                           <phase>deploy</phase>
                           <goals>
                               <goal>generate</goal>
                           </goals>
                       </execution>
                   </executions>
                   <configuration>
                       <!-- generator 工具配置文件的位置 -->
                       <configurationFile>src/main/resources/mybatis-generator/generatorConfig.xml</configurationFile>
                       <verbose>true</verbose>
                       <overwrite>true</overwrite>
                   </configuration>
                   <dependencies>
                        <dependency>
                            <groupId>mysql</groupId>
                            <artifactId>mysql-connector-java</artifactId>
                            <version>5.1.34</version>
                        </dependency>
                        <dependency>
                            <groupId>org.mybatis.generator</groupId>
                            <artifactId>mybatis-generator-core</artifactId>
                            <version>1.3.2</version>
                        </dependency>
                   </dependencies>
               </plugin>
               <plugin>
                   <groupId>org.springframework.boot</groupId>
                   <artifactId>spring-boot-maven-plugin</artifactId>
                   <configuration>
                       <classifier>exec</classifier>
                   </configuration>
               </plugin>
           </plugins>
       </build>

    上面指定了mybatis generator工具配置文件的位置,在这个位置创建一个xml文件,并做如下配置:

    <?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>
        <!--执行generator插件生成文件的命令: call mvn mybatis-generator:generate -e -->
        <!-- 引入配置文件 -->
        <properties resource="mybatis-generator/mybatisGeneratorinit.properties"/>
        <!--classPathEntry:数据库的JDBC驱动,换成你自己的驱动位置 可选 -->
        <!--<classPathEntry location="D:generator_mybatismysql-connector-java-5.1.24-bin.jar" /> -->
    
        <!-- 一个数据库一个context -->
        <!--defaultModelType="flat" 大数据字段,不分表 -->
        <context id="MysqlTables" targetRuntime="MyBatis3Simple" defaultModelType="flat">
            <!-- 自动识别数据库关键字,默认false,如果设置为true,根据SqlReservedWords中定义的关键字列表;
            一般保留默认值,遇到数据库关键字(Java关键字),使用columnOverride覆盖 -->
            <property name="autoDelimitKeywords" value="true" />
            <!-- 生成的Java文件的编码 -->
            <property name="javaFileEncoding" value="utf-8" />
            <!-- beginningDelimiter和endingDelimiter:指明数据库的用于标记数据库对象名的符号,比如ORACLE就是双引号,MYSQL默认是`反引号; -->
            <property name="beginningDelimiter" value="`" />
            <property name="endingDelimiter" value="`" />
    
            <!-- 格式化java代码 -->
            <property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>
            <!-- 格式化XML代码 -->
            <property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/>
            <plugin type="org.mybatis.generator.plugins.SerializablePlugin" />
    
            <plugin type="org.mybatis.generator.plugins.ToStringPlugin" />
    
            <!-- 注释 -->
            <commentGenerator >
                <property name="suppressAllComments" value="false"/><!-- 是否取消注释 -->
                <property name="suppressDate" value="true" /> <!-- 是否生成注释代时间戳-->
            </commentGenerator>
    
            <!-- jdbc连接 -->
            <jdbcConnection driverClass="${jdbc_driver}" connectionURL="${jdbc_url}" userId="${jdbc_user}" password="${jdbc_password}" />
            <!-- 类型转换 -->
            <javaTypeResolver>
                <!-- 是否使用bigDecimal, false可自动转化以下类型(Long, Integer, Short, etc.) -->
                <property name="forceBigDecimals" value="false"/>
            </javaTypeResolver>
    
            <!-- 生成实体类地址 -->
            <javaModelGenerator targetPackage="com.cuit.springboot.gentry" targetProject="${project}" >
                <property name="enableSubPackages" value="false"/>
                <property name="trimStrings" value="true"/>
            </javaModelGenerator>
            <!-- 生成mapxml文件 -->
            <sqlMapGenerator targetPackage="mappers" targetProject="${resources}" >
                <property name="enableSubPackages" value="false" />
            </sqlMapGenerator>
            <!-- 生成mapxml对应client,也就是接口dao -->
            <javaClientGenerator targetPackage="com.cuit.springboot.gdao" targetProject="${project}" type="XMLMAPPER" >
                <property name="enableSubPackages" value="false" />
            </javaClientGenerator>
            <!-- table可以有多个,每个数据库中的表都可以写一个table,tableName表示要匹配的数据库表,也可以在tableName属性中通过使用%通配符来匹配所有数据库表,只有匹配的表才会自动生成文件 -->
            <table tableName="user" enableCountByExample="true" enableUpdateByExample="true" enableDeleteByExample="true" enableSelectByExample="true" selectByExampleQueryId="true">
                <property name="useActualColumnNames" value="false" />
                <!-- 数据库表主键 -->
                <generatedKey column="id" sqlStatement="Mysql" identity="true" />
            </table>
        </context>
    </generatorConfiguration>

    在同目录下创建mybatisGeneratorinit.properties文件:

    #Mybatis Generator configuration
    #dao类和实体类的位置
    project =src/main/java
    #mapper文件的位置
    resources=src/main/resources
    #根据数据库中的表生成对应的pojo类、dao、mapper
    jdbc_driver =com.mysql.jdbc.Driver
    jdbc_url=jdbc:mysql://localhost:3306/demo
    jdbc_user=root
    jdbc_password=123456

    到此,整个配置就完成了,既然该工具的作用是将数据库中的表生成对应的实体、dao类和mapper文件,那么首先需要建立数据库表,当数据库表建立好后在pom.xml文件所在的目录执行如下命令:

    mvn mybatis-generator:generate

    然后就可以看到在指定目录下已经生成了对应的文件,关于mybatis generator的更多详细的配置可以参考这篇文章:

    Mybatis Generator最完整配置详解 。

  • 相关阅读:
    python Database Poll for SQL SERVER
    SQLAlchemy表操作和增删改查
    flask动态url规则
    flask配置管理
    一个Flask运行分析
    Function Set in OPEN CASCADE
    Happy New Year 2016
    Apply Newton Method to Find Extrema in OPEN CASCADE
    OPEN CASCADE Multiple Variable Function
    OPEN CASCADE Gauss Least Square
  • 原文地址:https://www.cnblogs.com/panchanggui/p/10396449.html
Copyright © 2011-2022 走看看