发表于: 2019-11-07 23:31:32

1 1072


今天完成的事:
1、学习mybatis的逆向工程。
逆向工程即mybatis官方提供的,可以针对数据库内的单表,自动生成mybatis执行所需的代码,如pojo实体类、dao接口、mapper.xml文件。减轻了重复且繁琐的大量工作,但是仅仅针对单表,复杂的sql语句还是需要自己编写。
这里需要导入mybatis-generator-core的jar包,且需逆向工程的配置文件、以及执行生成代码的java类,这里也可以添加idea的maven插件进行逆向工程的生成。
一般来说都是新建一个项目进行逆向工程,因为在原有项目基础上生成代码,在有同名的情况,会进行覆盖,所以一般新建项目生成后,再复制到项目。
mybatis-generator-core的jar包依赖。
逆向工程的配置文件中,主要是连接数据库,指定文件生成位置,并且指定需要生成代码的数据表。
配置后,运行GeneratorSqlmap.java类中的main方法,生成代码,生成后注意要右键项目名刷新,如果需要再次生成,一定要把原有的删除。
下图为生成代码的结果。
其中pojo的生成还会有xxxExample类,用于设置自定义条件,可以添加到对应字段的sql语句中。比较高级。
generatorConfig.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>
    <context id="DB2Tables" targetRuntime="MyBatis3">
        <commentGenerator>
            <!-- 是否去除自动生成的注释 -->
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <!-- Mysql数据库连接的信息:驱动类、连接地址、用户名、密码 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/xzy_task3"
                        userId="root"
                        password="Zhang123!">
        </jdbcConnection>
        <!-- 默认为false,把JDBC DECIMAL 和NUMERIC类型解析为Integer,
        为true时,把JDBC DECIMAL 和NUMERIC类型解析为java.math.BigDecimal -->
        <javaTypeResolver >
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>
        <!-- targetProject:生成POJO类的位置 -->
        <javaModelGenerator targetPackage="com.chuilun.pojo" targetProject="src/main/java">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
            <!-- 从数据库返回的值被清理前后的空格 -->
            <property name="trimStrings" value="true" />
        </javaModelGenerator>
        <!-- targetProject:mapper映射文件生成的位置 -->
        <sqlMapGenerator targetPackage="dao"  targetProject="src/main/resources">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
        </sqlMapGenerator>
        <!-- targetProject:mapper接口生成的的位置 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.chuilun.dao"  targetProject="src/main/java">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
        </javaClientGenerator>
        <!-- 指定数据表 -->
        <table schema="" tableName="art_work"></table>
        <table schema="" tableName="banner"></table>
        <table schema="" tableName="message"></table>
        <table schema="" tableName="studio"></table>
        <table schema="" tableName="works"></table>
    </context>
</generatorConfiguration>
GeneratorSqlmap.java类:
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class GeneratorSqlmap {
    public void generator() throws Exception{
        List<String> warnings = new ArrayList<String>();
        boolean overwrite = true;
        //指向逆向工程配置文件
        File configFile = new File("src/main/resources/generatorConfig.xml");
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = cp.parseConfiguration(configFile);
        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
        myBatisGenerator.generate(null);
    }
    public static void main(String[] args) throws Exception {
        try {
            GeneratorSqlmap generatorSqlmap = new GeneratorSqlmap();
            generatorSqlmap.generator();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
在生成代码的包处右击,点击copy,而后在自己项目的包下,右击点击paste,直接下一步,就成功复制了整个包。。
百度了一会没有答案,就试着尝试了下,没想到这样就能直接复制粘贴。。
测试逆向工程生成的方法,根据主键id查询,这里返回的是hash码,因为在实体类中没有重写tostring方法。
生成的实体类中,没有tostring方法和构造函数,添加后,再次查询就是正常数据。
测试自定义查询方法,就用到了xxxExample类,类中有个Criteria内部类,专门用来封装自定义查询条件。
在不设置条件,直接查询时,就是查询该表的所有数据。
可以使用 andNameEqualTo 方法添加查询条件,还可以用 andNameLike 方法添加模糊查询条件。
如下,使用 andNameEqualTo 方法添加name的值,andBriefIsNull 方法添加brief为null,setOrderByClause 方法添加排序,setDistinct 方法去除重复数据,来进行相关查询。
其中 setDistinct 方法为 true 时,是选择不重复记录,也就是如下图的三个数据,第二和第三是一模一样的,这时查询就会只显示前两条数据。但是这样必须连主键都一样,也就是说就不能设置主键。。因为没有唯一性。
而为 false 时,也就相当于没有该方法,会显示三个数据。
2、学习使用AOP统一处理日志。
AOP就是面向方面的编程,将程序逻辑分解成不同的部分称为作为的关注点。跨一个应用程序的多个点的功能被称为横切关注点,这些横切关注点在概念上独立于应用程序的业务逻辑,比如日志记录、声明式事务、安全性和缓存等,好吧,我并不懂。。
spring的AOP提供拦截器来拦截一个应用程序,例如,当执行一个方法时,可以在执行之前或之后添加额外的功能。也就是说在所有的方法上都添加一个通用的日志功能,就可以用到AOP来实现。
但是具体实现还没整明白,明天再好好看看。
明天计划的事:
1、实现使用AOP统一处理日志。
2、新建项目上传阿里云,用于提交任务三。
遇到的问题:
使用AOP统一处理日志,还没有什么头绪,需要再好好找下能看懂的例子。
收获:
1、了解了方法注释可以在方法上添加“/**”,回车,即可生成注释。
2、学习了mybatis的逆向工程,了解了xxxExample类,类中有个Criteria内部类,专门用来封装自定义查询条件。
了解了 andNameEqualTo 方法添加name查询条件,andNameLike 方法添加name模糊查询条件,andBriefIsNull 方法添加brief为null,setOrderByClause 方法添加排序,setDistinct 方法去除重复数据,来进行相关查询。
其中 setDistinct 方法为 true 时,是选择不重复记录,也就是三个数据,第二和第三是一模一样的,这时查询就会只显示前两条数据。但必须连主键都一样,也就是说不能设置主键。为 false 时,也就相当于没有该方法,会显示三个数据。
3、简单了解下AOP。

返回列表 返回列表
评论

    分享到