• Hello Mybatis 02 mybatis generator


     接着上一篇文章通过Mybatis完成了一个UserCRUD的功能之后,这篇开始还需要建立一个Blog类,这样就可以模拟一个简单的微博平台的数据库了。

    数据库准备

    首先我们,还是需要在数据库中新建一个表blog

     

     1 CREATE TABLE `blog`.`blog` (
     2   `b_id` INT NOT NULL,
     3   `b_title` VARCHAR(45) NULL,
     4   `b_content` VARCHAR(255) NULL,
     5   `user_id` INT NULL,
     6   PRIMARY KEY (`b_id`),
     7   INDEX `fk_blog_user_idx` (`user_id` ASC),
     8   CONSTRAINT `fk_blog_user`
     9     FOREIGN KEY (`user_id`)
    10     REFERENCES `blog`.`user` (`id`)
    11     ON DELETE NO ACTION
    12     ON UPDATE NO ACTION);

     

     接下来,Oh~不,难道又要写一堆的xml和方法才能折腾完CRUD吗?这当然是我这种懒人不喜欢干的。还好mybatis提供了一个代码生成器mybatis generator工具

     可以去githubmybatis generator主页上下载这个工具

    https://github.com/mybatis/generator/releases

     我使用的是生成器版本是1.3.2

     

    配置文件

    接着只需要一个配置generator文件我们就能让上一篇里写个半死的东西全部自动生成出来了。

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE generatorConfiguration
     3   PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
     4   "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
     5 
     6 <generatorConfiguration>
     7   <!-- 配置mysql 驱动jar包路径.用了绝对路径 -->
     8   <classPathEntry location="/home/whthomas/software/javaframework/mysql-connector-java-5.1.30/mysql-connector-java-5.1.30-bin.jar" />
     9   <context id="mysql_tables" targetRuntime="MyBatis3">
    10       <!--<plugin type="pro.plugin.PaginationPlugin" /> 
    11      为了防止生成的代码中有很多注释,比较难看,加入下面的配置控制 -->
    12     <commentGenerator>
    13       <property name="suppressAllComments" value="true" />
    14       <property name="suppressDate" value="true" />
    15     </commentGenerator>
    16     <!-- 注释控制完毕 -->
    17   
    18     <!-- 数据库连接 -->
    19     <jdbcConnection driverClass="org.gjt.mm.mysql.Driver"
    20         connectionURL="jdbc:mysql://127.0.0.1:3306/blog"
    21         userId="mybatis"
    22         password="mybatis">
    23     </jdbcConnection>
    24     <javaTypeResolver >
    25       <property name="forceBigDecimals" value="false" />
    26     </javaTypeResolver>
    27     
    28     <!-- 数据表对应的model 层  -->
    29     <javaModelGenerator targetPackage="pro.app.model" targetProject="../src">
    30       <property name="enableSubPackages" value="true" />
    31       <property name="trimStrings" value="true" />
    32     </javaModelGenerator>
    33     
    34     <!-- sql mapper 映射配置文件 -->
    35     <sqlMapGenerator targetPackage="pro.app.mapper"  targetProject="../src">
    36       <property name="enableSubPackages" value="true" />
    37     </sqlMapGenerator>
    38     
    39     <!-- 在ibatis2 中是dao层,但在mybatis3中,其实就是mapper接口 -->
    40     <javaClientGenerator type="XMLMAPPER" targetPackage="pro.app.inter"  targetProject="../src">
    41       <property name="enableSubPackages" value="true" />
    42     </javaClientGenerator>
    43     
    44     <!-- 要对那些数据表进行生成操作,必须要有一个. -->
    45       <table schema="blog" tableName="blog"
    46           enableCountByExample="false" enableUpdateByExample="false"
    47         enableDeleteByExample="false" enableSelectByExample="false"
    48         selectByExampleQueryId="false">
    49         <generatedKey column="b_id" sqlStatement="MySql" identity="true"/>
    50     </table>
    51     
    52   </context>
    53 </generatorConfiguration>

    mybatis generator可以生成三种类型的文件:vo类、Dao接口层和Mapper.xml文件,通过这个配置文件告诉generator你需要生成哪一些需要的文件。

     在命令行界面输入

    java -jar mybatis-generator-core-1.3.2.jar -configfile generatorConfig.xml -overwrite

     这里的 -jar -configfile 后面都是可以跟随相对路径的。输入这条命令之后,包括vo类、dao接口和mapper.xml文件全部都生成好了。整个人都好起来了。

     新建一个BlogTest类,来测试一下生成的代码好不好用!

     1 package pro.test;
     2 
     3 import java.io.Reader;
     4 
     5 import org.apache.ibatis.io.Resources;
     6 import org.apache.ibatis.session.SqlSession;
     7 import org.apache.ibatis.session.SqlSessionFactory;
     8 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
     9 
    10 import pro.app.inter.BlogMapper;
    11 import pro.app.model.Blog;
    12 
    13 public class BlogTest {
    14     private static SqlSessionFactory sqlSessionFactory;
    15     private static Reader reader; 
    16     static{
    17         try{
    18             reader= Resources.getResourceAsReader("Configuration.xml");
    19             sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
    20         }catch(Exception e){
    21             e.printStackTrace();
    22         }
    23     }
    24     public static SqlSessionFactory getSession(){
    25         return sqlSessionFactory;
    26     }
    27     public static void main(String[] args) {
    28         SqlSession session = sqlSessionFactory.openSession();
    29         try {
    30             BlogMapper blogDAO = session.getMapper(BlogMapper.class);
    31             //生成一个Blog实例
    32             Blog blog=new Blog();
    33             blog.setbTitle("Mybatis");
    34             blog.setbContent("Mybatis is good! ");
    35             blog.setUserId(1);
    36             //新增一条Blog记录到数据库
    37             blogDAO.insert(blog);
    38             //从数据库选取刚刚的那一条Blog
    39             Blog record=blogDAO.selectByPrimaryKey(1);
    40             System.out.println(record.getbTitle());
    41             System.out.println(record.getbContent());
    42             //修改数据并保存
    43             blog.setbTitle("mybatis update");
    44             blogDAO.updateByPrimaryKey(blog);
    45             //删除数据
    46             blogDAO.deleteByPrimaryKey(1);
    47         } finally {
    48             session.close();
    49         }
    50     }
    51 }

    控制台输出:

    Mybatis
    Mybatis is good!

    ok,没有报错。CRUD全部都搞定!省去了不少时间,设想如果有很多表使用这个工具可以节约多少的时间哇~当然复杂的sql语句还是要自己完成的。

     总结

     使用mybatis generator完成基本的CRUD配置。

     

  • 相关阅读:
    根据前序遍历和中序遍历重建二叉树
    Java内部类
    Java浅克隆和深度克隆
    【leetcode】1354. Construct Target Array With Multiple Sums
    【leetcode】1352. Product of the Last K Numbers
    【leetcode】1351. Count Negative Numbers in a Sorted Matrix
    【leetcode】1342. Number of Steps to Reduce a Number to Zero
    【leetcode】1343. Number of Sub-arrays of Size K and Average Greater than or Equal to Threshold
    【leetcode】1344. Angle Between Hands of a Clock
    【leetcode】1346. Check If N and Its Double Exist
  • 原文地址:https://www.cnblogs.com/whthomas/p/3761996.html
Copyright © 2020-2023  润新知