接着上一篇文章通过Mybatis完成了一个User的CRUD的功能之后,这篇开始还需要建立一个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工具。
可以去github的mybatis 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配置。